Azure IoT HubのREST APIを使ってM5ATOM Liteからデータを送信するメモ
はじめに
Azure IoT HubにM5ATOM Liteからデータを送信するメモです。
IoT HubのREST APIを利用します。
ソースコードはGitHubに公開しています。
https://github.com/tmitsuoka0423/m5stack-azure-iot-http-post
Azure IoT Hub周りの作業
Azure IoT Hubをデプロイする
公式のクイックスタートを参考にIoT Hubのインスタンスを作成します。
- スケールは
F1
を選択。(無料版)
Azure IoT HubのREST APIエンドポイントのルート証明書を取得する
ESP32でHTTPS通信を行う場合は、ルート証明書を指定してあげる必要があります。
こちらの記事(Arduino – ESP32 WiFiClientSecure ライブラリで、安定して https ( SSL )記事をGETする方法)を参考にさせていただき、ルート証明書を取得します。
https://<Iot Hubの名前>.azure-devices.net/
をChromeで開いて証明書を取得します。
(実際に開くとBad Requestになりますが、ルート証明書を取るだけなので問題なし)
IoTデバイスを登録する
Azure IoT Hubのコンソールを開き、IoTデバイス > 新規
からデバイスを登録します。
デバイスIDは好きな値を指定し、その他は変更なしでOKです。
M5ATOM Liteのプログラム
サンプルコード
前記事(M5ATOM LiteでHTTP POSTするシンプルなサンプルコード)で作成したコードを変更していきます。
test
という文字列を送信してみます。
arduino-esp32
のHTTPClient.h
を見ると、begin
メソッドにURL
とルート証明書
を渡せば良さそうです。
bool begin(String url, const char* CAcert);
コードは以下のようになります。
#define FASTLED_INTERNAL
#include <M5Atom.h>
#include <WiFi.h>
#include <HTTPClient.h>
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
const char *url = "https://<IoT Hubの名前>.azure-devices.net/devices/<デバイスID>/messages/events?api-version=2018-06-30";
const char* azure_iot_hub_root_ca =
"-----BEGIN CERTIFICATE-----\n" \
"MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ\n" \
"RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD\n" \
"VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX\n" \
"DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y\n" \
"ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy\n" \
"VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr\n" \
"mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr\n" \
"IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK\n" \
"mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu\n" \
"XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy\n" \
"dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye\n" \
"jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1\n" \
"BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3\n" \
"DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92\n" \
"9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx\n" \
"jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0\n" \
"Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz\n" \
"ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS\n" \
"R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp\n" \
"-----END CERTIFICATE-----\n";
const char *sasToken = "SharedAccessSignature sr=xxxxxxxxxx&sig=xxxxxxxxxxxxxxxx&se=xxxxxxxxxxxxxxx&skn=xxxxxxxxxxxxxxxxxx";
void post() {
HTTPClient http;
http.begin(url, azure_iot_hub_root_ca);
http.addHeader("Content-Type", "application/json");
http.addHeader("Authorization", sasToken);
http.POST("test");
Serial.println(http.getString());
http.end();
}
void setup() {
M5.begin();
Serial.begin(115200);
Serial.print("WiFi connecting.");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(100);
}
post();
}
void loop() { /* 起動時のみ送信するため、ループでは何もしない。*/ }
実際に利用する場合は、WiFiの設定とAzureのパラメータを設定してください。
Azureのパラメータの詳細は以下の通りです。
名前 | 内容 | 備考 |
---|---|---|
url | Azure IoT HubのREST APIのURL | 作成したIoT Hubインスタンスの名前と、登録したデバイスIDを指定 |
sasToken | SASトークン | SASトークンを発行するで発行できます |
動作確認
公式のサンプルコードを利用して、受信できているか確認します。
サンプルコードをダウンロード後、Node.jsでAzure IoT Hubにテレメトリを送信するサンプルコードを動かすメモ/送信したデータを受信するの手順に従って、プログラムを実行します。
// TODO 画像
まとめ
M5ATOM LiteからAzure IoT HubのREST APIを使ってデータを送信しました。
HTTP POSTで送信すると、割とシンプルなコードで送信することができました。
今回、SASトークンはパソコンで発行してからM5ATOM Liteに書き込んでいるので、時間が経つと期限が切れてしまいます。
マイコン上でSASトークンを発行する方法も調べていきます。
Author And Source
この問題について(Azure IoT HubのREST APIを使ってM5ATOM Liteからデータを送信するメモ), 我々は、より多くの情報をここで見つけました https://qiita.com/mitsuoka0423/items/67f66ced5aa4b79ff169著者帰属:元の著者の情報は、元の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 .