ここまでできたこと
- 環境モニタを作ろう with ESP32 DEV Module 〜 No1. まずは動かして見よう
- 環境モニタを作ろう with ESP32 DEV Module 〜 No2. 温度湿度センサーをつけよう
- 環境モニタを作ろう 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側の準備は完了しました!
データの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からやって見ましょう!