ESP Web Toolsを使って、トラップにはまった際の作業メモ.
ESP Web Toolsを使ったM5ATOM LiteファームウェアのWEB配信方法と、「Timed out waiting for packet header」というエラー解決策を解説。バイナリ統合とボーレート調整で書き込みに成功.
- M5ATOM LiteのファームウェアをESP Web Toolsを使ってWEBで配信しようとした.
- README.mdを参考にWEBページに組み込んだところ、ファームウェアの書き込み時に、'Timed out waiting for packet header'が出て困った.
- GithubでIssueを見てみると、同様の問題が報告されており、解決に取り組んだ.
- ESP Web Toolsは、フロントエンドのHTMLにスクリプトとして埋め込むタイプのライブラリである.
<script
type="module"
src="https://unpkg.com/esp-web-tools@10/dist/web/install-button.js?module"
></script>
- 上記をスクリプトとして埋め込むと、
esp-web-install-button
というボタンをHTMLに埋め込むことができる.- これにmanifestファイルとして、配信対象のファームウェアのパスを記載することで、ボタンを押すと、指定されたファームウェアの書き込みが実行される.
<esp-web-install-button
manifest="https://firmware.esphome.io/esp-web-tools/manifest.json"
></esp-web-install-button>
- ファームウェアはPlatformIOでM5Atom向けにArduino環境上で開発した.また、このファームウェアはSPIFFS Filesystemを使う必要があった。
- よって、以下の構造のWEBページを配信する環境を準備した.
public:
- index.html
- manifest.json
- firmware:
- bootloader_dio_40m.bin
- boot_app0.bin
- release_xxx:
- partitions.bin
- firmware.bin
- spiffs.bin
- 上記の環境を作成し、HTTPサーバーから配信、ブラウザからアクセスして動作を確認した.
- 結果としては、書き込みが最後まで完了せず、'Timed out waiting for packet header'というエラーで処理が完了しない問題が発生した.
-
githubのissueを見ると類似の問題として、以下のissueを発見した.
-
まとめると以下の2つの対策を実施すれば、うまくいく場合があるらしい.
- 対策1: バイナリを一つに結合
- 対策2: ESP Web Toolsにハードコードされているシリアルのボーレート設定を変更
-
以降、上記の2つの対策について、具体的な対策を説明する.
- これは、ESP Toolの最近のバージョンには、
merge_bin
というコマンドがあり、これを使って、複数バイナリを一つに統合した. - 以下は、merged-firmware.binというファイルに、複数のバイナリを結合する例.
esptool.exe --chip esp32 merge_bin ^
-o merged-firmware.bin ^
--flash_mode dio ^
--flash_freq 40m ^
--flash_size 4MB ^
0x1000 bootloader_dio_40m.bin ^
0x8000 partitions.bin ^
0xe000 boot_app0.bin ^
0x10000 firmware.bin ^
0x290000 spiffs.bin
- 上記のバイナリを配信ページから配信するようにした.
- ESP Web Toolsの2024年2月18日時点での最新のタグv10.0.1の以下の箇所に、シリアル通信のボーレートがハードコードされている.
- これを修正し、ライブラリとして出力した.以下のコマンドを実行した.
$ npm i
$ npm exec -- tsc
$ npm exec -- rollup -c
- 上記の出力結果を、配信用のindex.htmlから参照するように変更した.
- 書き込みができるようになった.
- 書き込み速度が遅い感じがするが、WEBで配信できるので、ファイルの受け渡しが楽になった.