M5Stackのバイナリの書き込みを連続で行いたい

M5Stack非常に便利ですね。最近は仕事でも使うことが増えてきたので同じソフトを沢山のM5Stackに書き込む場面も出て来ました。
ただArduino IDEでチマチマ書きこむのは面倒ですし、他の人に書いてもらう際にも説明が面倒です。必要なファイルをごっそり持って来てバッチファイルで書き込みたいと思います。
似たような方法は色々な方のnoteで紹介されていますので大枠はすっ飛ばし、結果だけ書きます。COMポートも自動認識します。

検証環境:Arduino IDE 2.1.0

プロジェクトを作る

いつも通りプロジェクトを作ってコードを書き、コンパイルをします。
動作確認がすんだら「スケッチ」ー「コンパイル済みバイナリをエクスポート」を選択してバイナリを作成します。

メニューの様子

書込プログラム・バイナリを探す

次の場所を探すと出て来ます。
ユーザ名、バージョン等適宜読み替えてください。

書込ツール esptool.exe
C:\Users\hogehoge\AppData\Local\Arduino15\packages\m5stack\tools\esptool_py\4.2.1\esptool.exe」

共通ブートファイル boot_app0.bin
「C:\Users\hogehoge\AppData\Local\Arduino15\packages\m5stack\hardware\esp32\2.0.6\tools\partitions\boot_app0.bin」

作ったバイナリ sketchABCの場合
「C:\(プロジェクトの場所)\build\m5stack…\sketch_ABC.ino.bin」
「C:\(プロジェクトの場所)\build\m5stack…\sketch_ABC.ino.bootloader.bin」
「C:\(プロジェクトの場所)\build\m5stack…\sketch_ABC.ino.partitions.bin」

上記の全てのファイルをコピーして同じフォルダに入れます。

PowerShellのスクリプトを書く

$writeFileBase = "sketch_ABC"

$comPorts = Get-WmiObject Win32_PnPEntity | Where-Object{$_.Name -like "*CH9102*"} | ForEach-Object{$_.Name -match "COM\d+" | Out-Null; $matches[0]};
Write-Host "Use "$comPorts
.\esptool.exe --chip esp32 --port $comPorts --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB 0x1000 $writeFileBase".ino.bootloader.bin" 0x8000 $writeFileBase".ino.partitions.bin" 0xe000 "boot_app0.bin" 0x10000 $writeFileBase".ino.bin" 

同じフォルダに上記のPowerShellスクリプトを格納します。
一番上の行でスケッチのプロジェクトのベースネームを指定しています。
esptool.exeに渡している書込アドレスは変わる可能性は低いと思いますが、仮にうまく行かないようならArduinoIDEで書き込む際の引数を確認して下さい。

このスクリプトでは「CH9102」のデバイスが1つのみ認識されている前提で自動でそのCOMポートに書き込みを行います。そのためM5Stackを刺し直してスクリプトを再度実行するだけで書き込めます。
「CH9102」が複数存在する場合は$comPortsをうまく料理してみてください。

格納ファイルの一覧

他のPCで書き込む際にはCOMポート用ドライバの導入をお忘れなく。

いいなと思ったら応援しよう!