GitHubのESP32アプリをスマホがその場でビルド、書き込みも表示も1台で

画面もキーボードも付いていないESP32-S3の開発ボードを、AndroidスマホにUSBケーブルでつなぐ。するとスマホの画面にボードの表示が出て、スマホのキーボードで操作できるようになる。M5Stackの小型端末「Cardputer」向けに書かれたアプリが、そのまま動く。そんなAndroidアプリ「Droidputter」の設計とコードが、MITライセンスでGitHubに公開された。

仕組みは、Cardputerが使っているライブラリに手を入れることにある。画面はST7789という液晶をM5GFXが駆動し、キーボードはGPIOの格子をM5Cardputerライブラリが読む。作者はこの2つにパッチを当て、画素の書き込みをUSB経由でスマホへ流し、スマホから届いたキー入力をアプリの入力に混ぜるようにした。アプリ側のコードは1行も変えない。

問題はビルドである。公開されているCardputerアプリのバイナリは静的にリンクされているため、後からライブラリを差し替えられない。そこでDroidputterは、その場でビルドする。GitHubにあるアプリを選ぶと、スマホが小さな中継サーバーに依頼し、中継サーバーがGitHub Actionsを走らせてリポジトリを複製し、パッチ済みのライブラリを入れてPlatformIOでコンパイルし、できたものをスマホへ返す。作者の計測では、同じ構成のビルドが残っていれば2分4秒、一から作ると4分8秒だった。

書き込みもスマホがやる。作者はesptoolがESP32のROMと話す手順をKotlinで書き直した。1.07MBの書き込みからリセット後の再接続までが15秒、470KBなら8秒としている。

転送の上限は、無圧縮の全画面で毎秒13.8コマになる。実際のアプリでは毎秒29.6コマ出ており、律速はアプリ自身の描画速度だという。

書き込む前にチップの種別も確かめる。ESP32-C5をつないだ試験では、識別子を読んだ時点で止まり、元のファームウェアは無傷だった。

動作を確認したのは、M5StackのCardputer ADVとStickS3、そして画面を持たない素のESP32-S3-N16R8開発ボードになる。ただしCH9102やCP210xといったUSBシリアル変換を経由する接続では動かない。ESP32-S3が内蔵するUSBの端子でなければ通信が成立しないためだ。

作者はREADMEに出てくる数字がすべて開発日誌から引いたものだと明記している。

関連情報

fabsceneの更新情報はXで配信中です

この記事の感想・意見をSNSで共有しよう
  • URLをコピーしました!

最新記事

YouTube / PodCast

【PR】読んで役立つ注目記事

目次