2017-01-16 123 views
1

我使用的覆盆子裨3模型B.无法添加边缘检测 - 覆盆子裨3 GPIO

我试图同时使用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 

回答

1

我也得到树莓PI3乙同样的问题与Arch_arm操作系统的完整回溯。 看来这个问题与你的python代码无关。


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

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

  1. 添加新的组名gpio & &

    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'" 
    

编码愉快。