最近は、Moddable SDKを用いてECMAScript(JavaScript)でESP32のプログラムを書いている。

ソースコードをコンパイルしてアップロードパッケージをESP32に向けて送出するとき
シリアルポートには環境変数UPLOAD_PORTに与えられたデバイスが用いられる。
例(macOS):UPLOAD_PORT=/dev/cu.SLAB_USBtoUART

この時のシリアルポートの通信速度は921600bpsとなる。

esptool.py v2.6-beta1
Serial port /dev/cu.SLAB_USBtoUART
Connecting........___
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
MAC: 24:0a:c4:b0:05:5c
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Configuring flash size...

高速のUSBserialチップならば921600bpsの速度に対応できるが、低速チップではこの速度に対応できずアップロードエラーとなる。

いろいろ調べて見ると、ビルドツールの mcconfig からアップロードツールのesptool.pyに 引数 –baud 921600 が渡されているらしいのでmcconfigのソースコードをイジって230400bpsにしようと試みたが921600と決め打ちしているような箇所を発見することはできなかった。別のモノが速度を設定している様子。

1.アップロードスピードを変える方法

本日、mcconfigから呼び出されビルドやアップロードを司るESP-IDFのドキュメントを読んでいたらESP-IDFは環境変数ESPBAUDでアップロードスピードを任意に変えることができるのを発見した。

さっそく、ESPBAUD=230400と設定してmcconfigでビルド・アップロードを実行したら、あっけなく230400bpsでアップロードが実行された。

esptool.py v2.6-beta1
Serial port /dev/cu.SLAB_USBtoUART
Connecting........_
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
MAC: 24:0a:c4:b0:05:5c
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 230400
Changed.
Configuring flash size...

参考:ESP8266の場合は環境変数UPLOAD_SPEEDで変えることができる。

2.envコマンドでターゲットやスピートを変える方法

ESP32-DevKitCやM5Stack、その他のESP32マイコンボード複数をホストにつないだとき、そのシリアルデバイスは次のように与えられる。(macOSの例)

/dev/cu.SLAB_USBtoUART
/dev/cu.SLAB_USBtoUART79
/dev/cu.usbserial-14320

目的のESP32ボードにプログラムをアップロードするには、いちいち環境変数UPLOAD_PORTを書き換える必要があるが、macOSやLinuxではenvコマンドを用いる事によって簡単にターゲットの選択やスピードを設定しビルド/アップロードを実行できる。

$ env UPLOAD_PORT=/dev/cu.SLAB_USBtoUART79  mcconfig -d -m -p esp32
$ env UPLOAD_PORT=/dev/cu.usbserial-14320 ESPBAUD=115200 mcconfig -d -m -p esp32

Follow me!