Skip to content

Instantly share code, notes, and snippets.

@Mooan
Last active February 18, 2024 13:15
Show Gist options
  • Save Mooan/18241d1916d86d895515c5b820252c1f to your computer and use it in GitHub Desktop.
Save Mooan/18241d1916d86d895515c5b820252c1f to your computer and use it in GitHub Desktop.
ESP Web Toolsを使用したM5ATOM LiteファームウェアのWEB配信と問題解決策

ESP Web Toolsを使用したM5ATOM LiteファームウェアのWEB配信と問題解決策

概要

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の使い方

  • 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つの対策について、具体的な対策を説明する.

対策1: バイナリを一つに結合

  • これは、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
  • 上記のバイナリを配信ページから配信するようにした.

対策2: ESP Web Toolsにハードコードされているシリアルのボーレート設定を変更

$ npm i
$ npm exec -- tsc
$ npm exec -- rollup -c
  • 上記の出力結果を、配信用のindex.htmlから参照するように変更した.

結果

  • 書き込みができるようになった.
    • 書き込み速度が遅い感じがするが、WEBで配信できるので、ファイルの受け渡しが楽になった.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment