ESP32 に同じバイナリを連続書き込みする方法


はじめに

Arduinoでコンパイルしたバイナリを複数のESP32に連続書き込みする方法です。
毎回,コンパイル→リンク→UPLOADすると時間がかかり過ぎますが,
esptool.exe に引数を書くのは難しく,ある程度,簡単に実現できる方法をメモします。

開発環境

Arduino IDE 2.00(beta.9) on windows10  2021/07/21 確認
IDE のバージョンは問わないと思いますので読み替えてください。

手順

1.Arduino IDE 設定

コンパイルの詳細表示をオンにします。

2.コンパイル→書き込みスクリプトコピー

1回目は通常のコンパイル→UPLOADを実行します。
成功するとUPLOADスクリプトが生成され実行され ESP32に書き込まれるので,
画像の行をクリップボードにコピーします。
ダブルクリックすると1行まるごと選択されますが,かなり長いです。

3.スクリプト編集

(Arduino 1.x 系はここは不要と思います)
スクリプトにダブルクオーテーション(") が含まれるので消去します。
メモ帳を開き,コピーしたスクリプトをペースト。
編集(E)→置換(R) (CTRL+H) により(") を消去します。

4.upload

コマンドプロンプトを開き,3で修正したスクリプトを実行します。
・スタートメニューに"cmd" と入力するとコマンドプロンプト(通称:黒い画面)が現れます。
・コピーしたスクリプトはコマンドプロンプト画面で右クリックすると,いきなり実行されますので,ESP32を接続しておくと良いでしょう。

5.繰り返し

コマンドプロンプト画面でカーソルの上を押すたびに履歴が表示されますので,1つ前の履歴を表示,そのままENTERキーで連続書き込みができます。
後は無心で書込マシーンになりましょう。

何をやっているの?

スクリプトを見てみます。
esptool.exe を実行,大量の引数が生成されていて,
おおまかに以下の2ブロックになっています。
・ESP32の設定 (ArduinoIDE の設定から変更できます)
・それぞれのアドレスに4つのバイナリを書込

C:\Users\xxxx\-------\esp32\tools\esptool_py\3.0.0/esptool.exe
 --chip esp32
 --port COM3
 --baud 921600
 --before default_reset
 --after hard_reset write_flash
 -z
 --flash_mode dio
 --flash_freq 40m
 --flash_size detect
  0xe000 C:\Users\xxxx-------\esp32\1.0.6/tools/partitions/boot_app0.bin
  0x1000 C:\Users\xxxx-------\esp32\1.0.6/tools/sdk/bin/bootloader_qio_40m.bin
  0x10000 C:\Users\----\Temp\arduino-sketch-xx/ABCD.ino.bin
  0x8000 C:\Users\-----\Temp\arduino-sketch-xx/ABCD.ino.partitions.bin

書込アダプタに依存しますが,baud 1500000 などでちょっとだけ高速化できます。

まとめ

ESP系は特にコンパイルが遅いので何台か作る時は有効なので,覚えておくと良いでしょう。

注意事項

・書込エラーを見逃しやすいので,注意しましょう。

参考資料