AWS IoTにMQTTで送られた情報をモニターする

CO2センサーT6703の値をAWS IoTに送る などのプログラムでAWS IoT にMQTT で publish した情報を 小型TFT ディスプレイに表示するプログラムを作成した。AWS IoTコンソールで表示される内容を手元で表示するものである。

メッセージが数秒に1回程度の低頻度で送られる場合のデバッグに利用することを目的としている。単にメッセージをTFTディスプレイに表示しているだけなので、高頻度のメッセージは読み取ることが困難である。

CO2センサーT6703の値をAWS IoTに送る などプログラムでは、トピック “iot/[MACアドレス]/update” に publish しているので、“iot/#“ を subscribeして、メッセージを受信している。

ハードウェア

使用したハードウェアは次の通り。

  • MH-ET Live ESP32 Minikit
    • ESP32 ボード
    • WeMos D1 mini 互換のピン配列
  • WeMos D1 mini TFT 1.4 Shield
    • 受信した情報を表示するため
    • MH-ET Live ESP32 Minikit の上に載せて利用した
    • ディスプレイのライブラリを変更すれば、他のディスプレイでももちろん良い

開発環境

Windows10でプログラムの開発をした。

IDE

IDEには次のものを利用した。

  • PlatformIO IDE for Visual Studio Code
  • フレームワーク
    • Arduino

開発環境の設定については、必要に応じて PlatformIO IDE for VSCode でESP32のプログラム開発 などを参照して欲しい。

ライブラリ

以下のバージョンのライブラリを使って動作確認をした。

ソフトウェア

基本的に、CO2センサーMH-z19の値をAWS IoTに送る や CO2センサーT6703の値をAWS IoTに送る で利用したプログラムのMQTTのsubscribeとディスプレイ周りを修正しただけである。

リポジトリ

備忘録としてPlatform IDE for VSCodeでの開発用ファイルを次のGitHubに置いてある。

https://github.com/kunsen-an/aws-mqtt-websocket-wifimanager-tft1.4.git

main.cpp

トピック "iot/#" を subscribeして、受信したメッセージを表示している。

受信したメッセージのデバイスの Type, Timestamp, MACアドレスを決まった位置に表示するために ArduinoJsonオブジェクト(tagJsonObject) を生成して利用しているが、単にメッセージを表示するだけなら ArduinoJsonの prettyPrintTo() を利用する方が簡単である。

wemos-tft-display.cpp

WeMos D1 mini TFT 1.4 Shield に表示するためのルーチンを含んでいる。

Adafruit GFX ライブラリ、Adafruit ST7735 ライブラリを利用している。

その他のファイル

以下のプログラムは、基本的に CO2センサーT6703の値をAWS IoTに送る で利用したものと同じ。

  • aws-mqtt-websocket.cpp
    • AWS IoT と MQTT over WebSocketで通信する
  • setupDeviceName.cpp
    • デバイス名を設定する。このプログラムでは重要ではない。
  • wifiManager.cpp
    • WiFiManager で WiFiに接続する

実行結果

メッセージを受信するたびに画面全体を描画しなおしている。現在のプログラムではメッセージの保存などはしていない。