ESP32 で IoT Core と接続したい

準備したモノ
Freenove ESP32-WROVER CAM
セールだったのか、550 円で購入。バグってる・・DHT22 温度センサ
本体 80円 送料 150円で購入。ジャンプワイヤー メス to メス
メルカリで 20本 400 円のものを購入。

これやってみた
ローカル環境で Pipenv 使ってるのが悪いのか、上手く動かない・・。
以下のようなエラーが出て詰む
Compatibility with CMake < 3.5 has been removed from CMake
ModuleNotFoundError: No module named 'click'
かといって brew で Python インストールしたくない。

神記事
ESP32 がどこでつながっているのか確認するコマンド
ls /dev/cu.*
ビルドして実行
idf.py -p /dev/cu.usbserial-1110 build flash monitor
L チカきた

これ使って、IoT Core と通信してみる。
毎回、事前にコマンド叩かないとパスが通らないのね。
. $HOME/esp-idf/export.sh

ポリシーの作成
Description: "esp32 iot-core"
Resources:
# ポリシー
Policy:
Type: AWS::IoT::Policy
Properties:
PolicyName: "esp32-iot-policy"
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- iot:*
Resource: "*"

モノの作成
過去に書いた記事が役に立った。
### モノを作成
aws iot create-thing --thing-name ESP32
### 証明書を作成( certificateArn は控えておいてください)
aws iot create-keys-and-certificate --set-as-active --certificate-pem-outfile "certificate.pem" --public-key-outfile "publicKey.pem" --private-key-outfile "privateKey.pem"
### 証明書にポリシーをアタッチ
aws iot attach-policy --policy-name esp32-iot-policy --target {certificateArn}
### モノに証明書をアタッチ
aws iot attach-thing-principal --thing-name ESP32 --principal {certificateArn}

手元にある以下ファイルをリネームしつつ、
esp-aws-iot/examples/mqtt/tls_mutual_auth/main/certs に配置
- certificate.pem
- client.crt
- privateKey.pem
- client.key
-
https://www.amazontrust.com/repository/AmazonRootCA1.pem
- root_cert_auth.crt

IDF 6系はサポートしていないみたい。
バージョンを切り替えてみる。
cd ~/esp-idf
git checkout release/v5.0
./install.sh

設定を書き込む
cd ~/esp/esp-aws-iot/examples/mqtt/tls_mutual_auth/
# MQTT 送信先設定のため、 menuconfig を開く
idf.py menuconfig
エラー発生。
どうやら、esp-aws-iot/libraries/backoffAlgorithm/backoffAlgorithm/backoffAlgorithmFilePaths.cmake が存在しない模様・・。
git clone する際に、 --recursive を有効にしなかったからかも?
submodule update で取得できないかやってみる。
git submodule update --init --recursive

再度、 idf.py menuconfig を実行してもエラーになったが、
バージョンが上手く切り替わってないだけだった。
ターミナルを再起動することで、無事開くことができた。
Example Configuration を開き、以下の設定を行う。
- The MQTT client identifier used in this example
- 適当なデバイス名(私は
ESP32
にしました)
- 適当なデバイス名(私は
- Endpoint of the MQTT broker to connect to
- IoT Core Endpoint を設定
- AWS マネコン-> IoT Core -> 接続 ->ドメイン設定 で確認可能
- IoT Core Endpoint を設定
Example Connection Configuration で Wifi 設定を行う。
- WiFi SSID
- 接続先の SSID
- WiFi Password
- 接続先のパスワード

build できない・・
ninja: error: '/Users/aaaaa/esp-idf/components/esp_wifi/lib/esp32/libcoexist.a', needed by 'tls_mutual_auth.elf', missing and no known rule to make it
モジュールが足りないのか、再度更新してみる。
cd ~/esp-idf/
git submodule update --init --recursive
build リトライし、実行できた!
idf.py -p /dev/cu.usbserial-110 build flash monitor

サブスクライブしてみる
AWSマネコン->テスト->MQTT テストクライアント
トピックのフィルターに ESP32/example/topic
を設定する。
Hello World! が受信できていることを確認!!!!

monitor を終了しても、プログラムは動き続けてるので、以下コマンドでメモリに書き込んだ内容を削除
idf.py -p /dev/cu.usbserial-110 erase_flash