お疲れ様です。秋並です。
ubuntuで RPi.GPIO
の add_event_detect
関数をsudoなしで使うとエラーが出て実行できませんでした。
そこで、色々調べてみた結果、解決方法が見つかったので書き残しておきます。
実行環境
- Raspberry Pi 4B
- Ubuntu22.04
グループの追加
gpioグループに[username]([username]はご自身のユーザー名に置き換えてください)を追加します。
sudo groupadd -r gpio
sudo usermod -a -G gpio [username]
udevルールの追加
udevルールファイルを作成します。
sudo nano /etc/udev/rules.d/99-gpiomem.rules
以下の内容を記述します。
SUBSYSTEM=="bcm2835-gpiomem", KERNEL=="gpiomem", GROUP="gpio", MODE="0666"
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 666 /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value'"
内容を保存したら、ルールを適用します。
sudo udevadm control --reload-rules
sudo udevadm trigger
再起動すると、sudoなしでadd_event_detect関数を使えるようになります。