すっかり書いた気になっていたM5Stack Core 2でArduinoを使って、Azure IoT Hubにデータを送信するお話となります。
いま、.NET nanoFrameworkを使って同じ流れをおさらいしていますが、まずは、そこに先行して、こちらのお話を完結させたいと思います。
前回
hatsune.hatenablog.jp
前回はAzure IoT Hubの準備が完了したところまで進みましたので、今回は、M5Stack Core 5からAzure IoT Hubに「気圧」「気温」「湿度」を送信するためのプログラム(スケッチ)を紹介します。
Setupへの追加ロジック
センサー値を取得するスケッチのSetupに2つのロジックを追加します。
MQTT初期化
Azure IoT Hubに接続するためのライブラリは、Visual Studio CodeでCTRL+SHIFT+Pで「Arduino Board Manager」起動して「M5Stack」をインストールすると「AzureIotHub」と「Esp32MQTTClient」のライブラリがダウンロードされてきます。
この「Esp32MQTTClient」のライブラリをスケッチの先頭でインクルードしておきます。
#include "Esp32MQTTClient.h"
次にSetUpの中でMQTTを初期化します。
gist.github.com
「connectionString」をAzure IoT Hub上で表示されているプライマリ接続文字列を設定します。
Loopへの追加ロジック
初期化が終わったらセンサー値を取得しているLoopの中にMQTT送信用のコードを入れます。
gist.github.com
主要部分は次のようになっています。
IoT Hubに送信するメッセージの作成
送信するメッセージは次のようなJSONフォーマットです。
このフォーマットに対して、snprintf文を使ってセンサー値を入れたものを「messagePayload」変数に設定します。
snprintf(messagePayload, MESSAGE_MAX_LEN, messageData, messageCount++, Tmp, Hum, Pressure);
IoT Hubへの送信
JSON文字列が出来上がったならば、MQTTに送信します。
EVENT_INSTANCE* message = Esp32MQTTClient_Event_Generate(messagePayload, MESSAGE);
Esp32MQTTClient_SendEventInstance(message);
これで、取得したセンサー値を「INTERVAL」ミリ秒ごとに送信することになります。
最後に
データをWEBでリアルタイム表示
IoT Hubに送信されたデータを「リアルタイム」で、つまり、Azure上のストレージなどにデータを格納せずに届いたタイミングでWEBアプリで表示してみましょう。
IoT Hubのサービス用の共通アクセスポリシーを含んだ接続文字列と、組込みエンドポイントのコンシューマーグループをWEBアプリ側で指定することでAzure IoT Hubと接続できます。
このあたりは、.NET nanoFrameworkを使ったときも同じになるので、機会があればそちらの流れでWEBアプリについては掘り下げたいと思います。