无法添加边缘检测 - Raspberry Pi 3 GPIO

时间:2017-01-16 15:17:57

标签: python raspberry-pi gpio

我使用的是Raspberry Pi 3型号B.

我尝试了使用gpiozeroRPi.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.GPIOgpiozero,但它没有帮助。

以下是异常的完整回溯

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

2 个答案:

答案 0 :(得分:1)

我在 raspberry pi3 B 上也遇到了与 Arch_arm 操作系统相同的问题。 看来这个问题与你的python代码无关。

在Raspberrypi / linux系统中,默认情况下,您只能使用具有root权限的GPIO。

/dev/gpiomem代替/dev/mem,可以让用户无根使用GPIO。当然你应该做一些改变。

  1. 添加新的群组名称gpio&amp;&amp;将您的用户帐户名称添加到论坛

    sudo group -r gpio
    sudo usermod -a -G gpio pi
    
  2. 将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'"
    
  3. 快乐的编码。

答案 1 :(得分:0)

使用sudo运行它应该可以工作

例如

sudo python test-gpio.py