見出し画像

ESP32 Wi-Fi経由のアプリ更新 OTA関連の情報を整理


  • ようやっと、ESP32において、Wi-Fi経由でファームウェアを更新する機能(OTA機能)を調べ始める

  • 本当は別に作りたいモノがあるのだが、それを作るのにOTA機能が欲しい

  • いくつか方法があるようなので、今回は、情報の整理をしてみようと思う


ArduinoOTA

  • 「Arduino library to update the sketch over the network」とある

  • 上記の説明通り、Arduino IDEで、スケッチのアップデートをネットワークで行うライブラリ

  • Arduino IDEのUIからファームウェアをネットワーク経由で更新できそう

  • インターネットの情報だと、PlatformIOでも動いていそう

  • 作者はJuraj Andrassy氏

    • プロのソフトウェアエンジニアだが、GitHubのレポジトリのほとんどが趣味関連のレポジトリ、とある(※1)

  • GitHubにESP32にも対応していると書かれている(ESP32以外のMCUにも対応している)

  • SPIFFSにも対応と書かれている(しかし制限がありそう ※2)

  • arduinoOTA というCLI(コマンド)が用意されていそうで、独自に開発環境に組み込むのも容易そう

  • どちらかというと開発時のアップデート用途だと思われる

  • PIOでのダウンロード数:10,183

    • Arduino IDEで使っている人が多いので、下記のElegantOTAより倍くらい少ないのだと推測しているが、どうだろうか

  • 最終更新日:2024-01-19T19:30:06Z

  • ラインセンスに注意しないといけない(詳しくはGitHubを参照ください)

※1

I am a professional software engineer, but most of the repositories here are related to my hobby Arduino.

https://github.com/JAndrassy 

※2

This library supports SPIFFS upload to esp8266 and esp32,
but the IDE plugins have the network upload tool hardcoded to espota.
It can't be changed in configuration.

https://github.com/JAndrassy/ArduinoOTA


ElegantOTA

  • ブラウザからファームウェアをアップロードして、更新できそう

  • デザイン面も考えられていそう

  • 作者はAffero General氏

  • ESP32に対応している

  • ライセンスに注意する必要がありそう

  • 最終更新日:2024-10-11T16:28:41Z

  • PIOでのダウンロード数:19,545

Over-the-air update library for wireless microcontrollers
ElegantOTA works on the following microcontrollers/boards:
 - ESP8266
 - ESP32
 - RP2040 (with WiFi) (Example: Raspberry Pi Pico W)

https://github.com/ayushsharma82/ElegantOTA


ESP-IDF Over The Air Updates

  • ESP32の製造元のEspressifが提供するライブラリ(ESP-IDF)のOTA機能

  • ロールバック機能などがあり、エンドユーザーがファームウェアを更新する用途にも使えそう

  • インターネットから新しいファームウェアをダウンロードするという構成が例として示されている

    • ESP-IDFに、URLを設定する項目があることから、ダウンロードする構成を主に想定していそう

HTTPダウンロード独自実装版 (筆者が勝手に命名)

  • native_ota_example という名前のサンプルにあるやり方

  • 何がネイティブか?「 HTTP関連の処理をネイティブのHTTP APIを使う」

    • esp_http_client_* (esp_http_client_openなど)という関数を使う

  • ESP32がHTTPクライアントになって、ファームウェアをHTTPサーバーからダウンロードする構成

簡単ダウンロード版 (筆者が勝手に命名)

  • simple_ota_example という名前のサンプルにあるやり方

  • 何がシンプルか? 「OTA専用のシンプルなHTTP APIを利用する(ネイティブなHTTP APIを使わない)」

    • esp_https_ota()という関数を使う

  • ESP32がHTTPクライアントになって、ファームウェアをHTTPサーバーからダウンロードする構成

  • HTTPS用の証明書のことを考えると、億劫になりがち

    • EspressifのGitHubにあるHTTPSのサーバーを立てるPythonスクリプトを見るだけで、億劫になる

  • esp_https_ota()という関数名だが、HTTPでも動作させることができそう

    • (テスト用途でのみ、と記述があるが)


感想

  • ElegantOTAが、筆者求めているものだが、ライセンスが合わない

  • 実装はそこまで大変ではなさそうなので、実装してみようと思う

  • ダウンロードのサンプルにある方法と同じように、アップロード中、その都、フラッシュに書けばようさうだ

  • 現状は、1Mbytes以内のファームウェアを考えている

  • Freenoveのボードなどは、8MBytesのPSRAMがあるので、ファームウェアのバイトコードのすべてを一度、メモリにキャッシュして、その後、書き込むこともできそう(都度、書き込みせず、一挙に書き込む)

  • 都度、フラッシュに書く方式だと、ロールバックを考えないといけない(書いている途中で、ネットワークが途切れたら、ロールバックする必要がある)

  • ファームウェアが250KBytes以内くらいならば、内蔵のSRAMでもキャッシュできるかもしれない



  • PSRAMを8MBytes積んだ、Freenoveのボードが売り切れになってしまった

  • よい商品だと感じ&サポートも丁寧だったので、おすすめしてきた

  • 嬉しい反面、買えないのは困る複雑な心境である

    • 在庫が復活してくれることを願う!



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