概要
PCのPythonスクリプトは、PCの画像をMQTTを使ってESP32に送くります。
ESP32は受け取った画像を2.8インチTFTディスプレイに表示します。
画像データは一つのメッセージで送るには大きすぎるので60分割して送ります。

環境
| 開発用PC(MINI2) | Windows11 |
| Python | Python 3.13.0 |
| 2.8インチTFTディスプレイ | Freenove FNK0103F_2P8 |
| Arduino IDE | Arduino IDE ver 2.3.4 |
| ボード | ESP32 Dev Module |
| MQTTブローカー用PC(GMK) | Windows11 |
プログラム一覧
| TFT2p8_MQTT_show_all.ino | ESP32のプログラム トピックから購読したイメージデータ表示、図形の表示、日本語文字列の表示を行う。 |
| TFT2p8_PUB_png.py | PCの画像データをファイル指定又はリストのファイルを一定間隔でトピックに投稿する。 |
| TFT2p8_PUB_shapes.py | リストの図形データを一定間隔でトピックに投稿する。 |
| TFT2p8_PUB_jJapanese.py | 日本語の文字列をトピックに投稿する。 |
TFT2p8_MQTT_show_all.inoのトピック処理概要
| トピック名 | 処理内容 |
image/png/json | Base64エンコードされたPNG画像のスライス(断片)をJSONで受信します。受信した断片をデコードし、指定されたシーケンス番号(seq)に基づいて画面の正しい位置に描画し、全体像を組み立てます。 |
display/shapes | 図形(円、長方形、三角形)や日本語文字列の描画指示をJSONで受信します。JSON内の座標(x, y)や色(clr)などの情報に基づき、現在の画面に図形や文字を上書き描画します。 |
display/json | 汎用的なJSONデータを受信します。受信すると、まず画面全体を黒でクリアし、その後トピック名(黄色)とJSONに含まれるすべてのキーと値のペアをテキストとして画面に一覧表示します。 |
トピック display/shapes のJSON形式
| キー | 意味 | 値の形式 | 指定可能な値 / 例 | 備考 |
shp | 図形/文字の種類 | 文字列 | "CR": 円 "RC": 長方形 "TR": 三角形 "JP": 日本語文字列 (サイズ1) "JP2": 日本語文字列 (サイズ2) | このキーは必須です。 |
x | 描画開始点のX座標 | 整数 | 0 ~ 319 | 文字列の場合は、文字列の左上のX座標になります。 |
y | 描画開始点のY座標 | 整数 | 0 ~ 239 | 文字列の場合は、文字列の左上のY座標になります。 |
lng | 図形の大きさ | 整数 | 20 ~ 100 など | 円・長方形・三角形の場合に使用します。 JP, JP2では使用されません。 |
clr | 図形/文字の色 | 文字列 | "BLACK", "PURPLE", "BLUE", "GREEN", "CYAN", "RED", "MAGENTA", "YELLOW", "WHITE", "ORANGE", "PINK", "VIOLET" | |
str | 表示する文字列 | 文字列 | "こんにちは" など | shp が "JP" または "JP2" の場合にのみ使用されます。 |
使い方
➀ PC(GMK)を起動する。起動すればMQTTブローカーが起動する。
➁ 2.8インチTFTディスプレイを起動する。ESP32をUSB電源につなぐ、またはディスプレイの電源端子を5V電源につなぐ。
③ Pythonスクリプト(TFT2_8_PUB_png.py)を起動する。
※表示する画像はTFT2_8_PUB_png.pyのリスト(image_paths)に画像ファイルのパスを記述する。
プログラムの場所
➀Pythonスクリプト
C:\Users\%username%\Documents\012_ICTに関する備忘録\WordPress\さくらWordPressの各ページ\Freenove_ESP32_Display\src
➁Arduini IDE
C:\Users\%username%\Documents\Arduino\Freenove_ESP32_Display