見出し画像

【ミーア】ESP32のOTAアップデート機能を実装して、遠隔でファームウェアの更新を行えるようにする。デバイス編

はじめに

ESP32のWiFiモジュールを搭載した猫型ロボット「ミーア」の開発を進めているが、今回は製品をユーザーに提供後に新機能をリリースした際に、開発者がリモートでファームウェアの更新を行えるようにするために、OTAアップデート機能を導入する。

ESP32が提供する2つのOTAアップデート機能

OTA(Over The Air)は、データの送受信を無線通信で行うための技術。OTA機能により、ESP32のファームウェアは無線(Wi-Fiなど)を通じてリモートからアップデートが可能になる。

ESP32のOTA Exampleはこちら。

ESP-IDFは、ESP32のOTAアップデートに対応するために2つの異なる方法(app_update, esp_https_otaコンポーネント)を提供している。

app_updateコンポーネント

  • ESP32の基本的なOTAアップデート機能を提供する。

  • ファームウェアを遠隔で更新するための低レベルのAPIを提供しており、開発者が細かく制御できる。

  • 低レベルのAPIとは、「より詳細な操作が必要で、開発者がアップデートプロセスの各ステップを自分で管理し、カスタマイズする必要があること」を意味する。

  • より柔軟なOTAアプリケーションの実装が可能だが、実装が複雑になる可能性がある。

esp_https_otaコンポーネント

  • HTTPSを通じてOTAアップデートを行うための、高レベルのAPIを提供する。

  • 高レベルのAPIとは、「複雑な処理が多く内部で隠蔽されており、開発者はより簡単な手順でOTAアップデートを実装できること」を意味する。

  • HTTPS通信を利用しているため、セキュリティが強化されており、インターネット経由で安全にファームウェアを更新できる。

  • 簡単に設定できるため、迅速にOTA機能を実装できるが、カスタマイズの自由度は低くなる。

今回は、AWS S3内にOTAアップデート用のファームウェアをアップロードして、HTTPSエンドポイントとするのでesp_https_otaコンポーネントを使用する。

esp_https_otaに関する説明と実装方法はこちら。

OTAによるFirmware Updateの流れ

HTTPSサーバーの設定とファームウェアのアップロード

  • 開発者が新しいファームウェアバージョン(firmware.binなどのバイナリファイル)を作成する。

  • この新しいファームウェアファイルをHTTPSサーバーにアップロードする。

ESP32によるファームウェアのダウンロードとアップデート:

  • ESP32は設定されたタイミング(例えば、デバイスの起動時や定期的なチェック時)にHTTPSサーバーに接続する。

  • HTTPSサーバーから新しいfirmware.binファイルを検出し、ダウンロードを開始する。

  • ダウンロードしたファームウェアはESP32のフラッシュメモリ内のota_0またはota_1パーティションに保存される。ESP32は次回の起動時に新しいファームウェアを使用して起動する

まずは、専用のOTAパーティションテーブルの作成から始める。次にESP-IDFのesp_https_ota APIを使用してファームウェアのダウンロードとアップデートを行うコードを記述する。

OTAパーティションテーブルの作成

ESP32でOTAアップデート用には、少なくとも2つのOTA partition(例: ota_0、ota_1)ga必要。

現状のpartition tableがこちら。

# Name,   Type, SubType, Offset,  Size, Flags
nvs,      data, nvs,      0x09000,   0x5000,
otadata,  data, ota,      0x0e000,   0x2000,
app0,     app,  ota_0,   0x010000, 0x390000,
spiffs,   data, spiffs,  0x400000, 0xC00000

otadata: OTAデータパーティション。OTAアップデートの状態を追跡するのに使用され、どのアプリケーションパーティションがアクティブかを示す。

app0 (ota_0): 最初のアプリケーションパーティション。ここに新しいファームウェアが格納される。

ただし、OTAアップデートをサポートするためには、後述するOTAアップデートのプロセスの観点から、少なくとももう一つのアプリケーションパーティション(ota_1など)が必要。

OTAアップデートのプロセス

  1. 交互にアップデート: ESP32はota_0ota_1を使って交互にアップデートする。例えば、現在ota_0を使っているとすると、次のアップデートでは、新しいファームウェアを、、、

続きはこちらで記載しています。


いいなと思ったら応援しよう!

吉永和貴
よろしければサポートお願いします!いただいたサポートはクリエイターとしての活動費に使わせていただきます!

この記事が参加している募集