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

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_FACTORYpigpiolgpio に明示する。

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-commonsudo adduser $USER dialout → 再起動。
  • GPIO Zero:apt install python3-gpiozero(環境により)+ pigpio または python3-libgpiod / python3-lgpio を状況で追加。必要なら GPIOZERO_PIN_FACTORY を設定。
  • pigpio:apt install pigpio python3-pigpiosystemctl 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の非推奨。