LoginSignup
2
0

ラズパイ+ubuntuでsudoなしでRPi.GPIOを使う方法

Last updated at Posted at 2023-12-19

はじめに

お疲れ様です。秋並です。

ラズパイ+ubuntuでRPi.GPIOを使用してpythonコードを実行しようとすると、RuntimeError: No access to /dev/mem. Try running as root! と表示されるため、

sudo python3 ****.py

sudo をつけないと実行できません。

わざわざ sudo を付けなくてはいけないのは面倒なので、sudoなしでRPi.GPIOを使用する方法を紹介します。

以下の環境で動作確認しました。

  • デバイス:Raspberry Pi4 ModelB 4GB
  • OS : ubuntu Desktop 22.04.3 LTS (64bit)

RPi.GPIOパッケージのインストール

最初に、RPi.GPIOパッケージをインストールしていない方は以下コマンドでインストールしてください。

sudo apt update -y && sudo apt install -y \
python3-rpi.gpio

グループの追加

次に、gpioグループに[username]([username]はご自身のユーザー名に置き換えてください)を追加します。

なお、私の環境ではgpioグループ自体が存在しなかったのでgpioグループを作成したのちに、ユーザーを追加しています。

sudo groupadd gpio
sudo usermod -a -G gpio [username] 

ファイルの所有者の変更

ubuntuでRPi.GPIOを使用すると、dev/mem というところにアクセスしようとする1のですが、dev/memは管理者権限がないとアクセスできない(=sudoを付けないといけいない)ようになっています。

そこで、管理者権限がなくてもアクセスできるdev/gpiomemに所有者を変更します。

sudo chown root.gpio /dev/gpiomem

/dev/gpiomemの権限を変更

デフォルトの/dev/gpiomemの権限では、sudoなしで実行できないので権限を変更します。

sudo chmod a+rw /dev/gpiomem

udevルールの追加

上記の方法で、sudoなしでRPi.GPIOを使用することが出来るのですが、この場合、毎回「ファイルの所有者の変更」「/dev/gpiomemの権限を変更」のコマンドを入力する必要がでてくるため、少し面倒です。

そこで、udevルールファイルと呼ばれるファイルに上記2種類のコマンドに相当するルールを記述することで、毎回コマンドを打たなくてもよいようにします。

ルールファイルを作成します。

sudo nano /etc/udev/rules.d/99-gpiomem.rules

以下の内容をファイルに記述し、保存します。

KERNEL=="gpiomem", ACTION=="add", PROGRAM="/bin/sh -c 'chown root:gpio /dev/gpiomem'"
KERNEL=="gpiomem", GROUP="gpio", MODE="0666"

ルールを反映させます。

sudo udevadm control --reload-rules
sudo udevadm trigger

ルールを反映させたら、ラズパイを再起動します。

これで、sudoなしでもRPi.GPIOを使用したpythonファイルが実行できるようになっているはずです。

最後に

今回は、ubuntu+ラズパイでsudoなしでGPIOを使う方法を紹介しました。

私は、ROSを使うのでラズパイでubuntuが使用できるのは非常に便利なのですが、RaspberryPi OSと比較すると追加で必要な設定が結構多く、設定周りで詰まることが多いです。

個人的には、環境構築で時間が取られるのはもったいないと思っているので、この記事が少しでも皆さんの参考になれば幸いです。

  1. RaspberryPi OSは何もしなくてもdev/gpiomemにアクセスされるっぽいのですが、ubuntuはデフォルトではdev/memにアクセスされてしまいます。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0