Amazon FreeRTOSを触ってみたくて、手元にあったM5StickC Plusにインストールしようとしたのですが、WEBや書籍の情報通りやったらバージョン依存等でかなりハマったので、最終的に纏めた手順を残しておきます。
作業は全てブラウザ(AWS Management Console)とコマンドプロンプトで行います。
同じ手順を手元の ESP-WROOM-32
でも動かして動作確認済みです。
- IDFの準備(は不要)
- AWS IoTの設定
- ダウンロードファイルの確認
- FreeRTOSへ認証情報の設定
- ESP-IDF等の関連ツールのインストール
- FreeRTOSのビルド準備
- M5StickC Plusに書き込み
- 動作確認
- 掃除
- 【補足】GihubからのAmazon FreeRTOSの取得
- 参考情報
IDFの準備(は不要)
まず最初にIDF等のツールはFreeRTOSの内部ツールでインストールできるので事前作業不要です。
最初のESP32用の環境がインストールされていたお陰で結構ハマりました。
IDF_PATH
をしっかり設定すれば問題無く動くとは思いますが、もしFreeRTOSのために何かインストールしようとしているのなら、この記事の手順を使ってみても良いかもしれません。
最低限 Python3.7以上とGitが入っていれば動くはずです。
The installer can also download and run installers for Python 3.7 and Git For Windows if they are not already installed on the computer.
AWS IoTの設定
接続設定には tools\aws_config_quick_start\SetupAWS.py
を使う方法もありますが、AWS Management Consoleから接続情報を取得する方法を取ります。
AWS IoTから以下のメニューを選択します。
Connect to AWS IoT - ESP32-DevKitC
の 「クイック接続」を選択します。
ウィザードで設定される一覧が出ます。確認して「開始方法」をクリックします。
適当な名前を設定して「作成してダウンロードします」を選択します。
以下のようにFreeRTOSのダウンロードされるので保存しておきます。
AWS IoT Coreの「モノ(Thing)」の名前を設定します。
認証情報のダウンロード画面になります。こちらもダウンロードして保存しておきます。
この説明にある作業は後で実施します。
「テスト」ボタンをクリックするとMQTTのサブスクライブの画面になりますが、無視して完了とします。
ダウンロードファイルの確認
FreeRTOSのZIPファイル freertos-xxxxxx.zip
と Credentials.zip
を解凍します。
FreeRTOS\ Credential\
FreeRTOSへ認証情報の設定
先程ダウンロードした認証情報のZIPファイルを解凍すると以下のようになっていると思います。
この中の以下の2ファイルに証明書情報等が記載されています。
- aws_clientcredential.h
- aws_clientcredential_keys.h
Wifiの接続情報を aws_clientcredential.h
の以下の部分に設定します。
/* * @brief Wi-Fi network to join. * * @todo If you are using Wi-Fi, set this to your network name. */ #define clientcredentialWIFI_SSID "YOUR_WIFI_SSID" /* * @brief Password needed to join Wi-Fi network. * * @todo If you are using WPA, set this to your network password. */ #define clientcredentialWIFI_PASSWORD "YOUR_WIFI_PASSWORD"
Wifiの接続情報入力して保存したら、以下のように demos\include
の同名のファイルを上書きコピーします。
これでデモ用の認証情報の設定ができました。
ESP-IDF等の関連ツールのインストール
まずビルド等に利用する開発ツールである、ESP-IDFをインストールします。
先程取得したリポジトリのディレクトリに入ります。
cd FreeRTOS
vendors\espressif\es-idf
の下に各種ツールがあります。
まずは install.bat
を実行して関連ツールをダウンロードしてインスト-ルをします。 %userprofile%\.espressif
にインストールされます。
Githubから取得したAmazon FreeRTOSの場合はIDFのGit情報からバージョンを取得しますが、AWSから取得したリポジトリはGitでは無いので、自分でバージョンを指定してあげる必要があります。
以下のように version.txt
をIDFのトップディレクトリに配置することで、インストーラーにバージョンを指示できます。
echo v4.2 > vendors\espressif\esp-idf\version.txt vendors\espressif\esp-idf\install.bat
完了すると以下のようなメッセージが表示されます。
All done! You can now run: export.bat
インストール後に同ディレクトリにある export.bat
を実行すると関連する環境変数などを設定してくれます。
vendors\espressif\esp-idf\export.bat
その後 idf.py
が打てることを確認します。
FreeRTOSのビルド準備
準備ができたのでビルドの準備に入ります。
取得したリポジトリのディレクトリに入ります。
cd FreeRTOS
以下のコマンドでビルドの準備が走ります。(念のため export.bat
を打っています)
vendors\espressif\esp-idf\export.bat cmake -DVENDOR=espressif -DBOARD=esp32_wrover_kit -DCOMPILER=xtensa-esp32 -GNinja -S . -B build
M5StickC Plusに書き込み
FreeRTOSをビルドしてM5StickC Plusに書き込んでいきます。
Windowsの場合、USBに接続したESP32デバイスのCOMポートはデバイスマネージャで確認します。今回はCOM5でした。
念のため既存のイメージを削除します。
idf.py erase_flash -p COM5 -b 115200
イメージを書き込みます。
idf.py flash -p COM5 -B build -b 115200
完了しました。
... Wrote 1065936 bytes (662438 compressed) at 0x00020000 in 59.5 seconds (effective 143.3 kbit/s)... Hash of data verified. Leaving... Hard resetting via RTS pin... Done
上記コマンドで -b 115200
と転送速度のBaudRateを設定していますが、これはM5StickCがサポートしているBaudRateに合わせています。
Baud rate supported by M5StickC: 1200 ~115200, 250K, 500K, 750K, 1500K
デフォルトの設定だと以下のようなエラーが発生します。
Changing baud rate to 460800 Changed. Configuring flash size... A fatal error occurred: Timed out waiting for packet header esptool.py failed with exit code 2
動作確認
書き込めたので電源ONにしてみます。
idf.py monitor
で状況をモニタできます。エラーが出てないか確認します。
idf.py monitor -p COM5
M5StickCPlus/example/topic
というTOPICにデータをPublishしていることがログから読み取れます。
627 6677 [iot_thread] [INFO] [MQTT_MutualAuth_Demo] [mqtt_demo_mutual_auth.c:553] 628 6677 [iot_thread] Keeping Connection Idle...629 6677 [iot_thread] 630 6877 [iot_thread] [INFO] [MQTT_MutualAuth_Demo] [mqtt_demo_mutual_auth.c:533] 631 6877 [iot_thread] Publish to the MQTT topic M5StickCPlus/example/topic.632 6877 [iot_thread] 633 6878 [iot_thread] [INFO] [MQTT_MutualAuth_Demo] [mqtt_demo_mutual_auth.c:543] 634 6878 [iot_thread] Attempt to receive publish message from broker.635 6878 [iot_thread] 636 6882 [iot_thread] [INFO] [MQTT] [core_mqtt.c:886] 637 6882 [iot_thread] Packet received. ReceivedBytes=2.638 6882 [iot_thread]
AWS IoTで M5StickCPlus/example/topic
のTOPICをサブスクライブしてみます。 Hello World
のメッセージが受信できていることが確認できます。
掃除
設定を掃除していきます。
AWS IoTは裏で色々作成するのですが、以下の4カ所から名前検索したり紐付いた証明書を削除したりして掃除します。
ソフトウェアに関しては、登録時に見た画面の「自分用の設定」タブから設定を削除します。
【補足】GihubからのAmazon FreeRTOSの取得
この手順ではAWSから落としたFreeRTOSを利用しましたが、Githubから取得することも可能です。その場合はバージョン等はよく確認してください。
以下のように、Gitのオプションに --recursive
をつけてサブモジュールも取得します。-b master
でブランチを指定してダウンロードします。ダウンロードには結構時間がかかります。
こちらでも動くことを確認できましたが、バージョンの整合性等で動きが怪しい場合もありました。詰まる度にトラブルシュート時間かかりました・・
git clone https://github.com/aws/amazon-freertos.git --recursive -b master --depth 1
参考情報
Interfaceの2021年4月号が「Amazon×マイコン FreeRTOS入門」と正にの内容です。 FreeRTOS初めての人はこちらの書籍読んでから触ることオススメします。
サポートページに貼ってある動画もとても参考になりますのでオススメです。
ESP-IDF v4.2の方を確認します。