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_name を gpio グループに追加します。
sudo usermod -a -G gpio user_name
sudo adduser user_name gpio
