現時点の情報です。最新情報はM5StickC非公式日本語リファレンスを確認してみてください。
概要
OTAに関するスケッチ例がいろんな場所にあったので、すべて確認してみました。大きく分けてespota.pyを利用するArduinoOTA方式と、ファイルをフラッシュに書き込むUpdate方式がありました。
方式解説
ArduinoOTA
ESP32側は3232ポートで待ち受けており、espota.pyなどを利用してファイルを転送します。転送時にはパスワードか、パスワードハッシュで認証を行うことが可能です。
一般的にインターネット経由での更新はできませんが、Arduino IDEからはシリアルポートの変わりにESP32のIPアドレスを選択することで、プログラム更新ができます。
デメリットとしてはArduino IDE側の制約により、シリアル接続ができなくなるので、シリアルモニタが利用できません。Arduino IDE以外のシリアルエディタなどで、シリアル出力を表示することは可能です。
Update
フラッシュにプログラムを書き込むことで更新します。プログラムファイルはブラウザからアップロードしたり、SDからロードしたり、Webサーバーからダウンロードすることが可能です。
インターネット上のサーバーに最新バージョンを置いておき、更新するような用途で利用しやすい方式です。
Arduino IDEからはプログラムを更新することができませんので、シリアル経由で更新するか、別途更新ツールを利用して更新する必要があります。
スケッチ例一覧
カテゴリ | スケッチ名 | 方式 | 概要 |
ArduinoOTA | BasicOTA | ArduinoOTA.h | 一般的なOTA(espota.py利用) |
WebServer | HttpBasicAuth | ArduinoOTA.h | OTA+標準的なBASIC認証 |
WebServer | HttpAdvancedAuth | ArduinoOTA.h | OTA+ダイアログ文字列指定BASIC認証 |
ArduinoOTA | OTAWebUpdater | Update.h | ブラウザからBINファイルアップロード更新 |
WebServer | WebUpdate | Update.h | ログイン画面がない単純なOTAWebUpdater |
Update | AWS_S3_OTA_Update | Update.h | HTTPからのBINファイルダウンロード更新 |
Update | SD_Update | Update.h | SDカードからの更新 |
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で開発したほうが良さそうです。
コメント