昔々、Pimoroniが出していたMicro Dot pHAT(現在は廃盤)が、個人的にはいまもお気に入りでとは言えずっと引き出して眠っていたのですが、いよいよRaspberry Pi Picoで動かしたくなったのでやりました。

成果物はオリジナルのリポジトリをフォークして、別ブランチとしてpush してあります。まずはCircuitPython。
今回はMicroPythonも作ってみました。ライブラリのコードにほとんど差がなく、どちらのPythonかの情報も取得できるので、頑張れば共通化できそうだなと思っているところです。
やったこと
大雑把にやったことは以下の通り。先にCircuitPython版を作って、後からMicroPython版を作りました。
- ライブラリからnumpyを使用したコードを除去(Copilotにやらせました)
- Copilotがミスってたところを修正
- ライブラリの関数をクラス化
- サンプルの更新
- MicroPython版も作成
オリジナルのライブラリではnumpyが使われていましたが、組み込み系Pythonにそんなものはない(似たようなやつはいくつかあるらしい)ので、numpyを使わないコードに変換する必要があります。基本的にはバッファのxyをどうこうするような処理に使われているはずですが、numpyがわからないので、今回はCopilotにやらせました。
Copilotにやらせた結果、Pythonの配列操作とループに置き換わりました。サンプルも概ね問題なく動くましたが、一部挙動が違うところがあったので、そこは自分でxyをどうこうしているコードをにらめっこして修正しました。
ライブラリは元々Raspberry Pi用なので、I2CのGPIOピンの番号のことは考えなくて良いように作られてありましたが、組み込み系Pythonの場合、GPIOピンの位置を指定できたほうがうれしいので、そのように作り変えました。Micro Dot pHATは0x61〜0x63の3つのI2Cデバイスがあり、それぞれ初期化する時にSMBusが呼び出されていましたが、同じことをCircuitPythonではできなかった(何回もI2Cを初期化しようとすると怒られる)ので、コード側でI2Cを初期化して、それをライブラリに渡して使うようにしています。I2Cをライブラリにわたすには、元の状態では関数がベタッと置かれている状態で不都合だったので、クラス化をしました。この結果、関数の使い方が少し変わりましたが、「クラス.元の関数」に書き換える程度で済むので、そこまで影響はないでしょう。以上を踏まえて、初期化のコードは次のようになりました。いいね。
import board from busio import I2C from microdotphat import MicroDotpHAT bus = I2C(board.GP5, board.GP4) mdp = MicroDotpHAT(bus)
あとはこれを全部のサンプルに適用します。時計サンプルのclock.pyはネットワークを使わないと時刻が取れないので、Wi-Fi接続とNTPの時刻同期のコードを含めたりしています。いっこ、advanced_scrolling.pyだけは、オリジナルの文字の量ではRAMが不足するらしくずっこけるので、文字数を減らさない限り実行不可という感じです。
MicroPython版は、busioがmachineに変わり、boardのインポートとI2Cのピン番号指定が不要になった程度で、大差はありません。ただし、ドキュメントには書かれているはずのsys.atexit()が呼び出せなかったため、もし使えたら使うようにして、使えなかったら使わないようにするようなコードを追加しています。現状は使えないので、コードを停止しても自動で消灯はしてくれません。
動作のようす
動作の様子は先日のOSC大阪のレポートにも貼った通り。基本的には自作のuHAT Porter Picoで動かしていますが、もっと小さいやつで直接繋いでも良いかもしれません。

昔作った為替表示アプリを移植してみました。使用しているAPIは新たに見つけてきたサービスのものを利用していますが、他はほぼ一緒です。他に大きく変わったのは……為替のレートですかね(スゥーー……)。
スクリプトはこちらに置いてあります。
まとめ
Micro Dot pHATを組み込み系Python on Raspberry Pi Picoで動くようにしてみました。昔もやろうとして「numpyの除去なぁ」と思って放り投げていたのが、AIにやらせたらほぼ一瞬で片付いたので、これはAI様々案件だったかもしれませんね。
引き出しの奥でMicro Dot pHATを眠らせている方は、Picoでまた動かしてあげてみてください。
uHAT Porter Picoは、スイッチサイエンスさんで委託販売中です。あわせてぜひ。