Azure IoT Suite に頼らない、IoT に挑戦!!

前回は、「Azure IoT Suite」という、らくらく全自動構成を試してみましたが、今回はいつものように [デバイス → 収集 → 集約 → 蓄積 → 可視化] までを自力で作成してみたいと思います。

目標とする構成です!!

やる事が多すぎて、くじけそうですが、やってみましょう!!

今回、長編です!!


全体の流れ

Step1:「IoT Hub」の作成とArduino(WeMos)接続準備
Step2:「Arduino(WeMos)+光センサー」の設定と接続確認
※Wi-Fiルータの設定は省略します。
Step3:「ストレージアカウント」の作成
Step4:「Stream Analytics」の作成
Step5:「PowerBI」の設定

Step1:「IoT Hub」の作成とArduino(WeMos)接続準備

それでは、[IoT Hub] から作成して行きましょう!

IoT Hubには、Arduino(WeMos)とAzureを接続する役割があります。
※IoT Hubの詳細はこちら

ここから、[IoT Hub]にArduino(WeMos)を接続するための作業になります。

作成した[IoT Hub]を選択し、[共有アクセスポリシー]を選択。

[iothubowner]を選択し、「接続文字列ープライマリキー」をコピー

[Device Explorer] を作業PCにインストールして下さい。

Device Explorer を起動し、[IoT Hub Connection String]に[接続文字列ープライマリキー]をペーストし、[Update]を選択。
※Device Explorer と IoT Hub 接続し、Device Explorerからの操作を可能にします。

[Managemetn]タブー[Create]を選択、[Device ID]にデバイス名を入力し、[Create]を選択

先ほど、作成したデバイス名を右クリックし[Copy connection string for selected device]を選択。 ※Arduino(WeMos)とIoT Hubを接続するためのキーになります。

これにて、Arduino(WeMos)との接続準備が完了です。

Step2:「Arduino(WeMos)+光センサー」の設定と接続確認

今回は物理デバイスに Arduino互換の[WeMos D1 R2]と[光センサー]を使用し、光センサーからの値を IoT Hub へ送信するように設定します。

[接続図] ※A0から光センサーの値をモニターします。

Step1:Arduino IDE (プログラミング環境)を作業PCにインストールします。
Step2:Arduino IDE から[ファイル]ー[環境設定]にて下記を設定
追加のボードマネージャのURL:http://arduino.esp8266.com/stable/package_esp8266com_index.json
Step3:Arduino IDE から[ツール]ー[ボード]ー[ボードマネージャ]から「esp8266」をインストール
Step4:Arduino IDE から[ツール]ー[ボード]から「WeMos D1 R2 & mini」を選択
Step5:WeMos用のUSBドライバー[CH341SER_win.zip]をインストール
Step6:GitHubから[Azure-iothub-mqtt-esp8266-master.zip]をダウンロード
Step7:Arduino IDE から[スケッチ]ー[ライブラリをインクルード]ー[ZIP形式のライブラリをインストール] 上記ZIPを選択
Step8:Arduino IDE から[ファイル]ー[スケッチの例]ー[AzureIoTHub]ー[Azure-iothub-mqtt-esp8266]を選択

#include <AzureIoTHub.h>
void setup() {
 Serial.begin(115200);
 WiFi.begin(“SSID“, “PASS“);
 Azure.begin(“[Copy connection string for selected device]をペースト“);
 Azure.setCallback(azureCallback);
}
void azureCallback(String s) {
 Serial.print(” [“);
 Serial.print(s);
 Serial.println(“] “);
}
void loop() {
if (WiFi.status() == WL_CONNECTED) {
 Azure.connect();
 DataElement a = DataElement();
 a.setValue(”Analog”, analogRead(A0));
 Azure.push(&a);
 Serial.println(analogRead(A0));
 delay(2000);
 } else {
 Serial.println(“Not connected to the IoT_Hub”);
 delay(2000);
 }
}

Step9:上記スケッチを[マイコンボードに書き込む]


エラー無く書き込めた場合、Arduino(WeMos)とIoT Hubが接続されているはずなので、確認してみましょう!

先ずは、Arduino(WeMos)上で光センサーからの値を取得できているか確認します。

Arduino IDE から[ツール]ー[シリアルモニター]

光センサーからの値が確認できます。

Device Explorer から光センサーの値がIoT Hubに届いているか確認します。

[Data]タブー[Monitor]を選択すると、[EventHub Data]に受信データが表示されます。

Device Explorer(IoT Hub)から、Arduino(WeMos)にメッセージを送信してみます。

[Messages To Device]タブー[Message]に送信する文字列を入力ー[Send]を選択

Arduino(WeMos)側に文字列が届いている事が確認できます。

Step3:「ストレージアカウント」の作成

Arduino(WeMos)から送信されてくる光センサーのデータを蓄積するためのストレージアカウントを作成します。 ※ストレージアカウントの詳細はこちら

蓄積のためのコンテナを作成

Step4:「Stream Analytics」の作成

Stream Analytics を一言で言うと、データの受け渡しをする機能。今回の場合だと、IoT Hubからデータを受信し、ストレージにデータを渡す役割を果たします。
※Stream Analyticsの詳細はこちら

IoT Hubからデータを受信する為の入力側の設定

蓄積用Blobストレージへ出力する為の出力側の設定

(PowerBIへ渡すための)テーブルストレージへ出力する為の出力側の設定

作成した Stream Analytics を選択し、[クエリ]を選択
※FROM[input]からきたデータを→SELECT[*]全て→INTO[output-Blob]に渡す。

これで、準備が完了しました。作成したクエリを[開始]してみましょう。


エラー無く実行できた場合、Arduino(WeMos)からのデータがBlobストレージに保存されているはずなので、確認してみましょう!

[archive]コンテナの中に、ファイルが作成されているのが確認できます。

テーブルストレージへの確認は、Storage Explorer で確認できます。

Step5:「PowerBI」の設定

作業PCにPowerBI Desktopをインストールして下さい。
※ライセンスの都合上、PowerBI Desktopを使用しております。

PowerBI Desktopを起動、[データを取得]ー[さらに表示]を選択

[Azure]ー[Microsoft Azure テーブルストレージ]ー[接続]を選択

ストレージアカウントを入力し、[OK]を選択

テーブルを選択し、[読み込み]を選択

PowerBI上にテーブルストレージのデータが表示されました。
※[視覚化]で様々なグラフを作成できます。


ふぅ~ 一気に突っ走った感じがします。

今回やってみた構成は一つのパターンです。センサーやデバイスは、様々なものを接続できますし、収集したデータをどう活用するかも自由です。この辺は、アイデア次第で広がっていきそうです。

前々から、ArduinoとAzureとの接続を行いたいと思っていたのですが、できてよかった~~