YouTubeチャンネル「thatproject」を運営するEric Nam氏が、「ESP32-P4 Nano」を使った12×5グリッドの文字表示システム「Grid Board」を開発し、GitHubで公開した。10.1インチディスプレイに最大60文字を表示でき、Bluetooth Low Energy(BLE)でスマートフォンアプリからワイヤレス制御できる。
Grid Boardは、Waveshareの「ESP32-P4 Nano」マイコンボードと10.1インチJD9365 LCDパネルを組み合わせ、DSI(Display Serial Interface)で高速画面更新を実現している。12×5のグリッド配置で英大文字、数字、句読点、絵文字を表示できる。
ESP32-P4には標準でWi-FiやBluetoothが搭載されていないため、Eric Nam氏は「ESP32-C6」をスレーブデバイスとしてSDIO経由で接続する構成を採用した。「esp-hosted」と「esp_wifi_remote」を使用してBluetooth機能を実現し、「NimBLE」スタックでGATTサーバーを実装している。
ソフトウェアには「LVGL v9.2」を使用してUIとアニメーション描画を担当し、カスタムフォント「ShareTech140.c」で文字表示、「NotoEmoji64.c」で絵文字表示を行う。フォントはC配列として事前にラスタライズされており、実行時のグリフ読み込みを不要にして高速描画を実現した。
Grid Boardの特徴的な機能として、文字更新時の「カード落下」アニメーションがある。BLE経由で新しいメッセージを受信すると、各文字を順次グリッドに配置する際、対象セルの上部に「カード」を生成し、LVGL のアニメーションシステムで Y座標を上から下に移動させる。大型ディスプレイでの画面遅延を避けるため、一度に10スロットずつアニメーションを実行し、完了後に次の10スロットを処理する仕組みだ。
タッチパネルには「GT911」をI2C接続で使用し、オプションで「ES8311」による音声フィードバックにも対応する。ESP-IDF v5.4.2で開発され、依存関係は「idf_component.yml」で管理されている。
開発環境は「esp-idf_project」ディレクトリに「main.cpp」(プロジェクトエントリーポイント)、「grid_board.cpp」(アニメーション・表示ルーチン)、「ble_server.c」(NimBLE BLEサーバーロジック)、「gatt_svr.c」(BLE GATTサービス)などのソースファイルで構成される。
Eric Nam氏はGitHubで「LVGL v9のアニメーションエンジンとカスタムC配列フォントの組み合わせにより、大規模ディスプレイでも滑らかで高品質なグラフィックスを実現できる」と説明している。
Grid_Board – Interactive 12×5 Grid Display for ESP32-P4(GitHub)