当前位置: 首页 > news >正文

物联网开发笔记(6)- 使用Wokwi仿真树莓派Pico实现按键操作

这篇文章和大家一起来看下按键相关的操作。

一、目的

使用按键来控制LED不同的闪烁速度

项目分享连接(方法一):

Wokwi Arduino and ESP32 Simulatorhttps://wokwi.com/projects/341563215336964690项目分享连接(方法二):

Wokwi Arduino and ESP32 Simulatorhttps://wokwi.com/projects/341563215336964690

二、硬件连接方法

方法一:

LED连接GPIO的端口0,按键连接GPIO的端口1。按键通过一个上拉电阻接到3.3V电源上,当按键不按下时是高信号,按键按下时GPIO端口1导通,变为低信号。

方法二:

去电上拉电阻,使用GPIO的PULL_UP功能。

三、代码分析

方法一:

mian.py

# 这个例子是实现按键操作
from machine import Pin
import utime

LED = Pin(0, Pin.OUT)  # 紫色LED,端口0
KEY = Pin(1, Pin.IN)  # 按键,端口1,配置成IN模式

while True:
    if KEY.value()== 0:  # 按键按下
        #LED每秒闪烁一次
        LED.value(1)  # LED亮
        utime.sleep(1)
        LED.value(0) # LED灭
        utime.sleep(1)
    else:
      #LED每0.2秒闪烁一次
        LED.value(1)  # LED亮
        utime.sleep(0.2)
        LED.value(0) # LED灭
        utime.sleep(0.2)

# 按键使用小技巧:按住Ctrl键然后按下按键后不会弹起。

diagram.json

{
  "version": 1,
  "author": "Anonymous maker",
  "editor": "wokwi",
  "parts": [
    {
      "type": "wokwi-pi-pico",
      "id": "pico",
      "top": -84.04,
      "left": -21.65,
      "attrs": { "env": "micropython-20220117-v1.18" }
    },
    {
      "type": "wokwi-resistor",
      "id": "r1",
      "top": -150.16,
      "left": 11.36,
      "rotate": 180,
      "attrs": { "value": "470" }
    },
    {
      "type": "wokwi-led",
      "id": "led2",
      "top": -160.43,
      "left": -47.75,
      "attrs": { "color": "blue" }
    },
    {
      "type": "wokwi-resistor",
      "id": "r2",
      "top": -139.09,
      "left": 120.03,
      "rotate": 90,
      "attrs": { "value": "470" }
    },
    {
      "type": "wokwi-pushbutton",
      "id": "btn1",
      "top": -63.85,
      "left": -188.55,
      "attrs": { "color": "green", "key": "1" }
    }
  ],
  "connections": [
    [ "led2:A", "pico:GP0", "green", [ "v0" ] ],
    [ "led2:C", "r1:2", "green", [ "v12.49", "h-27.74", "v-75.2", "h106.23" ] ],
    [ "r1:1", "pico:GND.8", "green", [ "v0" ] ],
    [ "btn1:1.r", "pico:GP1", "green", [ "v0" ] ],
    [ "btn1:1.r", "r2:1", "green", [ "v-138.22", "h33.03" ] ],
    [ "r2:2", "pico:3V3", "green", [ "h1.94", "v65.96" ] ],
    [ "btn1:2.r", "pico:GND.4", "green", [ "h0.8", "v99.76" ] ]
  ]
}

方法二:

mian.py

# 这个例子是实现按键操作
from machine import Pin
import utime

LED = Pin(0, Pin.OUT)  # 紫色LED,端口0
KEY = Pin(1, Pin.IN, Pin.PULL_UP)  # 按键,端口1,配置成IN和PULL_UP

while True:
    if KEY.value()== 0:  # 按键按下
        #LED每秒闪烁一次
        LED.value(1)  # LED亮
        utime.sleep(1)
        LED.value(0) # LED灭
        utime.sleep(1)
    else:
      #LED每0.2秒闪烁一次
        LED.value(1)  # LED亮
        utime.sleep(0.2)
        LED.value(0) # LED灭
        utime.sleep(0.2)

# 按键使用小技巧:按住Ctrl键然后按下按键后不会弹起。

diagram.json

{
  "version": 1,
  "author": "Anonymous maker",
  "editor": "wokwi",
  "parts": [
    {
      "type": "wokwi-pi-pico",
      "id": "pico",
      "top": -84.04,
      "left": -21.65,
      "attrs": { "env": "micropython-20220117-v1.18" }
    },
    {
      "type": "wokwi-resistor",
      "id": "r1",
      "top": -150.16,
      "left": 11.36,
      "rotate": 180,
      "attrs": { "value": "470" }
    },
    {
      "type": "wokwi-led",
      "id": "led2",
      "top": -160.43,
      "left": -47.75,
      "attrs": { "color": "blue" }
    },
    {
      "type": "wokwi-pushbutton",
      "id": "btn1",
      "top": -63.85,
      "left": -188.55,
      "attrs": { "color": "green", "key": "1","label": "Btn1", "bounce": "0"  }
    }
  ],
  "connections": [
    [ "led2:A", "pico:GP0", "green", [ "v0" ] ],
    [ "led2:C", "r1:2", "green", [ "v12.49", "h-27.74", "v-75.2", "h106.23" ] ],
    [ "r1:1", "pico:GND.8", "green", [ "v0" ] ],
    [ "btn1:1.r", "pico:GP1", "green", [ "v0" ] ],
    [ "btn1:2.r", "pico:GND.4", "green", [ "h0.8", "v99.76" ] ]
  ]
}

关于按键的更多知识请查看:

wokwi-pushbutton Reference | Wokwi Docs12mm Tactile Switch Button (momentary push button).https://docs.wokwi.com/parts/wokwi-pushbutton

好了关于树莓派Pico的延时到此结束了,后面我们换个开发板,跟大家继续讲述新的知识,谢谢!

相关文章:

  • 酷家乐基于 Crane EHPA 的弹性落地实践
  • PEG小分子重氮生物素-PEG3-炔烃 有哪些需要了解的知识?
  • 智能自修复防腐涂层研究进展综述
  • 银行互联网类业务基于分布式存储的架构设计与实施运维分享
  • 油气管道系统安全状态监测技术研究进展
  • Room (三) RecyclerView 呈现列表数据
  • 【我的Android进阶之旅】如何在Android中使用ARCore来增强人脸Augmented Faces?
  • 基于云原生存储的容器持久化存储方案
  • 毫米波点云雷达 论文阅读 | 3DRIMR, IPCCC 2021
  • 如何修改网页视频播放倍速?(最高16倍速)
  • Gitlab服务器切换来版本升级,执行漏洞修复
  • Java日志系列——logback,log4j2使用
  • WebRTC Simulcast测试--用Janus
  • 2022年全球及中国有机粘土行业头部企业市场占有率及排名调研报告
  • 21年毕业,转行软件测试,薪资10K+,好运气都藏在你的实力里
  • hexo+github搭建个人博客
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • Android Studio:GIT提交项目到远程仓库
  • CODING 缺陷管理功能正式开始公测
  • EOS是什么
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • tensorflow学习笔记3——MNIST应用篇
  • webpack+react项目初体验——记录我的webpack环境配置
  • webpack4 一点通
  • 大数据与云计算学习:数据分析(二)
  • 如何在GitHub上创建个人博客
  • 使用Gradle第一次构建Java程序
  • ​​​​​​​​​​​​​​Γ函数
  • ​一些不规范的GTID使用场景
  • #微信小程序(布局、渲染层基础知识)
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (13):Silverlight 2 数据与通信之WebRequest
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (done) 两个矩阵 “相似” 是什么意思?
  • (多级缓存)缓存同步
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (七)c52学习之旅-中断
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • **PHP分步表单提交思路(分页表单提交)
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .NET Core 版本不支持的问题
  • .NET 使用配置文件
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • /bin/rm: 参数列表过长"的解决办法
  • [20150629]简单的加密连接.txt
  • [AIGC] 使用Curl进行网络请求的常见用法
  • [BZOJ 4129]Haruna’s Breakfast(树上带修改莫队)
  • [C]整形提升(转载)
  • [C++] 多线程编程-thread::yield()-sleep_for()
  • [codevs1288] 埃及分数
  • [emuch.net]MatrixComputations(7-12)