ESP32でAmazonFreeRTOSを使う方法(Windows版)


はじめに

FreeRTOSをやりたいのに本や記事が無さすぎる!と嘆いているうちに、Interface4月号にて特集されました。

ただ残念なことに、FreeRTOSデモアプリを起動するまでの手順が、(紙面の都合上?)重要なところをすっ飛ばされており、本だけを見て設定するのは不可能に近いと思われます。GWを犠牲にして環境構築~実行までを行ったので、苦難の道程を共有します。

参考サイト①:https://qiita.com/hisashij/items/2211183a682e4517f7c9
参考サイト②:https://www.youtube.com/watch?v=9fuxXNn0grU (Interface4月号の実演動画)

環境

マイコン:ESP32-DevKitC
環境:Windows10 Home

方法

ESP-IDFのダウンロード

① 下記サイトからESP-IDFをインストールする
https://dl.espressif.com/dl/esp-idf-tools-setup-1.2.exe

FreeRTOSソフトウェアのインストール

① AWSコンソールにログインし、FreeRTOSを選択する
https://aws.amazon.com/jp/
※事前にAWSのアカウントを作成している必要があります。

②AWSマネジメントコンソールの検索バーに「freertos」と入力し、検索結果の「FreeRTOS」にアクセスする。

③FreeRTOS デバイスソフトウェアから「esp32-devkit」と入力。
Connect to AWS IoT - ESP32-DevKitC の行の「クイック接続」を選択する。

④「開始方法」を選択する。
⑤ Connect to AWS IoT - ESP32-DevKitC 画面
FreeRTOSバージョンは最新のままでOK。
ハードウェアプラットフォームの項目から「詳細情報の表示」を選択する

「別のライブラリを追加します」を選択し、追加可能なライブラリを全て追加しておく。※Interface4月号に載っているサンプルプログラム(EX3)はライブラリを追加しないと動かないので注意。

⑥ 作成してダウンロードする

AWS-IoTのモノづくり

下記サイトの「AWS IoTでポリシーを作成」~「AWS IoTのエンドポイントを取得」までを行う。
https://dev.classmethod.jp/articles/raspberry-pi-aws-iot-l-chika/

FreeRTOSコードの修正

①Wi-Fiの登録
...\FreeRTOS\demos\include\aws_clientcredential.h

aws_clientcredential.h
#define clientcredentialWIFI_SSID                    "xxxxx"
#define clientcredentialWIFI_PASSWORD                "xxxxx"

②FreeRTOSの下記ファイルを修正し、AWS Iotの情報を紐付ける
下記フォルダに、AWS Iot作成時にダウンロードした『Credentials.zip』内の「aws_clientcredential.h」「aws_clientcredential_keys.h」を上書きコピー。

...\FreeRTOS\demos\include

ビルド

ソフトを入れて、環境をいよいよビルドして実行する。

①ビルドファイルの生成
コマンドプロンプトでFreeRTOSフォルダに入る。

cmake -DVENDOR=espressif -DBOARD=esp32_devkitc -DCOMPILER=xtensa-esp32 -GNinja -S . -B build

実行結果

このようなメッセージが表示されれば成功。
buildというフォルダが生成される。

②ビルドして書き込む
PCとESP32を接続した状態で下記コマンドを実行

cmake --build build
cmake --build build --target flash

③モニターする

python vendors\espressif\esp-idf\tools\idf.py monitor

サンプルを確認する

上記手順の③まで行った状態で、AWSIoTを開く。
①AWSIoT > テスト > MQTT テストクライアント を開く
②「トピックをサブスクライブする」のメニューから、トピックのフィルターとして「#」と入力する。
③サブスクリプションの画面に、指定したチャンネル名と指定したメッセージ(デフォルトだと「Hello World」)が表示されたら成功。