本記事にはAmazonアソシエイト・プログラムによるアフィリエイト広告を含みます。商品の購入等により、当サイトが紹介料を得ることがあります。
キーボード付き小型端末「Cardputer ADV」向けに作っていたローマ字入力→漢字変換ツールを、別のESP32ボード「ideaspark」に移植することにしました。「動かない」の原因は毎回違っていて、配線、電波、ライブラリの流儀、そして一度きりのクラッシュまで、実機ならではの罠を一つずつ踏んでいくことになりました。3日間の記録を、日ごとに分けて書いていきます。
M5Stack Cardputer Adv(移植元)¥13,566Amazonで見る ▸
ideaspark ESP32 開発ボード(移植先)¥1,999Amazonで見る ▸
開発環境の確定
まず決めたのは、GUIを開かずArduino IDE内蔵のarduino-cliをターミナルから直接叩く運用でした。arduino-cli compile・arduino-cli uploadをコマンドラインで実行する形です。ボードはesp32:esp32:esp32(無印、S3ではない)を指定します。
最初のつまずきは、アップロード速度でした。921600bpsでUnable to verify flash chip connectionというエラーが出て失敗します。UploadSpeed=115200まで落としたところ、無事通りました。
もう一つ、実機ポートの取り違えもありました。Arduino IDEに残っていた旧Cardputer ADV用の/dev/cu.usbmodem1101を指定していたのですが、これは今回とは無関係のポートでした。実際に使うべきは/dev/cu.wchusbserial110(WCH CH34xチップ)だったと分かりました。
romaji_kanaのC++移植
ここは静かな成功でした。既存のPython版romaji_kana.pyのロジックを1:1でC++に移植し、g++でコンパイルして出力を1文字ずつ突き合わせました。促音・撥音・大文字・記号混在・アポストロフィ区切りなど、すべてのケースで完全一致。今回の作業の中で、数少ない一発成功の工程でした。
CardKB2疎通――一番ヒヤッとした山
キーボードモジュール「CardKB2」との疎通確認は、今回いちばん緊張した工程です。
M5Stack用CardKB2 カード型キーボードユニット(スイッチサイエンス)¥1,892Amazonで見る ▸
I2Cスキャンをかけても何も見つからず、GND線の接触不良や電源の逆挿しを疑って一旦作業を中断しました。さらに、ideaspark側のチップがわずかに発熱していることに気づき、配線ミスの可能性を優先してケーブルを一度抜き、GND+5Vの2本だけを先に挿す手順に切り替えて原因を探ることにしました。
正体が分かったのは、CardKB2がI2C/UART/BLE/ESP-NOWという4つのモードを持つキーボードだったからでした。このときはBLEモードでiPhoneに接続してしまっていたのです。Fn+Sym+1でI2Cモードに強制固定したところ、あっさり解決しました。
そこからアドレス0x5Fで安定して検出できるようになり、実測でプロトコルも確定しました。標準ASCII 1バイト読み(旧CardKB互換)で、b=0x62 Enter=0x0A Backspace=0x08 Shift+a=0x41。矢印キーだけは特定できず、いったん保留にしました。
キーボード + ローマ字変換の統合
CardKB2の実キー入力から、romaji_kana変換を通してシリアル表示するところまでを実機で確認しました。実際にタイプした「こんにちわ」が正しく変換されたのを見て、ここまでの工程がひとつにつながったのを実感しました。
ST7789への日本語表示
画面表示には、M5GFXの元になっている「LovyanGFX」を採用しました。決め手は、日本語ゴシック体のフォント(fonts::lgfxJapanGothic_*)が最初から組み込まれていて、独自にビットマップフォントを用意する必要がないことです。
ピン配置は、同型基板のサンプルコードから特定しました。MOSI=23 SCLK=18 CS=15 DC=2 RST=4 BLK=32、解像度170×320、offset_x=35。この設定で一発表示に成功しました。
統合デモ――打鍵がそのまま画面に
ここまでの部品を組み合わせ、キーボード入力→変換→ST7789表示という流れが実機で完成しました。「タイプミスは置いておいて、十分に打てる」という評価をもらえたのが1日目の到達点です。あわせて、まだ変換が確定していないローマ字(preedit)を水色で表示するプレビュー機能も追加しました。
—
1日目はハードウェアまわりの疎通確認が中心でした。2日目は、Wi-Fi接続とGitHub連携、そしてAI変換という、今回いちばんの山場に入ります。


コメント