Check! ESP-WROOM-02 から Azure Event Hubs にデータを送り、Power BI で可視化する(3) ~ データ送信編
こんばんは、 @dz_ こと大平かづみです。
Prologue - はじめに
Check! ESP-WROOM-02 から Azure Event Hubs にデータを送り、Power BI で可視化する(2) ~ クラウド準備編 の続きです。
いよいよ、手元の Things から Internet にのせてクラウドへ届けます!
大まかな流れ
- Azure Stream Analytics のジョブを開始する
- ESP-WROOM-02 を配線する
- Azure Event Hubs API に必要な接続情報を取得する
- スケッチを準備する
- データ送信!
手順
Azure Stream Analytics を開始する
Azure Stream Analytics を開始する
まず、イベントを受け付けられるように、 Stream Analytics のジョブを開始します。クラシックポータルの Stream Analytics の画面を開き、「開始」をクリックして下さい。「出力の開始」のタイミングの選択はそのまま続行で構いません。
ESP-WROOM-02 を配線する
使いたいセンサーを ESP-WROOM-02 に接続します。私は安価な光センサー(CdS) を使いました。
なお、今回は TOUT
を入力端子として使いましたが、アナログ入力を正確に取得したい場合は ADコンバーターで変換するとよいそうです!以下は TOUT
から直接読み込むようになっていますので、あくまで参考程度とされてください。
Azure Event Hubs API に必要な接続情報を集める
Azure Event Hubs の API を使うには、以下の情報が必要です。
必要な情報 | 入手方法 |
---|---|
名前空間名 | 作成した Service Bus のページ |
イベントハブ名 | 作成したイベントハブのページ |
イベントハブの共有アクセスポリシー名 | 作成したイベントハブの「構成」ページ |
イベントハブの共有アクセスキー | 作成したイベントハブの「構成」ページ(プライマリを使用) |
スケッチを準備する
スケッチは、こちら に私が使ったものを置きました。ちょっと雑ですが、最低限の処理ですので難しくはないかと思います。
構成
├ config.h
└ esp_azure_event_hub.ino
いくつかポイントをピックアップして説明します。
SASトークンについて
SAS (Shared Access Signature: 共有アクセス署名)のトークンは、当初 ESP-WROOM-02 (Arduino) で作成する方法がわからなかったので、別途 Node.js で生成ツールを作成しました(笑) Azure Event Hubs Tool で公開していますので、適宜お使いくださいませ。なお、ソースコードもこちらで公開しています。
ちょっとわかりにくいかもしれませんが、以下の情報を設定して「Generate Signature」をクリックしてください。下方の「Signature token」のテキストエリアにSASトークンが出力されます。これを後述のSASトークンとして指定してください。
SASには有効期限を設定する必要があります。上記では 60
分で設定されています。変更したい場合は、「Token TTL min」を変更してください。
なお、こちらの記事「Proof of Concept – NodeMCU, Arduino and Azure Event Hub」を参考にすると、Arduino でSASトークンを作成できそうなので、いつか試したいです。
接続情報について
今回、接続情報は config.h
にまとめました。
まず、WiFi に接続するための SSID とパスワードを指定します。
それから、上記で確認した Event Hubs への接続情報を指定します。イベントハブのエンドポイントは、 名前空間名.servicebus.windows.net
となります。
SASトークンは、上記で生成したものを設定します。
// Wifi 接続情報
const char* ssid = "YOUR-SSID"; // SSID
const char* password = "YOUR-SSID-PASSWORD"; // SSIDに対するパスワード
// Azure Event Hubs REST API 接続情報
const char* host = "YOUR-EVENTHUB-ENDPOINT.servicebus.windows.net"; // イベントハブのエンドポイント
const char* eventHubName = "YOUR-EVENTHUB-NAME"; // イベントハブ名
// Set SAS token that can be created at https://azure-event-hub-tool.mybluemix.net/
const char* sas = "YOUR-SAS-TOKEN"; // SASトークン
ESP-WROOM-02 で WiFi を使う
ESP8266WiFi.h
を読み込んで、以下のようにWiFiのセットアップをします。ssid
, password
は前述のとおりです。
#include <ESP8266WiFi.h>
void setup() {
// ... <略> ...
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// ... <略> ...
}
HTTPS で接続
HTTPS で接続する場合は、 WiFiClientSecure.h
を読み込んで、以下のように書きします。今回の場合の host
は前述のエンドポイントです。
#include <WiFiClientSecure.h>
// Use WiFiClientSecure class to create TLS connection
WiFiClientSecure client;
const int httpsPort = 443;
void sendData(String payload) {
String data = String("POST ") + url + " HTTP/1.1\r\n" +
"Host: " + String(host) + "\r\n" +
// ... <略> ...
"\r\n" +
payload + "\r\n";
client.print(data);
while (client.connected()) {
String line = client.readStringUntil('\n');
if (line == "\r") {
Serial.println("headers received");
break;
}
}
String line = client.readStringUntil('\n');
// ... <略> ...
}
void setup() {
// ... <略> ...
if (!client.connect(host, httpsPort)) {
Serial.println("connection failed");
return;
}
// ... <略> ...
}
void loop() {
// ... <略> ...
sendData(payload);
// ... <略> ...
}
Azure Event Hubs の API をたたく
イベントハブにイベントを送信するには、以下のヘッダーに接続情報を設定して送信します。事前に、 Postman などのAPIツールで動作を試してみるとわかりやすいです。
設定項目 | 内容 |
---|---|
Authorization | SASトークンを設定する |
Content-Type | "application/atom+xml;type=entry;charset=utf-8" |
Content-Length | 送信するデータのバイト数 |
また、送信するデータは、JSON形式にします。
ソースコードでは以下が該当します。
void sendData(String payload) {
// ... <略> ...
String data = String("POST ") + url + " HTTP/1.1\r\n" +
"Host: " + String(host) + "\r\n" +
"Authorization: " + String(sas) + "\r\n" +
"Content-Type: " + String(contentType) + "\r\n" +
"Content-Length: " + payload.length() + "\r\n" +
"\r\n" +
payload + "\r\n";
client.print(data);
// ... <略> ...
}
void loop() {
int sensorValue = analogRead(A0);
String payload = "{lightResistance:" + String(sensorValue) + "}";
sendData(payload);
// ... <略> ...
}
ESP-WROOM-02 における TOUT からの入力
ESP-WROOM-02 の TOUT
からの入力は、analogRead(A0)
で取得できます。
void loop() {
// ... <略> ...
int sensorValue = analogRead(A0);
// ... <略> ...
データ送信!
ここまで準備できたら、いよいよ ESP-WROOM-02 に書き込んで実行してみましょう!
...
‹‹(´ω` ๑ )/››‹‹( ๑´)/›› ‹‹( ๑´ω`)/››
...
しばらくして、PowerBI のデータセットに指定したデータセットが作成されれば、データ送信成功です!
ヾ(o´∀`o)ノ
(記事が長すぎて、送信できたときの感動が… ここまで辿り着いた本人には実感できるはずです!!)
Epilogue - おわりに
さて、データをためられるところまで来たら、次はデータ分析!
なんですが、長くなってしまったので、PowerBI でのグラフ生成については次回に回します…!
備考
参考にした情報を記載します。
Author And Source
この問題について(Check! ESP-WROOM-02 から Azure Event Hubs にデータを送り、Power BI で可視化する(3) ~ データ送信編), 我々は、より多くの情報をここで見つけました https://qiita.com/dz_/items/edf96e7f852b62600848著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .