TWELITE DIPに工場出荷時に書き込まれている標準アプリ(App_Twelite)のシリアルメッセージを解釈してLCD画面上に表示します。
M5stickに接続する前に書き込んだTWELITE DIPが無線パケットを受信してデータを出力するかPCで確認しておいてください。
M5Stack側のTWELITE DIPは、以下のような接続をしておきます。以下の配線はTWELITE DIPを親機設定(M1=GND)とした配線をしています。AI1-4はアナログポートがオープンになり不定な入力を防ぐためです(App_TweliteではVCCレベルを入力した場合、そのポートを未使用とする意味を持たせています)
TWELITE DIP
-01:GND VCC:28-------M5 3V3
-02:D14(SCL) (M3 ) D3:27-
M5 GPIO16-------03:D7 (RX ) (M2 ) D2:26-
-04:D5 (Pw1) (AI4) D1:25----VCC
-05:D18(DO1) (AI3) A2:24----VCC
-06:C (Pw2) (AI2) D0:23----VCC
-07:M (Pw3) (AI1) A1:22----VCC
-08:D19(DO2) RST:21-
-09:D4 (DO3) (BPS)D17:20-
M5 GPIO17-------10:D6 (TX ) (SDA)D15:19-
-11:D8 (Pw4) (DI4)D16:18-
-12:D9 (DO4) (DI3)D11:17-
GND----13:D10(M1 ) (DI2)D13:16-
M5 GND----------14:GND (DI1)D12:15-
setup()
Serial2.setRxBufferSize(512);
Serial2.begin(115200, SERIAL_8N1, 16, 17);
シリアルポートの初期化を行っています。
LCDスクリーンの初期化を行います。処理の内容はscreen.cにあり、ターミナル画面の初期設定を行います。
loop()
シリアルポートの入力チェックを行います。入力したデータを the_input_uart
キューにいったん投入します。
シリアルポートから入力データを処理します。ここではパーサーに文字列を投入します。パーサーによりシリアル電文が解釈できた場合は、update_screen()
を呼び出しターミナル画面に文字を更新します。
LCD画面上のターミナル画面領域を書き換えます。処理の内容はscreen.cにあります。
update_screen()
受信したパケットデータを読み取り、画面表示を更新します。
trm << "\033[H"; // カーソルホーム
...
if (b) trm << "\033[1;1H" // カーソルを1行目に移動
"\033[1;30;45mタイムCT\033[0m" " " // ボールド、文字色、背景色設定
"\033[1;30;45mId#\033[0m" " "
"\033[1;30;45mシリアル番号\033[0m";
if (b) trm << "\033[3;1H" // カーソルを3行目に移動
"\033[1;30;45m D1 \033[0m"
" \033[1;30;45m D2 \033[0m"
" \033[1;30;45m D3 \033[0m"
" \033[1;30;45m D4 \033[0m";
この関数内ではエスケープシーケンスを用いて画面の表示位置などを制御しています。
TwePacketTwelite& x = refTwePacketTwelite(spLastPacket);
if (c) trm << "\033[2;1H"
<< printfmt("%5d %3d %8X",
x.u16timestamp, x.u8addr_src, x.u32addr_src);
if (c) trm << "\033[4;1H "
<< (x.DI1 ? "\033[31m" "●" : "\033[35m" "〇") << "\033[0m "
<< (x.DI2 ? "\033[32m" "●" : "\033[35m" "〇") << "\033[0m "
<< (x.DI3 ? "\033[33m" "●" : "\033[35m" "〇") << "\033[0m "
<< (x.DI4 ? "\033[34m" "●" : "\033[35m" "〇") << "\033[0m";
パケットデータはspLastPacket
に格納されています。これの内容を紐解くにはretTwePacketTwelite()
を呼び出します。xの値を読み出して、これに対応して画面を更新します。