🪄 ホットスポット安定化の魔法 ― 第二の魔法 ― 欲張らない魔法
欲張らない魔法 ― 全 Pi 対応という幻惑を振り払う

魔法シリーズ第二の魔法。前回 GPIO をライブラリ直詠唱に移す方針を立てましたが、これを「Raspberry Pi 全シリーズで動く万能呪文」にしようとして、見事に幻惑の森へ迷い込みました。
かかっていた呪い
「どうせ唱え直すなら Zero から Pi 5 まで全部に効く呪文にしたい」と欲を出しました。ところが GPIO まわりは、機種と OS でこれだけ事情が違います。
| 機種 | GPIO チップ | ライブラリ事情 |
|---|---|---|
| Zero / Zero W / Zero 2 W / 3 / 4 | gpiochip0(pinctrl-bcm) | libgpiod v1系 or v2系 |
| 5 | gpiochip4(pinctrl-rp1)← 別物 | libgpiod v2系のみ |
肝は三つ。Pi 5 は RP1 経由で gpiochip0 ではないこと、しかも番号が環境で変動しうること。RPi.GPIO は Pi 5 では動かないこと。そして libgpiod の Python バインディングは v1 と v2 で詠唱体系が全く違うこと。
呪いを追う
結果、ライブラリの自動検出(gpiod v2 / v1 / RPi.GPIO / lgpio / sysfs を順に試す)と、チップの自動検出(/sys/bus/gpio/devices/ を覗いて pinctrl-rp1 か bcm かを見抜く)を両方やる羽目になりました。呪文はどんどん長くなり、分岐の検証もしきれない。Pi 5 実機の番号変動に振り回され、いつまでも安定しない。
本来やりたかったのは「ホットスポットで TG を自動で切り替える」ことであって、GPIO チップ番号を見抜く万能の目を鍛えることではありませんでした。
呪いの正体
「ついでに万能化」という欲そのものが呪いでした。汎用性は機能ではなく、守り続けるべき対象が増えるコストです。
解呪の魔法
効力の範囲を Pi Zero 〜 Pi 4 に絞る、という引き算の魔法を選びました。Pi 5(RP1)は明確に対象外。これで gpiochip0 固定でよくなり、RPi.GPIO も選択肢に戻ります。バックエンドの優先順位もすっきりしました。
gpiod v2 → gpiod v1 → RPi.GPIO → sysfs
(上から順に試して、効いた最初のものを採用)systemd ユニットの編集も不要にして、「ソースを置き換えるだけで安定する」を満たす形に落としました。
魔導書に記す
「ついでに万能化」は、たいてい本題より高くつく幻惑である。 自分の機材が Pi 4 までなら、Pi 5 対応は「将来必要になったら唱え足す」で十分でした。範囲を切る勇気こそが、結局いちばん早く安定をもたらす魔法だったのです。
次の魔法は使い魔(bot)の話。ある時刻を境に応答がぴたりと止まる、ログローテーションの呪いです。
📝 執筆:JJ2TAB(尾張旭 DMR デジピーター 管理人)
🏛 JJ2YYK あいちデジタルコミュニケーションハムクラブ