Open13

ESP32 で IoT Core と接続したい

ronron

ポリシーの作成

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: "*"
ronron

モノの作成

過去に書いた記事が役に立った。

### モノを作成
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}
ronron

IDF 6系はサポートしていないみたい。
バージョンを切り替えてみる。

cd ~/esp-idf

git checkout release/v5.0

./install.sh
ronron

設定を書き込む

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
ronron

再度、 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 -> 接続 ->ドメイン設定 で確認可能

Example Connection Configuration で Wifi 設定を行う。

  • WiFi SSID
    • 接続先の SSID
  • WiFi Password
    • 接続先のパスワード
ronron

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
ronron

サブスクライブしてみる

AWSマネコン->テスト->MQTT テストクライアント

トピックのフィルターに ESP32/example/topic を設定する。

Hello World! が受信できていることを確認!!!!

ronron

monitor を終了しても、プログラムは動き続けてるので、以下コマンドでメモリに書き込んだ内容を削除

idf.py -p /dev/cu.usbserial-110 erase_flash