树莓派GPIO引脚无法自动关闭问题求助
核心原因与解决办法
- 引脚编号模式不匹配
代码中使用GPIO.BCM模式(按Broadcom SOC引脚编号),但变量in1 = 29对应的是物理引脚37,而实际接线的物理引脚40对应的BCM编号是21。这导致代码完全没有控制到继电器连接的引脚!
继电器IN端连接的物理引脚40(BCM21)在程序运行时处于默认高电平状态,所以继电器一直吸合;只有程序退出执行GPIO.cleanup()时,所有GPIO引脚被重置为输入模式,继电器失去触发信号才会关闭。
- 修复后的代码
修改引脚编号为正确的BCM值,同时优化资源清理逻辑:
import RPi.GPIO as GPIO import time in1 = 21 # 物理引脚40对应的BCM编号 GPIO.setmode(GPIO.BCM) GPIO.setup(in1, GPIO.OUT) try: GPIO.output(in1, GPIO.HIGH) time.sleep(1) GPIO.output(in1, GPIO.LOW) print("inside try after low") time.sleep(1) finally: # 确保程序无论正常结束还是异常终止,都清理GPIO资源 GPIO.cleanup()
- 额外排查点
如果修复后仍有问题,检查继电器触发类型:部分继电器为低电平触发(输入LOW时吸合),此时需调换GPIO.HIGH和GPIO.LOW的逻辑。但根据当前现象,引脚编号错误是最核心的问题。
内容的提问来源于stack exchange,提问作者LearneriOS
相关产品推荐
相关产品推荐

