UbuntuでRPi.GPIOを使うための権限設定と自動化までの手順
🧭 はじめに
Raspberry Piで「LEDをチカチカ」させるとき、Raspberry Pi OS では標準的に使える RPi.GPIO を Ubuntu でも使いたい!というシーンがあります。
ただし Ubuntu ではデフォルトで root 権限が必要になったり、パーミッションでつまずいたりしがちです。
本記事では UbuntuでRPi.GPIOを使って非rootでLED制御できるようにする方法 を、権限設定から「自動化(デーモン化)」まで一通りまとめます。
🔌 RPi.GPIOとは?
- Raspberry Pi財団が提供する「PythonからGPIOを直接操作するための標準ライブラリ」
- ピン番号指定(BOARD/BCM)や簡単な入出力制御を備えており、LED点滅・ボタン入力といった基本用途には十分
- 背景:当初は教育用に「最短でLEDを点けられる」ことを目的に開発された
【嬉しさ】教育用サンプルや記事が圧倒的に豊富で、「とりあえず動かす」に最短。
🛠️ Ubuntuでのインストール
- パッケージ導入
sudo apt update sudo apt install python3-rpi.gpio rpi.gpio-common
- 動作確認
→ バージョンが表示されればOKpython3 -c "import RPi.GPIO as GPIO; print(GPIO.VERSION)"
🔑 権限設定(非rootで使うために)
UbuntuではGPIOデバイス /dev/gpiomem
にアクセスする権限が必要です。
標準の rpi.gpio-common
パッケージが udevルール を用意していて、dialout
グループに入ると使えるようになります。
- ユーザーを追加
sudo adduser $USER dialout
- 再ログイン(または再起動)
確認:
ls -l /dev/gpiomem
# crw-rw---- 1 root dialout ...
dialout
グループにrwが付いていれば成功。
【情報】古い記事では「gpioグループを作れ」と書いてある場合もありますが、Ubuntuでは dialout
が推奨。
💡 サンプル:LEDをチカチカ
回路:GPIO17(物理ピン11)に抵抗を介してLEDを接続。
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM) # ピン番号をBCMで指定
GPIO.setup(17, GPIO.OUT)
try:
while True:
GPIO.output(17, GPIO.HIGH)
time.sleep(0.5)
GPIO.output(17, GPIO.LOW)
time.sleep(0.5)
except KeyboardInterrupt:
pass
finally:
GPIO.cleanup()
⚙️ 自動実行(デーモン化)
「電源入れたら自動でLEDチカチカ」したい場合は systemd サービスを作成します。
-
Pythonスクリプトを配置
/home/ubuntu/blink.py
(上のサンプルコードを保存)
-
systemd ユニット作成
/etc/systemd/system/blink.service
[Unit] Description=LED blink with RPi.GPIO After=multi-user.target [Service] Type=simple User=ubuntu ExecStart=/usr/bin/python3 /home/ubuntu/blink.py Restart=always [Install] WantedBy=multi-user.target
-
有効化と起動
sudo systemctl daemon-reload sudo systemctl enable blink.service sudo systemctl start blink.service
-
ステータス確認
systemctl status blink.service
🚨 注意点
- RPi.GPIOは PWMやバス制御(I2C/SPI)には非対応。より高度な制御は pigpio や libgpiod を検討。
- Ubuntu DesktopでGUIセッションと同時に動かすと、環境によって権限問題が再発することがある。基本は headless(Server版)で安定。
- 将来のLinuxカーネルでは
/sys/class/gpio
は非推奨で、libgpiodが主流になる見込み。RPi.GPIOは“クラシック”として割り切って使うのがよい。
✅ まとめ
- UbuntuでもRPi.GPIOは問題なく使える
- 非rootで扱うには
dialout
グループに所属するのが鍵 - systemdを使えば「LEDチカチカ」をデーモン化して自動起動可能
- 将来的にはlibgpiodへの移行も視野に入れると安心