🪄 ホットスポット安定化の魔法 ― 第二の魔法 ― 欲張らない魔法

欲張らない魔法 ― 全 Pi 対応という幻惑を振り払う

魔法シリーズ第二の魔法。前回 GPIO をライブラリ直詠唱に移す方針を立てましたが、これを「Raspberry Pi 全シリーズで動く万能呪文」にしようとして、見事に幻惑の森へ迷い込みました。

かかっていた呪い

「どうせ唱え直すなら Zero から Pi 5 まで全部に効く呪文にしたい」と欲を出しました。ところが GPIO まわりは、機種と OS でこれだけ事情が違います。

機種GPIO チップライブラリ事情
Zero / Zero W / Zero 2 W / 3 / 4gpiochip0(pinctrl-bcm)libgpiod v1系 or v2系
5gpiochip4(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 あいちデジタルコミュニケーションハムクラブ

JJ2YYK
  • JJ2YYK

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です