Ubuntu版Raspberry PiでGPIOを使うためのライブラリ
🧭 はじめに
本記事では、Raspberry Piに「Raspberry Pi OS」ではなく「Ubuntu(Server/Desktop)」を入れた場合に、GPIOまわりの代表的なライブラリ(RPi.GPIO / GPIO Zero / pigpio / libgpiod / lgpio / WiringPi 等)が使えるか、どう組み合わせると快適か、そして導入時の注意点をまとめます。
「なぜこのライブラリが生まれたか」という背景や、「このライブラリを使うと何が嬉しいか」も併せて整理します。
【情報】本記事の要点は「Ubuntuでも主要ライブラリは概ね使えるが、“デフォルト前提(Raspberry Pi OS想定)”が一部崩れる」こと。特に「権限(udevルール・グループ)」と「ピン・ファクトリ(GPIO Zeroの裏側)」に注意すれば快適に運用できます。Ubuntu公式のGPIOチュートリアルも公開されています。
🧱 ライブラリ別の対応状況(クイックマトリクス)
- RPi.GPIO:Ubuntuでも使える(パッケージあり)。ただし権限設定に注意。
- GPIO Zero:Ubuntuでも使える。裏で使う「ピン・ファクトリ」を pigpio / lgpio / RPi.GPIO から選ぶ(環境変数で明示可)。
- pigpio:Ubuntuで利用可(パッケージあり)。デーモン pigpiod の起動・自動起動設定を入れる。
- libgpiod(gpiod/Python3):Ubuntuの標準パッケージあり。新しいGPIOキャラクタデバイスAPIの本命。権限周りに配慮。
- lgpio:GPIO Zeroの既定候補の一つ。Ubuntuでも利用事例あり(パッケージ/環境により導入方法が異なる)。
- WiringPi:非推奨・開発終了。原則採用しない。
🧪 RPi.GPIO(低レベル直叩きの定番)
何者?なぜ生まれた?
初期のRaspberry Piで「Pythonから手軽にGPIOを操作」するためのデファクト。/dev/memやgpiomemを介してレジスタ操作を隠蔽し、教育・試作に適した簡潔APIを提供します。
Ubuntuでの可否と導入のコツ
- 可。Ubuntu 20.04/22.04 以降で
python3-rpi.gpio
パッケージが利用可能。 - 非rootで使うには、udevルールとグループ設定(Ubuntuでは
dialout
追加が推奨の経路として共有されています)。rpi.gpio-common
がルールを提供。 - うまく権限が通らない場合は、古典的な「/dev/mem へのアクセスが必要」エラーに遭遇しやすい。権限周りの対処がキモ。
嬉しさ
- 学習コストが低く、サンプルが豊富。既存資産を活かしやすい。
- 単純なデジタルI/Oやボタン・LEDなら十分。
【警告】ハードウェアPWMやI2C/SPIなどのバス制御を直接は担いません(別ライブラリの利用が一般的)。
🧩 GPIO Zero(高レベルAPIで“部品をそのまま”扱う)
何者?なぜ生まれた?
「LED」「ボタン」「距離センサ」など“デバイス目線”のAPIで、教育・プロトタイピングを高速化するために登場。裏側で複数の“ピン・ファクトリ”を差し替え可能にし、環境依存を吸収します。
Ubuntuでの可否とピン・ファクトリ
- 可。Ubuntuでも動きます。
- 既定では「lgpio → RPi.GPIO → pigpio → native」の順に利用を試み、環境変数
GPIOZERO_PIN_FACTORY
で明示指定可能(例:pigpio
)。 - UbuntuでRPi.GPIOを直接使うか、もしくは pigpio / lgpio を導入してGPIO Zeroから呼ぶのが定石。環境変数の設定やpigpioデーモン起動を忘れずに。
嬉しさ
- 「ボタンが押されたらLEDを点ける」等を、数行で直感的に書ける。
- ピン・ファクトリ差し替えで環境の違いを吸収しやすい(RasPi OS⇔Ubuntu間の移植が楽)。
🐷 pigpio(デーモン+遠隔もできる高機能IO)
何者?なぜ生まれた?
正確なタイミング制御、ソフトウェアPWM、多プロセス/リモートからの制御など、RPi.GPIOで難しい領域をカバーするために誕生。pigpiod
デーモンにネットワーク越しも含めてクライアント接続できます。
Ubuntuでの可否と導入ポイント
- 可。
pigpio
/python3-pigpio
のパッケージ導入後、pigpiod
を起動・自動起動設定すると快適。Ubuntuではサービスユニットの整備状況が環境で異なるため、systemctl enable/start pigpiod
の確認を。
嬉しさ
- 高精度な波形生成やPWM、遠隔制御が簡単。複雑な工作・ロボティクスに強い。
- GPIO Zeroのピン・ファクトリとしても利用可(
GPIOZERO_PIN_FACTORY=pigpio
)。
🧰 libgpiod / gpiod(“いまどき”の標準API)
何者?なぜ生まれた?
Linux 4.8以降で“古いsysfs GPIO”が非推奨となり、/dev/gpiochip* を扱う“キャラクタデバイスAPI”が主流化。libgpiodはその公式Cライブラリで、Pythonバインディング(python3-libgpiod / gpiod)も提供されます。
Ubuntuでの可否と導入ポイント
- 可。
python3-libgpiod
ほか関連パッケージが公式に提供。ツールgpiod
も同梱。 - 一部環境ではroot権限やudevルール調整が必要。特に仮想環境(venv)やパーミッション設定で「gpiochipを開けない」系のエラーに注意。
嬉しさ
- カーネルが推す“新正統”のAPIで将来性が高い。
- I²C/SPI/PWMも含め、Ubuntu公式チュートリアルがlgpio(後述)と共に整備されている。
🧱 lgpio(GPIO Zeroの“第一候補”にもなる新顔)
何者?なぜ生まれた?
pigpio作者による、GPIOキャラクタデバイス向けの軽量ラッパー。GPIO Zeroが最初に試す“ピン・ファクトリ”としても採用され、Ubuntuでも利用事例が増えています。
Ubuntuでの可否
- 可。ディストリやバージョンでパッケージ名が異なることがあり、
python3-lgpio
の導入可否は環境次第(Stack OverflowでUbuntu 20.04の導入質問あり)。
嬉しさ
- GPIO Zeroと相性が良く、シンプル構成。
- libgpiodに比べて“GPIOだけを軽く使いたい”ケースで扱いやすい。
【情報】lgpio
利用時も /dev/gpiochip* の権限がカギ。失敗時はまずパーミッションを疑う。
🧓 WiringPi(歴史的経緯と現状)
何者?なぜ生まれた?
「Arduino風のAPIでCからRaspberry Piを操作」するための老舗ライブラリ。入門者がCで扱う際の敷居を下げました。
現状
- 公式に非推奨・EOL。新規採用は避け、既存資産は pigpio / libgpiod / GPIO Zero などへの移行を。
🧯 Ubuntu特有の“つまずきポイント”と対策
権限(udevルール・グループ)
- RPi.GPIO:
rpi.gpio-common
がudevルールを提供。Ubuntuではdialout
へのユーザー追加で非root実行が通る構成が共有されています。 - libgpiod / lgpio:/dev/gpiochip* のアクセス権で躓きがち。root実行で動くならパーミッション/グループ設定を見直す。
- 一部の古い情報では
gpio
グループを作る記述も見かけますが、Ubuntuではdialout
を使う手順が一般的に紹介されています。
ピン・ファクトリ(GPIO Zero)
- うまく動かない時は
GPIOZERO_PIN_FACTORY
をpigpio
やlgpio
に明示する。
pigpioデーモン(pigpiod)
- サービスが存在しない/起動しない場合があるため、手動で
systemctl enable/start pigpiod
を設定・確認。
🧠 ユースケース別・おすすめ構成
「まずはLED/ボタンから」学習・簡単試作
- GPIO Zero +(lgpio もしくは RPi.GPIO)
嬉しさ:デバイス志向APIで実装が最短。移植性も良い。
「きっちりPWM・波形」「複数プロセス/リモート制御」
- pigpio(必要に応じてGPIO Zeroのpin factoryをpigpioに)
嬉しさ:精密なタイミング制御とネットワーク越し制御が簡単。
「将来性重視」「カーネル標準APIで行く」
- libgpiod(Pythonなら python3-libgpiod / gpiod)
嬉しさ:/dev/gpiochip* の“いまどき”API。長期的な保守性が高い。
🧷 導入時の“最短メモ”(Ubuntu想定)
- RPi.GPIO:
apt install python3-rpi.gpio rpi.gpio-common
→sudo adduser $USER dialout
→ 再起動。 - GPIO Zero:
apt install python3-gpiozero
(環境により)+pigpio
またはpython3-libgpiod
/python3-lgpio
を状況で追加。必要ならGPIOZERO_PIN_FACTORY
を設定。 - pigpio:
apt install pigpio python3-pigpio
→systemctl enable --now pigpiod
。 - libgpiod:
apt install python3-libgpiod gpiod
。権限で躓いたらrootで動くか→udev/グループを確認。
【成功】Ubuntu公式のGPIOチュートリアルは、lgpioベースで「GPIO/I2C/PWM/SPI」まで一通りまとまっています。最短の動作確認に便利。
🧭 まとめ(選び方の指針)
- 互換・学習コスト最優先:RPi.GPIO(またはGPIO Zero+RPi.GPIO)。
- 高機能・遠隔・タイミング厳密:pigpio(単独 or GPIO Zeroのpin factoryに)。
- いまどき・将来性重視:libgpiod(必要に応じlgpioやGPIO Zero併用)。
- WiringPiは非推奨、移行検討を。
【警告】権限(udev/グループ)とサービス起動(pigpiod)は、Raspberry Pi OSのノウハウをそのまま持ち込むとハマりやすいUbuntu特有の落とし穴です。最初にここを固めると、その後の開発がスムーズになります。
📎 参考リンク(一次情報・公式中心)
- Ubuntu公式「How to use Raspberry Pi GPIO pins with Ubuntu」:lgpioでGPIO/I2C/PWM/SPIの例。
- GPIO Zeroドキュメント:ピン・ファクトリと環境変数。
- libgpiod(Launchpadパッケージ一覧)・Pythonバインディング。
- RPi.GPIO(Ubuntuでの導入報告)。
- pigpio(サービス起動・運用の実例)。
- WiringPiの非推奨。