ESP32のOTA方式

現時点の情報です。最新情報はM5StickC非公式日本語リファレンスを確認してみてください。

概要

OTAに関するスケッチ例がいろんな場所にあったので、すべて確認してみました。大きく分けてespota.pyを利用するArduinoOTA方式と、ファイルをフラッシュに書き込むUpdate方式がありました。

方式解説

ArduinoOTA

ESP32側は3232ポートで待ち受けており、espota.pyなどを利用してファイルを転送します。転送時にはパスワードか、パスワードハッシュで認証を行うことが可能です。

一般的にインターネット経由での更新はできませんが、Arduino IDEからはシリアルポートの変わりにESP32のIPアドレスを選択することで、プログラム更新ができます。

デメリットとしてはArduino IDE側の制約により、シリアル接続ができなくなるので、シリアルモニタが利用できません。Arduino IDE以外のシリアルエディタなどで、シリアル出力を表示することは可能です。

Update

フラッシュにプログラムを書き込むことで更新します。プログラムファイルはブラウザからアップロードしたり、SDからロードしたり、Webサーバーからダウンロードすることが可能です。

インターネット上のサーバーに最新バージョンを置いておき、更新するような用途で利用しやすい方式です。

Arduino IDEからはプログラムを更新することができませんので、シリアル経由で更新するか、別途更新ツールを利用して更新する必要があります。

スケッチ例一覧

カテゴリスケッチ名方式概要
ArduinoOTABasicOTAArduinoOTA.h一般的なOTA(espota.py利用)
WebServerHttpBasicAuthArduinoOTA.hOTA+標準的なBASIC認証
WebServerHttpAdvancedAuthArduinoOTA.hOTA+ダイアログ文字列指定BASIC認証
ArduinoOTAOTAWebUpdaterUpdate.hブラウザからBINファイルアップロード更新
WebServerWebUpdateUpdate.hログイン画面がない単純なOTAWebUpdater
UpdateAWS_S3_OTA_UpdateUpdate.hHTTPからのBINファイルダウンロード更新
UpdateSD_UpdateUpdate.hSDカードからの更新

BasicOTA

一番標準的なOTAの例です。ArduinoOTAに対応する場合には、このスケッチをベースに拡張する方法がよいです。

HttpBasicAuth、HttpAdvancedAuth

BASIC認証のサンプルです。OTAも可能ですが、OTAのサンプルとしては考慮しないほうがよいです。

OTAWebUpdater

Update系の標準的なサンプルですが、認証まわりが入っているので少しわかりにくいコードです。ブラウザからファイルアップロードにてプログラム更新をします。認証もJavaScriptで行っているので、ブラウザのソースを見るとパスワードがわかってしまう実装です。

WebUpdate

一番シンプルなUpdateのサンプルです。基本処理はOTAWebUpdaterと変わらないですが、認証がない分スッキリしたコードになっています。

AWS_S3_OTA_Update

AWS S3と名前がついていますがS3に特化していることはなく、単にHTTPからプログラムファイルをダウンロードして、更新します。

HTTPSでのダウンロードを行う場合には、証明書のチェックを行わないか、WiFiClientSecureなどを参考にして、証明書を内蔵する必要があります。

サンプルの名前としては不適切で、単にHTTP_Updateなどの方が良かったと思います。

SD_Update

SDカードからプログラムファイルを読み出し、フラッシュに更新するサンプルです。インターネットに接続していない端末で、プログラムを更新するには便利そうですね。

まとめ

なんとなく名前で避けていたAWS_S3_OTA_Updateが、単なるダウンロードだったので、HTTPダウンロードの検証ができてよかったです。

暗号化した端末でもちょっと試しましたが、OTAで送信するファイルは暗号化前で、転送後に自動暗号化してくれている気がしますが、ブートローダーのファイルチェックが暗号化に対応しておらず、不正イメージ扱いにされてOTA失敗になっているようでした。

ブートローダーに手を入れるのはちょっと面倒なので、暗号化とOTAを組み合わせる場合にはArduinoではなく、ESP-IDFで開発したほうが良さそうです。

コメントする

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)