LoginSignup
3
3

Azure IoT HubのREST APIを使ってM5ATOM Liteからデータを送信するメモ

Last updated at Posted at 2021-01-23

IMG_1071.JPG

はじめに

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デバイス > 新規からデバイスを登録します。
Image from Gyazo
デバイス ID は好きな値を指定し、その他は変更なしで OK です。
Image from Gyazo

M5ATOM Liteのプログラム

サンプルコード

前記事(M5ATOM LiteでHTTP POSTするシンプルなサンプルコード)で作成したコードを変更していきます。
testという文字列を送信してみます。

arduino-esp32HTTPClient.hを見ると、beginメソッドにURLルート証明書を渡せば良さそうです。

https://github.com/espressif/arduino-esp32/blob/dd513df124bd39736e96c2b03b23dd48bdae0c97/libraries/HTTPClient/src/HTTPClient.h#L160

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() { /* 起動時のみ送信するため、ループでは何もしない。*/ }

実際に利用する場合は、Wi-Fi の設定と 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 トークンは PC で発行してから M5ATOM Lite に書き込んでいるので、時間が経つと期限が切れてしまいます。
マイコン上で SAS トークンを発行する方法も調べていきます。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3