メインコンテンツへスキップ

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でのインストール

  1. パッケージ導入
    sudo apt update
    sudo apt install python3-rpi.gpio rpi.gpio-common
    
  2. 動作確認
    python3 -c "import RPi.GPIO as GPIO; print(GPIO.VERSION)"
    
    → バージョンが表示されればOK

🔑 権限設定(非rootで使うために)

UbuntuではGPIOデバイス /dev/gpiomem にアクセスする権限が必要です。
標準の rpi.gpio-common パッケージが udevルール を用意していて、dialout グループに入ると使えるようになります。

  1. ユーザーを追加
    sudo adduser $USER dialout
    
  2. 再ログイン(または再起動)

確認:

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 サービスを作成します。

  1. Pythonスクリプトを配置

    /home/ubuntu/blink.py
    

    (上のサンプルコードを保存)

  2. 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
    
  3. 有効化と起動

    sudo systemctl daemon-reload
    sudo systemctl enable blink.service
    sudo systemctl start blink.service
    
  4. ステータス確認

    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への移行も視野に入れると安心