はつねの日記

Kinect, Windows 10 UWP, Windows Azure, IoT, 電子工作

M5Stack Core 2で始めるAzure IoT Hub入門(その5)

すっかり書いた気になっていたM5Stack Core 2でArduinoを使って、Azure IoT Hubにデータを送信するお話となります。
いま、.NET nanoFrameworkを使って同じ流れをおさらいしていますが、まずは、そこに先行して、こちらのお話を完結させたいと思います。

前回

hatsune.hatenablog.jp
前回はAzure IoT Hubの準備が完了したところまで進みましたので、今回は、M5Stack Core 5からAzure IoT Hubに「気圧」「気温」「湿度」を送信するためのプログラム(スケッチ)を紹介します。

Setupへの追加ロジック

センサー値を取得するスケッチのSetupに2つのロジックを追加します。

Wi-Fi初期化

gist.github.com
関連するライブラリはWiFi.hにあるので、スケッチの先頭でインクルードしておきましょう。

#include

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アプリについては掘り下げたいと思います。