2017-01-16 9 views
1

Я использую Raspberry Pi 3 модели Б.Не удалось добавить обнаружение края - Raspberry Pi 3 GPIO

Я пробовал различные подходы, используя как 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 

ответ

1

Я также получаю такую ​​же проблему на малинового PI3 B с Arch_arm операционной системы. Кажется, что эта проблема не имеет ничего общего с вашим кодом на Python.


В системе Raspberrypi/linux по умолчанию вы можете использовать только GPIO с полномочиями root.

/dev/gpiomem вместо /dev/mem, может позволить пользователю использовать GPIO без rootless. Конечно, вы должны внести некоторые изменения.

  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 
    

    Вы можете добавить эти правила ниже в хвост файла raspberrypi.rules с sudo.

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

Днем кодирования.