求助:树莓派调用GPIO.add_event_detect时报RuntimeError错误
GPIO边缘检测失败问题
背景
这段距离轮旋转检测的代码之前在另一台Raspberry Pi Zero 2上能正常运行,现在换到当前设备就报错了,不想重新刷系统,想解决问题避免再踩坑。
出错代码
import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) # 距离轮检测引脚 GPIO.setup(4, GPIO.IN) def increaserev(channel): global counter counter += 1 GPIO.add_event_detect(4,GPIO.RISING, callback=increaserev)
单独运行这段代码仍会触发相同错误。
错误信息
Traceback (most recent call last): File "/home/pi/test.py", line 12, in <module> GPIO.add_event_detect(4,GPIO.RISING, callback=increaserev) RuntimeError: Failed to add edge detection
已尝试的操作
- 更新系统
- 升级系统
- 更换其他GPIO引脚
- 禁用1-wire系统
可尝试的解决办法
- 检查权限:试试用
sudo运行脚本,或者把当前用户加入gpio组(执行sudo usermod -aG gpio pi,重启后生效),确保拥有操作GPIO的权限。 - 排查硬件接线:确认距离轮传感器的接线无松动、短路情况,输入引脚能接收到有效信号。
- 查看引脚占用状态:安装
raspi-gpio工具(sudo apt install raspi-gpio),然后执行raspi-gpio get 4查看引脚4的状态,确认未被其他服务或设备占用。 - 更换GPIO库:如果RPi.GPIO持续出问题,换成pigpio库试试,稳定性更好。先安装库:
sudo apt install pigpio,启动服务:sudo systemctl start pigpiod,示例代码如下:
import pigpio pi = pigpio.pi() def increaserev(gpio, level, tick): global counter counter += 1 pi.set_mode(4, pigpio.INPUT) pi.callback(4, pigpio.RISING_EDGE, increaserev)
- 检查系统GPIO配置:通过
raspi-config进入配置界面,确认GPIO接口已启用,无其他外设(如I2C、SPI)占用冲突引脚。
内容的提问来源于stack exchange,提问作者Padduzaj
相关产品推荐
相关产品推荐

