ここまででできたこと
- 環境モニタを作ろう with ESP32 DEV Module 〜 No1. まずは動かして見よう
- 環境モニタを作ろう with ESP32 DEV Module 〜 No2. 温度湿度センサーをつけよう
- 環境モニタを作ろう with ESP32 DEV Module 〜 No3. wifiに接続して、https通信を試してみよう
- 環境モニタを作ろう with ESP32 DEV Module 〜 No4. 温度と湿度データをクラウドに入れたい!AWS-IoTを使ってみよう #aws-iot
前回は、MacからMQTTでAWS-IoTにPublishしたのですが、今回はESP32からPublishしてみましょう。
AWS-IoT設定(CLI編)
前回のおさらいも兼ねて、今回はAWS-IoTを使う準備を、AWS-CLIでやってみます。
モノの登録
aws iot create-thing --thing-name "ueda-office" { "thingName": "ueda-office", "thingArn": "arn:aws:iot:ap-northeast-1:xxxxxxxxxxxx:thing/ueda-office" } aws iot list-things { "things": [ { "thingName": "ueda-office", "attributes": {}, "version": 1 } ] }
証明書の作成
aws iot create-keys-and-certificate --set-as-active --public-key-outfile public.pem --private-key-outfile private.pem --certificate-pem-outfile cert.pem { "certificateArn": "arn:aws:iot:ap-northeast-1:xxxxxxxxxxxxx:cert/xxxxxxx", "certificateId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "certificatePem": "-----BEGIN CERTIFICATE-----\nMIIDWTCCAkGgAwIBAgIUXUvBEB1Gr3oFFp+6RD\n-----END CERTIFICATE-----\n", "keyPair": { "PublicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz\n-----END PUBLIC KEY-----\n", "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAzgqh3cIPaIDhClTDcCRm\n-----END RSA PRIVATE KEY-----\n" } }
プライベートキー、パブリックキー、クライアント証明書の3ファイルが出力されます。
ルート証明書は前回取得したものを使います。
ポリシーの作成
vi policy.json { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action":["iot:*"], "Resource": ["*"] }] }
aws iot create-policy --policy-name awsiot-ueda-policy --policy-document file://policy.json { "policyName": "awsiot-ueda-policy", "policyArn": "arn:aws:iot:ap-northeast-1:xxxxxxxxxxx:policy/awsiot-ueda-policy", "policyDocument": "{\n \"Version\": \"2012-10-17\", \n \"Statement\": [{\n \"Effect\": \"Allow\",\n \"Action\":[\"iot:*\"],\n \"Resource\": [\"*\"]\n }]\n}\n", "policyVersionId": "1" }
証明書にモノとポリシーを割り当てる
証明書にポリシーをアタッチ
証明書を作成した時に出力された「certificateArn」と、作成したポリシーの名前を使います
aws iot attach-principal-policy --principal "arn:aws:iot:ap-northeast-1:xxxxxx:cert/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" --policy-name "awsiot-ueda-policy"
証明書にモノをアタッチ
aws iot attach-thing-principal --thing-name "ueda-office" --principal "arn:aws:iot:ap-northeast-1:xxxxxxxx:cert/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
AWS IoTエンドポイントの確認
aws iot describe-endpoint { "endpointAddress": "xxxxxxxxxxx.iot.ap-northeast-1.amazonaws.com" }
準備完了です。
ESP32からPublish
ということで、ちょっと調べてみると、すでに試されて記事にされている方がいたので、そのまま写経させていただきました。
ESP32でAWS IoTに繋いでThing Shadowを弄る – コーヒーサーバは香炉である
なので、詳細はそちらを見ていただいた方が早いかもですが、メモとして残しておきます。
ESP32から使うライブラリ
Wifi接続やHTTPS接続については第3回のところで試しているので、おさらいしておいてください。
ESP32から使うMQTTクライアントとして、PubSubClientを利用します。
PubSubClientはArduinoIDEのLibraryManagerでインストールして、デフォルトのメッセージの長さの定義を変更しておきます。(デフォルトは128バイト)
#define MQTT_MAX_PACKET_SIZE 128 ↓ #define MQTT_MAX_PACKET_SIZE 1024
実装
実装コードについては、以下のサイトで詳しく解説付きなので、こちらを読んでいたければです。
ESP32でAWS IoTに繋いでThing Shadowを弄る – コーヒーサーバは香炉である
コードの中の以下の箇所を書き換えれば動きます。
- WiFi接続情報
- 証明書と秘密鍵
- デバイス名
- AWS IoTエンドポイント
シリアルモニタでも確認できますが、AWSのコンソールのシャドウステータスも見てみると、ステータスの値が更新されていくので、確認することができます。
さて、これで、値をPublishできたので、次回はこれをAWSの他のリソースに格納するようにしてみましょう!