ADU: ESP32のファームウェアアップデート
はじめに
Azure Device Update for IoT HubがサポートしているプラットフォームはDebianやUbuntuといったLinuxですが、ESP32のファームウェアをアップデートすることもできるようです。サンプルがGitHubにあるので、実際にやってみます。
1. 準備
1-1. ソフトウェアのインストール
PCに下記ソフトウェアをインストールします。
- Git
いまさら説明する必要は無いでしょう。Gitです。 - ESP-IDF
公式(Espressif)が提供しているESPのフレームワークです。ファームウェアのビルドに使います。
Visual Studio Codeと併用するとインストール、セットアップが楽にできます。Visual Studio CodeにESP-IDF Visual Studio Code Extensionを追加して、ESP-IDF: EXPLORERのConfigure ESP-IDF Extensionでv4.4.3のESP-IDFをダウンロード、選択します。
- Azure CLI
Azureのコマンドラインツールです。次のAzure IoT extension for Azure CLIを使うために入れます。
インストール方法は公式ドキュメントのAzure CLIをインストールにあります。既にインストールしてあるときはaz upgrade
を実行して最新バージョンにアップデートします。 - Azure IoT extension for Azure CLI
Azure IoTのコマンドラインツールです。ADUアップデートファイルの作成に使います。
az extension add --name azure-iot
を実行してAzure CLIにAzure IoT Extensionを追加します。既にインストールしてあるときはaz extension update --name azure-iot
を実行して最新バージョンにアップデートします。
1-2. デバイスを登録
デバイスをAzure IoT Hubに登録します。→これ
1-3. ファームウェアをダウンロード
サンプルのESP32ファームウェアをGitHubからダウンロードします。サブモジュールが含まれているので--recurse-submodules
を忘れずに指定します。また、フォルダはできるだけ短い名前のところにダウンロードしてください。長いとビルドでエラーが発生しますので。ここではC:\adu-esp
にしました。
git clone --depth 1 --recurse-submodules https://github.com/Azure-Samples/iot-middleware-freertos-samples.git C:\adu-esp
2. 初期ファームウェア
初期ファームウェアをビルドしてESP32へ書き込み、実行を確認します。
2-1. ファームウェアに接続情報を設定
ファームウェアにWi-Fi SSIDとWi-Fi Password、Azure IoT Hub接続情報を設定します。
まず、Visual Studio Codeでフォルダ\demos\projects\ESPRESSIF\adu
を開きます。
ESP-IDF: EXPLORERのSDK Configuration Editorをクリックした後、Azure IoT middleware for FreeRTOS Sample ConfigurationにあるWiFi SSID
とWiFi Password
、Azure IoT middleware for FreeRTOS Main Task ConfigurationにあるAzure IoT Hub FQDN
とAzure IoT Device ID
、Azure IoT Device Symmetric Key
を入力して、Saveをクリックします。
- WiFi SSID
ESP32が接続するWi-FiアクセスポイントのSSID。 - WiFi Password
ESP32が接続するWi-Fiアクセスポイントのパスワード。 - Azure IoT Hub FQDN
Azure IoT Hubのサーバー名。 - Azure IoT Device ID
Azure IoT Hubに登録したデバイスのデバイスID。 - Azure IoT Device Symmetric Key
Azure IoT Hubに登録したデバイスの主キー。
2-2. ファームウェアをビルド
サンプルのESP32ファームウェアをビルドします。
ESP-IDF: EXPLORERのBuildをクリックします。すると、わわわわーーーっとコンパイルされます。最後にメモリ使用量が表示されれば完了です。
2-3. ファームウェアをデバイスに書き込む
ビルドしたファームウェアをESP32に書き込みます。
が、ESP32開発ボードはどれが使えるのかよくわかりません。手元にあるESP32-DevKitC-32Eでやってみます。
まず、ESP32開発ボードをPCとUSB接続してから、ESP-IDF: EXPLORERのSelect Serial Portをクリックして、接続しているCOMポート番号を選択します。
次に、ESP-IDF: EXPLORERのFlashをクリックします。すると、デバイスにファームウェアを書き込みます。
2-4. デバイスの実行状況を確認
ESP-IDF: EXPLORERのMonitorをクリックすると、デバイスの実行状況を確認することができます。
どんどんスクロールしてしまうので確認し難いのですが「ADU SAMPLE Version: 1.0」と表示されて、
その後に「Successfully sent telemetry message」が定期的に表示されていれば正常です。
また、Azure IoT Hubのデバイスにあるデバイスツインでも、デバイスとAzure IoT Hubが通信できたことを確認することができます。
デバイスツインのReported Propertiesに「deviceUpdate」の項目が書かれていれば、正しく通信ができています。
3. ファームウェアアップデート
いよいよファームウェアアップデートですね。
大きく分けて、必要なファイルを用意するPCでの作業とAzure Device Update for IoT Hubから配布するAzureでの作業があります。
3-1. ファームウェアのバージョンを変更
ファームウェアのバージョンはハードコードされていますので、そこを書き換えます。
Visual Studio Codeでフォルダconfig\demo_config.h
を開いて、democonfigADU_UPDATE_VERSION
の値を"1.1"
に書き換えます。
3-2. ファームウェアをビルド
ESP-IDF: EXPLORERのBuildをクリックします。
3-3. ADUアップデートファイルを作成
ADUのアップデートファイルを作成します。
先ほどのビルドで出来上がったazure_iot_freertos_esp32.bin
がESP32のバイナリイメージです。これを名前変更しておきます。
そして、PowerShellで、PowerShellで、PowerShellで!!!(コマンドプロンプトで実行しようとするとエラーになります)、Azure IoT extension for Azure CLIのコマンドを実行すると、ADUのアップデートマニフェストが作成されます。WARNINGが表示されますが問題ありません。
cd C:\adu-esp\demos\projects\ESPRESSIF\adu\build
move azure_iot_freertos_esp32.bin azure_iot_freertos_esp32-v1.1.bin
az iot du update init v5 --update-provider Contoso --update-name ESP32-Azure-IoT-Kit --update-version 1.1 --compat deviceModel=ESP32-Azure-IoT-Kit deviceManufacturer=ESPRESSIF --step handler=microsoft/swupdate:1 properties='{\"installedCriteria\":\"1.1\"}' --file path=./azure_iot_freertos_esp32-v1.1.bin > ./Contoso.ESP32-Azure-IoT-Kit.1.1.importmanifest.json
出来上がったADUアップデートに必要なファイルは次の2つです。
azure_iot_freertos_esp32-v1.1.bin
Contoso.ESP32-Azure-IoT-Kit.1.1.importmanifest.json
3-4. インポート
上の2ファイルをAzure Device Update for IoT Hubにインポートします。
操作はこちらを参考に。
3-5. デプロイ
Azure Device Update for IoT Hubからデバイスへデプロイします。
操作はこちらを参考に。
ESP-IDF: EXPLORERのMonitorを見ると、Versionが1.0から1.1に更新されたことがわかります。
まとめ
- Azure Device Update for IoT HubでESP32のファームウェアアップデートできた。
- ESP-IDFの環境構築はVisual Studio Codeの拡張機能を使うと楽でした。
- アップデートマニフェストはAzure CLIで生成することができた。(手作りしなくても良い)
Discussion