ESP32-S3をコアとしたポケコンを自作したのですが、そのときにI/O担当MCUとしてCH32V203を使ってみました。
この記事はアドベントカレンダー「CH32V203」の10日目です。
制作したポケコンの概要
クラシックな横長の筐体を意識しつつ、中身はモダンに、というのをテーマにして制作しました。
- メインMCU: ESP32-S3 240MHz DualCore
- ROM 8MB / RAM 520KB
- WiFi, Bluetooth
- サブMCU: CH32V203C8T6
- 外部コネクタ: x8 GPIO, x1 UART, x1 I2C
- 電源: x2 単3型電池
- プログラミング言語: MicroPython
- ディスプレイ: モノクロキャラクタ液晶 20文字4行
- キーボード: 独自配列62キー
ESP32-S3にはMicroPythonのファームウェアを書き込み、テキストエディタなどの環境はMicroPythonプログラムとして実装しています。
CH32V203には独自開発のファームウェアを書き込んでいます。
詳細は技術書展19にて頒布した「令和のポケコン製作記」にて解説しています。
自作ポケコンでのCH32V203の役割
I/O担当MCUとして、キーボード読み取りとディスプレイの制御を担いました。高速な動作が必要なわけではないので、メインMCUとはI2Cで通信しています。
キーボードは62キーのキーマトリクスを構成しています。オーソドックスなマトリクス構成です。読み取りは簡単ですが、とにかくピン数がたくさん必要です。
ディスプレイはHD44780互換のパラレルインターフェースです。データバスを4bitにしても合計6ピンは必要となります。
ESP32-S3へ直接つなぐには必要ピン数が多いこと、制御の役割分担を明確にしてメインMCUでの処理を簡潔にしたかったため、細かい実装はCH32V203側へ集約する構成としました。
CH32V203のファームウェアのソースコードはこちら。
まとめ
今回の構成により、MicroPythonの動くESP32-S3ではI2Cを通じてキーボードの読み取り結果だけを受け取り、ディスプレイで表示したい文字列を送信するだけ、というシンプルなコードで書けるようになりました。
このくらいのタスクであればCH32V203である必然性はさほどないのですが、今後の展開としてUSBキーボードを接続して使えるようにすることを考えています。この場合はUSBホスト機能が必要になるので、CH32V203の特長を生かせるものと思います。(USB通信はCH32V203で完結して、メインMCUとはI2C通信のまま)
