#はじめに...
2020年は色々とM5Stackを触る機会が増えまして、そうなってくると自分が作成したコードを配布して利用してもらうってことが発生しました。
配布先が利害共有関係だったりある一定の知識がある場合なら、「Arduino IDEをインストールして・・・」とかいうのもありですが、M5Stackとなるとさらにひと手間もかかります。
もっと言いますと、最近の企業さんではセキュリティの関係で誰でも安易にアプリケーションを追加できるとも限りません。
そこであらかじめコンパイルしたデータをバッチファイルで書き込みができるようにするというのが今回のテーマです。
#参考
まずは参考にさせてもらった記事を。
http://k-hiura.cocolog-nifty.com/blog/2019/06/post-17ebf9.html
#そもそもArduino IDEで書き込みしたら...
M5StackなどのESP32コアを使ったデバイスをArduino IDEでコンパイル、Writeっていると、そもそもesptoolっていう実行ファイルを使用していることが、Arduino IDEのコンソールに出力されています。
(表示されない場合はArduino IDEの ファイル>環境設定>「より詳細な情報を表示する」の項目のチェックをすべて入れます。)
コンパイルが終了したらその次の行に
C:\Users\[ユーザー]\Documents\ArduinoData\packages\esp32\tools\esptool_py\2.6.1/esptool.exe --chip esp32 --port COM11 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size detect
0xe000 C:\Users\[ユーザー]\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/partitions/boot_app0.bin
0x1000 C:\Users\[ユーザー]\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.4/tools/sdk/bin/bootloader_qio_80m.bin
0x10000 C:\Users\[ユーザー]\AppData\Local\Temp\arduino_build_834829/commu_can_receiver.ino.bin
0x8000 C:\Users\[ユーザー]\AppData\Local\Temp\arduino_build_834829/commu_can_receiver.ino.partitions.bin
てなふうに何を実行しているかが記載されています。
つまり結論ですが、ここと同じことをバッチ処理して、ついでに実行しているesptool.exeとコンパイルしたバイナリデータなどと一緒に配布してあげれば工場出荷データのように配布が可能という寸法です。
それではせっかくなので、このesptoolで実行している内容を見ていきます。
##実行ファイルとオプション
esptool.exe --chip esp32 --port COM11 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size detect
まずここは実行ファイルですね。 これは毎回同じになります。
##次にターゲットのファイル
それぞれフルパスでファイル指定しているのでわかりやすいですね。
上のようにアドレスのところで区切ってやると分かりやすいです。
####1、0xe000 boot_app0.bin
####2、0x1000 bootloader_qio_80m.bin
この最初の1,2、がESP32のコアに依存したブート領域に関わるところですね。
コードの違いではここは変化せず、CoreとかStick-Cなどで変わってきます。(たぶんESP32か、ESP-picoでの違いが出てくるのかな?)
####3、0x10000 [スケッチ名].ino.bin
####4、0x8000 [スケッチ名].ino.partitions.bin
この3、4、が主にスケッチコードをコンパイルしたバイナリデータですね。
コンパイルしたデータとペアになるので、これだけ都度更新すれば、あとは共通で使えます。
この3、4、はArduino IDEの作業フォルダー指定されているので、IDEを起動したままそのパスを参照してコピーします。
さて、これらのバッチ処理で記述してきましょう。
今回はすべて関連ファイルを同じフォルダーに入れて一つの圧縮ファイルとして配布するとします。
echo;
set /P PORT="COMポート番号 n ?"
.\esptool.exe --port COM%PORT% --baud 1500000 ^
--chip esp32 --before default_reset --after hard_reset ^
write_flash -z --flash_mode dio --flash_freq 80m --flash_size detect ^
0xe000 boot_app0.bin ^
0x1000 bootloader_qio_80m.bin ^
0x10000 [スケッチ名].ino.bin ^
0x8000 [スケッチ名].ino.partitions.bin
pause
これはあくまで一例となりますが、実行したら接続しているCOMポートを指定して書き込みが進む処理にしています。
以上M5Stackのバイナリ実行ファイルを配布する方法でした!
mahalo!