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

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制御からモーター制御、独自波形生成、分散制御まで幅広く使えるため、電子工作の可能性を大きく広げてくれます。