« パニックアクセルとスロットル | トップページ | ◆局所加速と相対速度と光速と質量 »

esp32 arduino バイナリ配布

 ESP32 Arduino バイナリコード書きこみ概要

例として次のコードを動かします。

// SerialPrint.ino
static int count;
void setup() {
   Serial.begin(9600);
   }
void loop() {
   Serial.print("Serial.print TEST ");
   Serial.println(++count);
   delay(1000);
   }

Arduino-IDEでバイナリを作成し、esptoolで装置にバイナリの書きこみ(upload)を行います。

実行すると、シリアル出力に1秒ごとにカウント表示が出ます。

このバイナリをArduino-IDE無しの環境で装置にupload(インストール)するキットを作成します。
ソースを付けずに書き込み機向けに配布することができます。

 バイナリファイル(.bin)の作成

Arduino-IDEで[スケッチ]⇒[コンパイルしたバイナリを出力]で.binファイルを作成します。

ソースと同じフォルダに.esp32.binファイルが作成されます。

SerialPrint.ino             ソースファイル
SerialPrint.ino.esp32.bin   作成されたファイル

 Windowsで単体で動くuploadキット(esp32loader)の作成

 ツールとバイナリファイルのコピー

Windows用のArduino-IDEにはesptool.exeが付属しています。
esptool.exeは単体で動くツールです。

適当な名前のフォルダ(例えば"esp32loader")を作成し

  • esptool.exe
  • SerialPrint.ino.esp32.bin(作成されたbin)
をコピーします。

esptool.exeは通常次の場所に置かれています。

C:\Users\userName\Documents\ArduinoData\packages\esp32\tools\esptool_py\2.6.1
・userNameはユーザごとに異なります。
・2.6.1は別の番号のこともあります。

 バッチファイルの作成/esptoolの呼び出し方

作成したフォルダ上にesptoolを起動するバッチファイルを作成します。
ファイル名は例えば"loadSerialPring.bat"などとします。
SHIFT-JISで作成する必要があります。

内容は次のものとなります。

:: (Shift-JIS)
:: .binをESP32にアップロードする
:: PORTを装置のusbシリアルに合わせて設定すること
:: ボーレートも必要なら
::
set PORT=COM3
set APP=SerialPrint

.\esptool.exe --port %PORT% --baud 921600 ^
     --chip esp32  --before default_reset --after hard_reset ^
     write_flash -z --flash_mode dio --flash_freq 80m --flash_size detect ^
     0x10000 ./%APP%.ino.esp32.bin

pause

 upload/確認手順

USBの接続とCOMの確認

WindowsのUSBに装置を繋ぎます。

デバイスマネージャーの「ポート(COMとLPT)」で番号を確認します。
この例ではCOM3となりました。

バッチファイル(loadSerialPring.bat)のPORTをCOM3にします。

USBは自動で認識されました。認識されない場合のドライバ入手法はここでは述べません。

実行

バッチファイルをダブルクリックします。

動作確認

TeraTerm等のターミナルソフトでシリアルポート(ここではCOM3)にアクセスします。
次の出力が1秒間隔で得られます。

   Serial.print TEST カウント

 サンプルのダウンロード

サンプルを
esp32loader.zip

esp32loaderPy.zip
に置いてあります。

次のファイルが入っています。

  ・esp32loader.zip
    esp32loader/
       +-- esptool.exe
       +-- SerialPrint.ino.esp32.bin
       +-- SerialPrint2.ino.esp32.bin
       +-- loadSerailPrint.bat
       +-- loadSerailPrint2.bat
  ・esp32loaderPy.zip
    esp32loaderPy/
       +-- esptool.py
       +-- SerialPrint.ino.esp32.bin
       +-- SerialPrint2.ino.esp32.bin
       +-- loadSerailPrint.bat
       +-- loadSerailPrint2.bat
       +-- loadSerailPrint.sh
       +-- loadSerailPrint2.sh

SerialPrint2は表示に"<2>"が追加されたもので、2つのプログラムを選択的にuploadできるということを確認するためのものです。 次のシリアル出力が1秒間隔で得られます。

  Serial.print <2> TEST カウント

loadPySerialPrintは後述のesptool.pyを使うもので、WindowsだけでなくLinuxでもロード作業を行うことができるものです。 しかもコンパクトです。

 esptoolオプションの選択法

ここで使用したesptoolのオプション群はArduino-IDEの「ファイル」⇒「環境設定」で"より詳細な情報を表示する"の[書き込み]にチェックを付け 「スケッチ」⇒「マイコンボードに書きこむ」を実施し、トレース画面にでたesptoolの引数を拾い集めたものです。

残念ながらそれぞれのオプションの詳細な意味合いは現時点では把握していません。

 esptool.pyを使う

python2.7がインストールされている環境ではesptool.exeではなくpythonでesptool.pyを実行することが出来ます。

WindowsでもLinuxでも動作可能です。

環境によっては次のモジュールのinstallが必要になります。

   pip install pyserial

esptool.exeが約3MBあるのに対しesptool.pyは130KBとかなりコンパクトです。
esptool.pyは通常次の場所に置かれています。

C:\Users\userName\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.2\tools
・userNameはユーザごとに異なります。
・1.0.2は別の番号のこともあります。

バッチファイルは.exeを.pyに置き換えただけです。

 Linuxを使ってupload/確認する

LinuxにPython2.7がインストールされていればLinuxからuploadすることが出来ます。

$ sudo apt install python
$ sudo apt install python-pip
$ pip install pyserial

なおPython2.7は"python"コマンドで動き、Python3は"python3"コマンドで動くようになっているようです。

以下は古いノートパソコンに「ubunto 19.04 日本語Remix」を導入した環境で作業しました。

USBの接続と/devの確認

装置をUSB接続し、次のコマンドでデバイス名の確認を行います。

$ ls -l /dev/serial/by-id/
合計 0
lrwxrwxrwx usb-Silicon_Labs_CP2102N_USB_to_UART_Bridge_Controller
_74f1dcfe1640e811a4b090ad7a7060d0-if00-port0 -> ../../ttyUSB0
$

USBは自動で認識されました。認識されない場合のドライバ入手法はここでは述べません。

実行

USBターミナルのモードを書きこみ可能としたうえで、./loadSeralPrint.shを起動します。

$ cd /project/arduino/upload/esp32loadPy/
$ sudo chmod 666 /dev/ttyUSB0
$ sh ./loadSeralPrint.sh

動作確認

cu等のターミナルソフトでシリアルポート(/dev/ttyUSB0)にアクセスします。
次の出力が1秒間隔で得られます。

   $ sudo apt install cu
   $ cu -l /dev/ttyUSB0 -s 9600
   Serial.print TEST 2166
   Serial.print TEST 2167
    :

|

« パニックアクセルとスロットル | トップページ | ◆局所加速と相対速度と光速と質量 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« パニックアクセルとスロットル | トップページ | ◆局所加速と相対速度と光速と質量 »