☁️

ADU: ESP32のファームウェアアップデート

2024/02/18に公開

はじめに

Azure Device Update for IoT HubがサポートしているプラットフォームはDebianやUbuntuといったLinuxですが、ESP32のファームウェアをアップデートすることもできるようです。サンプルがGitHubにあるので、実際にやってみます。

https://github.com/Azure-Samples/iot-middleware-freertos-samples/tree/main/demos/projects/ESPRESSIF/adu

1. 準備

1-1. ソフトウェアのインストール

PCに下記ソフトウェアをインストールします。

  1. Git
    いまさら説明する必要は無いでしょう。Gitです。
  2. 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をダウンロード、選択します。
  3. Azure CLI
    Azureのコマンドラインツールです。次のAzure IoT extension for Azure CLIを使うために入れます。
    インストール方法は公式ドキュメントのAzure CLIをインストールにあります。既にインストールしてあるときはaz upgradeを実行して最新バージョンにアップデートします。
  4. 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 SSIDWiFi Password、Azure IoT middleware for FreeRTOS Main Task ConfigurationにあるAzure IoT Hub FQDNAzure IoT Device IDAzure 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が表示されますが問題ありません。

PowerShell
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に更新されたことがわかります。



https://www.youtube.com/watch?v=nyBpJceoDcE

まとめ

  • Azure Device Update for IoT HubでESP32のファームウェアアップデートできた。
  • ESP-IDFの環境構築はVisual Studio Codeの拡張機能を使うと楽でした。
  • アップデートマニフェストはAzure CLIで生成することができた。(手作りしなくても良い)

参考

Discussion