企画部(irodori)と共同したクリスマス企画で、イルミネーションの点灯アニメーションを制御するマイコンプログラムのリポジトリ。
関連レポジトリ
- xmas-api Twitterの監視と点灯ルール配信
- xmas-frontend ルール設定を行うためのフロントエンド
- xmas2022-micon イルミネーション点灯制御
2021年版:xmas2021-micon
担当:@Hiroya-W
- Espressif ESP32 Dev Module
- 256dpi/MQTT@^2.5.0
- bblanchon/ArduinoJson@^6.19.4
lib/secrets/src/内にexampleファイルを配置しているので、それぞれを以下のようにファイル名を変更します。
aws.cpp.example->aws.cppwifi_configs.cpp.example->wifi_configs.cpp
lib/secrets/src/aws.cpp に定義します。
const host_info awsIoTInfoに設定します。AWS IoT CoreエンドポイントについてはAWS IoT デバイスデータとサービスエンドポイントを参考にしてください。
OTA用のfirmwareを取得する際に利用するS3バケットへのURLを、const host_info awsS3Infoに設定します。
AWS S3バケットへのアクセス方法については、バケットへのアクセス方法を参考にしてください。
取得するfirmwareへのURLは以下のようになります。THINGNAMEは# モノの名前で設定した文字列となります。
https://<awsS3Info.endpoint>:<awsS3Info.port>/<THINGNAME>/firmware.bin
Topic名は設定する必要はありません。
Topic名は、src/main.cppのvoid setup()関数で# モノの名前で定義した文字列利用して、以下のように初期化されます。
deviceShadowPublishTopic:$aws/things/<THINGNAME>/shadow/updatedeviceShadowSubscribeTopic:$aws/things/<THINGNAME>/shadow/update/deltaotaReplyPublishTopic:<THINGNAME>/OTA/replyotaRequestSubscribeTopic:<THINGNAME>/OTA/request
const char THINGNAME[]に設定します。AWS IoT Coreで登録したモノの名前をと一致しておく必要があります。
接続するために、以下の3つを設定しておく必要があります。これらはモノを登録した際に取得することが出来ます。 詳しくはAWS IoT のモノ、証明書、およびプライベートキーを作成するを参照してください。
AWS_CERT_CA: AmazonルートCA証明書AWS_CERT_CRT: デバイス証明書AWS_CERT_PRIVATE: プライベートキーファイル
Wi-Fiの接続情報はlib/secrets/src/wifi_configs.cppに定義します。
eduroamに接続する場合は以下の5つを設定します。
WIFI_SSID:"eduroam"WIFI_PASSWORD:""EAP_IDENTITY: 所属機関でのユーザID- 別の所属のeduroamに接続する場合は
所属機関でのユーザID@所属機関のドメイン名とする必要があります。
- 別の所属のeduroamに接続する場合は
EAP_USERNAME: 通常EAP_IDENTITYと同じEAP_PASSWORD: 所属機関で利用しているパスワード
eduroam以外に接続する場合は以下の2つを設定します。
WIFI_SSID: 接続したいSSIDWIFI_PASSWORD: SSIDへ接続するためのパスワード
AWS IoT CoreのDevice Shadowの機能を利用して、IoTデバイスへ通知する。
例えば、モノ<THING_NAME>の点灯パターン(数値)を<PATTERN_NUMBER>に変更する場合は、
- トピック名:
$aws/things/<THING_NAME>/shadow/update - payload:
{ "state": { "desired": { "patternId": <PATTERN_NUMBER> } } }
にpayloadをPublishする。
aws iot-data publish --topic "\$aws/things/<THING_NAME>/shadow/update" --cli-binary-format raw-in-base64-out --payload '{"state": { "desired": { "patternId": <PATTERN_NUMBER> } } }'AWS S3にバイナリを配置し、IoTデバイスへ通知することでOTAが実行される。
- S3にバイナリをアップロードする。
aws s3 cp .pio/build/<ENVIRONMENT>/firmware.bin s3://<BUCKET_NAME>/<THING_NAME>/- IoTデバイスへ通知する。
- トピック名:
<THING_NAME>/OTA/request - payload:
{ "url": "https://<BUCKET_NAME>.s3.<REGION>.amazonaws.com/<BUCKET_NAME>/firmware.bin" }
にpayloadをPublishする。
aws iot-data publish --topic "<THING_NAME>/OTA/request" --cli-binary-format raw-in-base64-out --payload '{"url": "https://<BUCKET_NAME>.s3.<REGION>.amazonaws.com/<BUCKET_NAME>/firmware.bin"}'- IoTデバイスがリクエストを受け付けた場合、以下のメッセージを受け取る。
- トピック名:
<THING_NAME>/OTA/reply - payload:
{ "state": "Received" }