我使用的是Raspberry Pi 3型号B.
我尝试了使用gpiozero
和RPi.GPIO
的不同方法。无论使用哪个库,都会出现问题。
以下是使用gpiozero
失败的代码示例。
from gpiozero import Button
from signal import pause
def handle():
print("Pressed!")
button = None
while not button:
try:
button = Button(4, pull_up=True)
button.when_pressed = handle
except RuntimeError as e:
print(e)
pass
pause()
行button = Button(4, pull_up=True)
总是引发RuntimeError
,程序的输出(运行python3
)是:
Failed to add edge detection
Failed to add edge detection
Failed to add edge detection
Failed to add edge detection
# ... it goes on for ages
我已尝试重新安装RPi.GPIO
和gpiozero
,但它没有帮助。
以下是异常的完整回溯
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/gpiozero/input_devices.py", line 84, in __init__
self.pin.when_changed = self._fire_events
File "/usr/lib/python3/dist-packages/gpiozero/pins/__init__.py", line 240, in <lambda>
lambda self, value: self._set_when_changed(value),
File "/usr/lib/python3/dist-packages/gpiozero/pins/rpigpio.py", line 233, in _set_when_changed
bouncetime=self._bounce)
RuntimeError: Failed to add edge detection
答案 0 :(得分:1)
我在 raspberry pi3 B 上也遇到了与 Arch_arm 操作系统相同的问题。 看来这个问题与你的python代码无关。
在Raspberrypi / linux系统中,默认情况下,您只能使用具有root权限的GPIO。
/dev/gpiomem
代替/dev/mem
,可以让用户无根使用GPIO。当然你应该做一些改变。
添加新的群组名称gpio
&amp;&amp;将您的用户帐户名称添加到论坛
sudo group -r gpio
sudo usermod -a -G gpio pi
将udev规则添加到/etc/udev/rules.d/
ls -l /etc/udev/rules.d
-rw-r--r-- 1 root root 580 Aug 5 15:02 raspberrypi.rules
您可以使用sudo将以下规则添加到文件raspberrypi.rules
的尾部。
SUBSYSTEM=="bcm2835-gpiomem", KERNEL=="gpiomem", GROUP="gpio", MODE="0660"
SUBSYSTEM=="gpio", KERNEL=="gpiochip*", ACTION=="add", PROGRAM="/bin/sh -c 'chown root:gpio /sys/class/gpio/export /sys/class/gpio/unexport ; chmod 220 /sys/class/gpio/export /sys/class/gpio/unexport'"
SUBSYSTEM=="gpio", KERNEL=="gpio*", ACTION=="add", PROGRAM="/bin/sh -c 'chown root:gpio /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value ; chmod 660 /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value'"
快乐的编码。
答案 1 :(得分:0)
使用sudo
运行它应该可以工作
例如
sudo python test-gpio.py