2017-01-16 77 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'" 
    

編碼愉快。