如何基于Python3和GPIO为树莓派3B+实现单次触发Toggle切换开关
树莓派GPIO实现按压Toggle开关方案
Toggle开关的核心逻辑是每次按压触发时,翻转当前LED的工作状态(开变关、关变开),基于你使用的gpiozero库,Button组件默认已经做了硬件消抖处理,不需要额外开发消抖逻辑,修改后的代码如下:
修改后完整代码
from gpiozero import LED, Button, Buzzer from time import sleep led = LED(19) # 如需调整按钮灵敏度防误触,可加bounce_time参数,示例:Button(20, bounce_time=0.05),单位为秒 SW1 = Button(20) buzzer = Buzzer(26) # 记录LED当前状态,默认关闭 led_state = False def SW1Pressed(): global led_state # 翻转状态 led_state = not led_state if led_state: led.on() # 按压时蜂鸣器短响作为操作反馈,不需要可以删掉 buzzer.beep(0.1) else: led.off() buzzer.beep(0.1) SW1.when_pressed = SW1Pressed print("Press SW to toggle LED.") while True: # 主循环留空即可,也可以添加其他需要持续运行的业务逻辑 sleep(0.1)
关键修改说明
- 新增了
led_state全局变量,用来记录LED当前的开关状态,初始默认是关闭状态 - 重写了
SW1Pressed回调函数:每次按钮按下时直接翻转状态变量,同步控制LED的亮灭,移除了原来的SW1Press按压标记,无需在主循环中单独判断按压状态 - 可选添加了蜂鸣器反馈逻辑,每次按压都会短响0.1秒,方便直观确认按压生效
- 主循环保留了0.1秒的休眠逻辑,避免程序空转占用过高CPU资源
内容的提问来源于stack exchange,提问作者sya
相关产品推荐
相关产品推荐

