pigpioの基本
はじめに
Raspberry Piを使ってLEDを光らせたり、モーターを動かしたりするときに欠かせないのがGPIO制御です。代表的な方法としては標準のRPi.GPIO
ライブラリがありますが、より高精度で多機能な制御を求めると登場するのがpigpioライブラリです。本記事では、pigpioが生まれた背景や特徴、そして使うことで得られるメリットをまとめます。
🐷 pigpioとは
pigpioは、Raspberry PiのGPIOを高精度かつ非同期で制御できるC言語ベースのライブラリです。Python用のバインディングも用意されており、手軽に扱えるのが魅力です。
🕰 背景:なぜpigpioが必要だったのか
Raspberry Piの登場初期は、公式のRPi.GPIO
が定番でした。しかし、これには以下の制約がありました。
-
PWM(パルス幅変調)の精度が低く、ソフトPWMはジッターが大きい
-
複数のピンで同時に高精度制御するのが難しい
-
リモートからの制御を想定していない
こうした制約を解消するため、高精度PWM・サーボ制御・リモート制御に対応したpigpioが登場しました。
⚙️ pigpioの特徴
高精度PWM
-
1マイクロ秒単位の精度でPWM制御が可能
-
サーボモーター制御に最適(20ms周期の信号などを安定生成できる)
マルチチャネル制御
-
複数のGPIOを同時に独立制御できる
-
ソフトPWMでも安定した出力が可能
リモート制御
-
pigpioデーモン(
pigpiod
)を介してLAN越しにGPIOを操作できる -
複数のRaspberry Piをまとめて制御するシステムに応用可能
波形生成
-
単純なON/OFFだけでなく、任意の波形を生成可能
-
赤外線リモコンの送信や独自通信プロトコルの実装にも使える
pigpioは「GPIOハード制御に近い柔軟性」と「Pythonの手軽さ」を両立させたライブラリ。シンプルな制御から高度な信号生成まで対応できる点が強みです。
💻 基本的な使い方
インストール
Raspberry Pi OSならAPTで簡単に導入可能です。
sudo apt install pigpio python3-pigpio
デーモンの起動
pigpioはデーモンとして動作します。
sudo systemctl start pigpiod
Pythonからの利用例
LED点灯(GPIO 17を使用)
import pigpio
import time
pi = pigpio.pi() # デーモンに接続
pi.set_mode(17, pigpio.OUTPUT)
pi.write(17, 1) # LED点灯
time.sleep(1)
pi.write(17, 0) # LED消灯
pi.stop() # 接続終了
PWM出力(GPIO 18に1kHzで50%デューティ比を出力)
pi.set_PWM_frequency(18, 1000)
pi.set_PWM_dutycycle(18, 128) # 0〜255でデューティ比指定
🎯 pigpioを使う嬉しさ
-
精度の高さ:モーターやセンサーが思った通りに動く
-
複雑な制御も可能:リモコン信号、I²C/SPIの代用、オーディオ信号生成など応用範囲が広い
-
リモート操作:複数のRaspberry Piをまとめて扱えるので分散システムにも便利
-
柔軟性:既存の
RPi.GPIO
では難しい制御もシンプルに記述できる
「LEDを光らせる」から「独自プロトコル通信」までスケールアップできるのがpigpio最大の魅力です。
⚠️ 注意点
-
デーモン(
pigpiod
)を起動していないと利用できない -
高精度な制御のためCPU負荷がやや増える
-
標準の
RPi.GPIO
よりセットアップが一手間かかる
リアルタイム性が重要なアプリでは、pigpioのCPU負荷を監視することが必要です。
🔮 まとめ
pigpioは、Raspberry PiのGPIO制御を「高精度・多機能・リモート対応」に進化させるライブラリです。LED制御からモーター制御、独自波形生成、分散制御まで幅広く使えるため、電子工作の可能性を大きく広げてくれます。