環境モニタを作ろう with ESP32 DEV Module 〜 No4. 温度と湿度データをクラウドに入れたい!AWS-IoTを使ってみよう #aws-iot

ここまでできたこと

  1. 環境モニタを作ろう with ESP32 DEV Module 〜 No1. まずは動かして見よう
  2. 環境モニタを作ろう with ESP32 DEV Module 〜 No2. 温度湿度センサーをつけよう
  3. 環境モニタを作ろう with ESP32 DEV Module 〜 No3. wifiに接続して、https通信を試してみよう

さて、前回はインターネットに接続までできましたね、

これらのデータをクラウドに格納したいな、ということで、今回はAWS-IoTを使ってみようと思います。

って、あれ、そもそもAWS-IoTってなんですか?ってところをちょっと見ておきましょう。

AWS-IoT

さまざまなデバイスとAWSをセキュアに接続し、デバイスデータに対する処理やアクションを実行したり、デバイスをリモートで制御、管理することができます。

仕組みと用語の理解

公式サイトの概要を読むのと、以下のスライドで確認しておきましょう。

各コンポーネントの説明は以下のスライドの中で詳しく解説されているので、見ておきましょう。

  • デバイスレジストリ
    • デバイスのアイデンティティを管理
  • セキュリティとアイデンティティサービス
    • セキュアな認証と認可を行います
  • デバイスゲートウェイ
    • MQTTとHTTPSを利用したデバイスとのコミュニケーション
  • ルールエンジン
    • 受け取ったメッセージの処理と他のAWSサービスとの連携
  • デバイスシャドウ
    • デバイスステータスの管理

AWS-IoTを試してみる

上記のプレゼンにあった手順通りにやって見ましょう。

デバイスの作成(モノの登録)

AWS のマネジメントコンソールに接続して、AWS-IoTを開きましょう。

さて、ステップ1はモノの登録です。

証明書の作成

モノとAWSをセキュアに接続するために証明書を作成します。

簡単に1-Click証明書を作成します。

次の画面でダウンロードできるので、忘れずに4ファイルダウンロードしましょう

  • このモノの証明書
  • パブリックキー
  • プライベートキー
  • AWS-IoTのルートCA

ポリシーの作成

デバイスに与える権限のポリシーを作成します。

AWS-IoTポリシー

証明書にデバイスとポリシーを割り当てる

先ほど作成した証明書を右クリックすると、メニューが出てきます

「ポリシーのアタッチ」で先ほど作成したポリシーをアタッチします

「モノのアタッチ」で先ほど作成したモノをアタッチします

さて、これで、AWS-IoT側の準備は完了しました!

データのPublish & Subscribe

今回は、お試しなので、MacBookからMQTTで、Publish&Subscribeしてみましょう。
mosquitto のクライアントを使うので、インストールしておきましょう。

MQTTエンドポイントの確認

MQTTのエンドポイントの確認をします。

$ aws iot describe-endpoint
{
    "endpointAddress": "xxxxxxxxxxxxxx.iot.ap-northeast-1.amazonaws.com"
}

Publish

mosquitto_pubコマンドで、Publishします

各種パラメータは以下の通りです。

  • –cafile ルートCAファイル
  • –key プライベートキーのファイル
  • -h MQTTエンドポイント
  • -q QoS レベル
  • -d デバッグオプション
  • -t トピック
  • -m ペイロード
mosquitto_pub --cafile rootca.pem \
--cert certificate.pem.crt \
--key private.pem.key \
-h xxxxxxxxxxxxxx.iot.ap-northeast-1.amazonaws.com \
-p 8883 -q 1 -d -t 'test/topic' \
-m '{"temparature:26.25, "humidity":23.5}'

Subscribe

mosquitto_subコマンドでSubscribeします

mosquitto_sub --cafile rootca.pem   \
--cert certificate.pem.crt  \
--key private.pem.key  \
-h xxxxxxxxxxxxxx.iot.ap-northeast-1.amazonaws.com  \
-p 8883 -q 1 -d -t 'test/topic'

Client mosqsub/22971-bohelabo. received PUBLISH (d0, q1, r0, m1, 'test/topic', ... (37 bytes))
Client mosqsub/22971-bohelabo. sending PUBACK (Mid: 1)
{"temparature:26.25, "humidity":23.5}
Client mosqsub/22971-bohelabo. received PUBLISH (d0, q1, r0, m1, 'test/topic', ... (37 bytes))
Client mosqsub/22971-bohelabo. sending PUBACK (Mid: 1)
{"temparature:26.25, "humidity":23.5}

Publishされたデータが届いて入ればOKです。

さて、MQTT 通信できました!

次は、これをESP32からやって見ましょう!