Raspberry Pi の新規ユーザーが GPIO にアクセスできない

Raspberry Pi の新規ユーザーが WiringPi 経由で GPIO にアクセスしようとすると、プログラムが次のようなエラーで停止することがあります。

wiringPiSetup: Unable to open /dev/mem or /dev/gpiomem: Permission denied.
Aborting your program because if it can not access the GPIO
hardware then it most certainly won't work
Try running with sudo?

通常の修正方法は、そのユーザーを gpio グループに追加することです。

sudo usermod -a -G gpio user_name

user_name は実際のログイン名に置き換えてください。グループメンバーシップを変更した後は、新しいグループが適用されるように、ログアウトして再ログインするか、再起動します。有効になっているグループは次のコマンドで確認できます。

groups

それでも /dev/gpiomem の権限が正しくない場合は、所有者、グループ、グループの書き込み権限をリセットします。

sudo chown root:gpio /dev/gpiomem
sudo chmod g+rw /dev/gpiomem

それでも問題が解決せず、Python の仮想環境内でスクリプトを実行している場合は、仮想環境を無効化して、通常のシェルからもう一度テストしてください。原因は GPIO 権限そのものではなく、スクリプトの起動方法にある可能性があります。

最後の手段として、一部のプログラムは /dev/gpiomem ではなく /dev/mem に直接アクセスしようとします。その場合は、同じグループ所有権と権限の設定パターンを /dev/mem に適用できます。

sudo chown root:gpio /dev/mem
sudo chmod g+rw /dev/mem

/dev/mem の扱いには注意してください。これは /dev/gpiomem よりもはるかに広範なシステムメモリへのアクセスを許可します。ライブラリが対応している場合は、/dev/gpiomem を優先してください。

次の 2 つのコマンドは、ユーザーをグループに追加する同等の方法です。

sudo usermod -a -G target_group user_name
sudo adduser user_name target_group

たとえば、次のコマンドはいずれも user_namegpio グループに追加します。

sudo usermod -a -G gpio user_name
sudo adduser user_name gpio

Leave a Reply