このページの目次
esptool
ESP32にはいくつかの派生チップがありますが、これらのファームウェアの内容の確認や、書き換えを行うツールがesptoolの名称でメーカーのespressifから配布されています。esptoolは、その配布方式や提供形態にいくつかの種類があります。ここでは、我々が使用している4種類のesptoolの導入法と使用法に関して説明します。
- 新たにesptool.exeを導入して使用
- Arduino IDEのESP32コアに含まれるesptool.exeを使用
- Thonnyと共に導入されたpythonにesptool.pyを導入して使用
- 既存のPythonか新たに導入するPythonにesptool.pyを導入して使用
これらの中で、一番わかりやすいのが、最初のesptool.exeを導入して使用する方法だと思います。
BOOTモード
それぞれのツールの説明の前に、まず共通する注意点として、BOOTモードについて説明しておきます。
esptoolでESP32系の開発ボードを操作するためには、開発ボードがesptoolとの通信時にBOOTモードに遷移している必要があります。
UART-USBコンバーターを使用してPCと通信するタイプの開発ボードでは、esptoolとの通信時に自動的にBOOTモードに遷移する機能が付与されていることが一般的です。このため、BOOTモードを意識することなく、esptoolを使用してファームウェアの書き込み等を行うことができます。
一方、新しいESP32-S3やESP32-C3で、チップに内蔵のUSB機能を使用してPCと通信するタイプの開発ボードでは、esptoolとの通信時に自動的にBOOTモードに遷移する機能がありません。このため、esptoolを使用する前に、開発ボードを手動でBOOTモードに移行させておく必要があります。
このタイプの開発ボードには、ESP32-C3M-SLIM, ESP32-C3M-LEAF, ESP32-C3M-TRY, ESP32-C3M-ROBOなどがあります。
これらの開発ボードでは、LOADボタンとRSTボタンを一緒に押して先にRSTボタンを離すことにより、BOOTモードに移行させることができます。esptoolを使用する前に、この操作をして開発基板をBOOTモードに遷移させておきます。
BOOTモードでesptoolと通信を行いファームウェアの書き込みなどが終了したならば、RSTボタンで開発ボードをリセットすることによりBOOTモードから抜けることができます。
esptool.exeパッケージの利用
導入と利用が一番簡単な方法ですね。MACとLINUXは.exeじゃないですけど。。。
ツールパッケージのダウンロードとインストール
以下のWEBページで、esptoolの実行ファイル(Windowsの場合には、esptool.exe)が含まれた圧縮ファイルをダウンロードすることができます。このWEBページでは、MAC用やLINUX用の圧縮ファイルも提供されています。
圧縮ファイルの中にフォルダが含まれているので、そのフォルダを適当な場所にコピーもしくは展開します。そんなに頻繁に使うものでもないので、実行パスを通す必要もないでしょう。
カレントディレクトリをコピー・展開したフォルダに移動してdirとすると、esptool.exeを含むいくつかの.exeファイルとREADME.mdファイルなどが見えます。
このフォルダで単純にesptoolと入力しエンターキーを押すと、esptool.exeを実行できます。引数なしで起動すると、以下のようにesptoolの利用法が表示されます。
>esptool
esptool.py v4.6.2
usage: esptool [-h]
[--chip {auto,esp8266,esp32,esp32s2,esp32s3beta2,esp32s3,esp32c3,esp32c6beta,esp32h2beta1,esp32h2beta2,esp32c2,esp32c6,esp32h2}]
[--port PORT] [--baud BAUD]
[--before {default_reset,usb_reset,no_reset,no_reset_no_sync}]
[--after {hard_reset,soft_reset,no_reset,no_reset_stub}]
[--no-stub] [--trace] [--override-vddsdio [{1.8V,1.9V,OFF}]]
[--connect-attempts CONNECT_ATTEMPTS]
{load_ram,dump_mem,read_mem,write_mem,write_flash,run,image_info,make_image,elf2image,read_mac,chip_id,flash_id,read_flash_status,write_flash_status,read_flash,verify_flash,erase_flash,erase_region,merge_bin,get_security_info,version}
...
esptool.py v4.6.2 - Espressif chips ROM Bootloader Utility
positional arguments:
{load_ram,dump_mem,read_mem,write_mem,write_flash,run,image_info,make_image,elf2image,read_mac,chip_id,flash_id,read_flash_status,write_flash_status,read_flash,verify_flash,erase_flash,erase_region,merge_bin,get_security_info,version}
Run esptool.py {command} -h for additional help
load_ram Download an image to RAM and execute
dump_mem Dump arbitrary memory to disk
read_mem Read arbitrary memory location
write_mem Read-modify-write to arbitrary memory location
write_flash Write a binary blob to flash
run Run application code in flash
image_info Dump headers from a binary file (bootloader or
application)
make_image Create an application image from binary files
elf2image Create an application image from ELF file
read_mac Read MAC address from OTP ROM
chip_id Read Chip ID from OTP ROM
flash_id Read SPI flash manufacturer and device ID
read_flash_status Read SPI flash status register
write_flash_status Write SPI flash status register
read_flash Read SPI flash content
verify_flash Verify a binary blob against flash
erase_flash Perform Chip Erase on SPI flash
erase_region Erase a region of the flash
merge_bin Merge multiple raw binary files into a single file for
later flashing
get_security_info Get some security-related data
version Print esptool version
optional arguments:
-h, --help show this help message and exit
--chip {auto,esp8266,esp32,esp32s2,esp32s3beta2,esp32s3,esp32c3,esp32c6beta,esp32h2beta1,esp32h2beta2,esp32c2,esp32c6,esp32h2}, -c {auto,esp8266,esp32,esp32s2,esp32s3beta2,esp32s3,esp32c3,esp32c6beta,esp32h2beta1,esp32h2beta2,esp32c2,esp32c6,esp32h2}
Target chip type
--port PORT, -p PORT Serial port device
--baud BAUD, -b BAUD Serial port baud rate used when flashing/reading
--before {default_reset,usb_reset,no_reset,no_reset_no_sync}
What to do before connecting to the chip
--after {hard_reset,soft_reset,no_reset,no_reset_stub}, -a {hard_reset,soft_reset,no_reset,no_reset_stub}
What to do after esptool.py is finished
--no-stub Disable launching the flasher stub, only talk to ROM
bootloader. Some features will not be available.
--trace, -t Enable trace-level output of esptool.py interactions.
--override-vddsdio [{1.8V,1.9V,OFF}]
Override ESP32 VDDSDIO internal voltage regulator (use
with care)
--connect-attempts CONNECT_ATTEMPTS
Number of attempts to connect, negative or 0 for
infinite. Default: 7.
>
ESP32系開発ボードのUSB接続
ここで、ESP32系の開発ボードをUSBでPCに接続してください。もし、ファームウェアの書き込み対象以外の開発ボードを接続している様であれば、それらを間違って操作対象としないために、すべてUSBから外してください。
前の章「BOOTモード]を参照して、必要に応じて操作対象の開発ボードをBOOTローダーモードに設定してください。
この状態で以下に示すようにflash_idを引数に指定してesptool.exeを実行すると、ESP32系開発ボードの各種の情報をUSB経由で取得して画面に表示します。
>esptool flash_id
esptool.py v4.6.2
Found 1 serial ports
Serial port COM12
Connecting....
Detecting chip type... ESP32-S3
Chip is ESP32-S3 (revision v0.1)
Features: WiFi, BLE
Crystal is 40MHz
MAC: XX:XX:XX:XX:XX:XX
Uploading stub...
Running stub...
Stub running...
Manufacturer: c8
Device: 4018
Detected flash size: 16MB
Flash type set in eFuse: quad (4 data lines)
Hard resetting via RTS pin...
c:\>
上記の例では、ESP32-S3-KEY-R2Aが操作対象となっています。
esptoolの標準的な操作法の説明では、開発ボードのチップの種類やシリアルポートを指定する様に書かれていますが、esptoolは自動的に識別してくれるので、上記の例のように面倒であればそれらの指定を行う必要はありません。
もし無指定でesptoolが適切に動かないようであれば、操作法に従いポートやチップを適切に指定してください。
esptoolを使用したファームウェアの書き込み
ファームウェアを書き換える際には、まず下記の例に示すように、erase_flashコマンドでESP32系モジュールのフラッシュメモリの内容を消去します。
この処理は少し時間がかかります。
c:\>esptool erase_flash
次に、下記の例に示すように write_flash コマンドを使用してMicroPythonのファームウェアを書き込みます。図の[PATH]の部分には、ファームウェアをダウンロードして保存している場所のパスを記入してください。(例えば C:\HOME\ など。)
c:\>esptool write_flash -z 0 [PATH]ESP32-S3-KEY-R2-N8R2-20231103-v1.21.0.bin
一般的に、-zオプションのあとの引数は、ファームウェアを書き込むチップにより、以下のようになります。
- ESP32
- ESP32-S3, ESP32-C3
この書き込み処理には、1‐2分程度かかります。
PCのプロンプトが返ってきたらファームウェアの書き込み成功です。明示的にBOOTモードに移行させていた場合には、ファームウェアの書き込み完了後にRSTスイッチを押して対象の開発ボードを再起動して通常の状態に戻してください。
Arduino IDEに組み込まれたesptoolの利用
Arduinoでスケッチを作成しコンパイルすると、プログラムの開発ボードへのアップロード時に、IDEのメッセージ領域に沢山表示されるメッセージの最初の方に、esptool.pyという文字列を確認することができます。このように、Arduinoのスケッチを開発ボードにアップロードする処理にesptoolが使われており、すでに利用できる状態にありますので、このesptoolを利用する方法を紹介します。
esptoolの格納場所の確認
著者の現在の開発環境では、以下のようなパスにesptool.exeという実行ファイルが格納されています。なお、パスの中のusernameは利用者のアカウント名です。
- C:\Users\username\AppData\Local\Arduino15\packages\esp32\tools\esptool_py\4.5.1
esptool.exeの格納場所は、コマンドプロンプト(CMD.EXE)を開き、dir コマンドでArduinoをインストールしたドライブ(一般的にはC:)でesptool.exeを検索すると、少し時間がかかるかもしれませんが見つけることができます。
以下の例は、Arduino IDEがCドライブにインストールされている場合ですが、異なるドライブにインストールされている場合には、そのドライブで検索を行ってください。
c:\>dir /s /b esptool.exe
c:\Users\username\AppData\Local\Arduino15\packages\esp32\tools\esptool_py\4.5.1\esptool.exe
c:\>
esptoolの動作確認
esptool.exe を見つけたら、カレントディレクトリをesptool.exeが格納されているパスに移動しましょう。コマンドプロンプトに cd とスペースを入力した後に、見つかったesptool.exeのフォルダ名を入力します。なお、パス内のusernameは利用者のアカウント名です。
c:\>cd C:\Users\username\AppData\Local\Arduino15\packages\esp32\tools\esptool_py\4.5.1\
この状態でエンターキーを押すと、カレントディレクトリをesptool.exeの格納場所に移動できます。
ここに格納されているesptool.exeは前章の「esptool.exeの利用」で紹介したesptool.exeよりバージョンが少し古いかもしれませんが、基本的に同じものです。したがって、その使用法については、前の章の「esptool.exeの利用」を参照して利用してください。
ThonnyのPython利用
Thonnyと共にインストールされたPythonを利用して、開発ボードにMicroPythonのファームウェアの書き込みを行うことができます。
コマンドプロンプトの起動
Thonnyを起動して、まず下の図の赤丸の部分をクリックして、下図に示すようにPC用のPythonを実行対象として選択してください。
次に、Thonnyの[ツール] => [システムシェルを開く...]メニューを選択してください。コマンドプロンプト(CMD.EXE)が起動されます。
esptoolのインストール
コマンドプロンプトに以下に示すコマンドを入力してエンターキーを押すと、esptoolをインストールできます。
> pip install esptool
esptool がインストールできたら、以下に示すコマンドを入力するとesptoolの起動オプションなどが表示され、esptoolの動作確認することができます。
c:\> python -m esptool
開発ボードのUSB接続
ここで、開発ボードをUSBでPCに接続してください。もし、操作対象以外の開発ボードを接続している様であれば、それらをすべてUSBから外してください。
前の章「BOOTモード]を参照して、必要に応じて操作対象の開発ボードをBOOTローダーモードに設定してください。
この状態で下の図に示すようにflash_idを引数に指定してesptoolを実行すると、開発ボードの各種の情報をUSB経由で取得して画面に表示します。
> python -m esptool flash_id
esptool.py v4.6.2
Found 1 serial ports
Serial port COM10
Connecting...
Detecting chip type... ESP32-C3
Chip is ESP32-C3 (revision v0.3)
Features: WiFi, BLE
Crystal is 40MHz
MAC: XX:XX:XX:XX:XX:XX
Uploading stub...
Running stub...
Stub running...
Manufacturer: 20
Device: 4016
Detected flash size: 4MB
Hard resetting via RTS pin...
>
上記の例では、ESP32-C3-SLIMが操作対象となっています。
esptoolの標準的な操作法の説明では、開発ボードのチップの種類やシリアルポートを指定する様に書かれていますが、esptoolは自動的に識別してくれるので、上記の例のように面倒であればそれらの指定を行う必要はありません。
もし無指定でesptoolが適切に動かないようであれば、操作法に従いポートやチップを適切に指定してください。
esptoolを使用したファームウェアの書き込み
まず、下の図に示すようにerase_flashコマンドでESP32チップのフラッシュメモリの内容を消去します。
この処理は少し時間がかかります。
c:\> python -m esptool erase_flash
次に、下の図に示すように write_flash コマンドを使用してMicroPythonのファームウェアを書き込みます。
図の[PATH]の部分には、ファームウェアが格納されている場所のパスを記入してください。(例えば C:\HOME\ など。)
c:\> python -m esptool write_flash -z 0 [PATH]esp32c3-usb-20230426-v1.20.0.bin
この書き込み処理には、1‐2分程度かかります。
PCのプロンプトが帰ってきたらファームウェアの書き込み成功です。ファームウェアの書き込み完了後にRSTスイッチを押して開発ボードを再起動してください。
esptool.pyの利用
インストール済みPythonを利用した書き込み
Pythonのインストール
以下のサイトからインストールパッケージをダウンロードし、インストール時にPATHも設定されているPythonがPCにインストールされているのであればそれを使用します。
PCにPythonがインストールされていない場合には、上記のサイトからPythonのインストールパッケージをダウンロードしてインストールしてください。
Pythonをインストールする際には、インストーラの下部に表示されている[Add Pyhon 3.XX to PATH]をチェックして、Pythonをコマンドプロンプトで利用しやすいようにしておいてください。
esptoolのインストール
Pythonがインストールできたら、「Windows システムツール]からコマンドプロンプト(CMD.EXE)を開きます。
以下に示すコマンドを入力してエンターキーを押すと、esptoolをインストールできます。
> pip install esptool
esptoolのインストール後、以下に示すコマンドを入力してエンターキーを押します。
> esptool.py
esptools.pyのバージョンや使用法が表示されればインストールは成功です。
開発ボードのUSB接続
ここで、開発ボードをUSBでPCに接続してください。もし、フラッシュの操作対象以外の開発ボードを接続している様であれば、それらをすべてUSBから外してください。
この状態で図\ref{fig:python-esptool-chipid-1}に示すようにflash_idを引数に指定してesptoolを実行すると、開発ボードの各種の情報をUSB経由で取得して画面に表示します。
前の章「BOOTモード]を参照して、必要に応じて操作対象の開発ボードをBOOTローダーモードに設定してください。
c:\> esptool.py flash_id
esptool.py v4.5.1
Found 1 serial ports
Serial port COM17
Connecting...
Detecting chip type... ESP32-C3
Chip is ESP32-C3 (revision v0.3)
Features: WiFi, BLE
Crystal is 40MHz
MAC: XX:XX:XX:XX:XX:XX
Uploading stub...
Running stub...
Stub running...
Manufacturer: 20
Device: 4016
Detected flash size: 4MB
Hard resetting via RTS pin...
esptoolの標準的な操作法の説明では、開発ボードのチップの種類やシリアルポートを指定する様に書かれていますが、esptoolは自動的に識別してくれるので、図の例のように面倒であればそれらの指定を行う必要はありません。
esptoolを使用したファームウェアの書き込み
まず、図\ref{fig:python-esptool-erase-1}に示すようにerase\_idコマンドで \productname の\wroom モジュールのフラッシュメモリの内容を消去します。
この処理は少し時間がかかります。
c:\> esptool.py erase_flash
次に、図\ref{fig:python-esptool-write-1}に示すように write\_flash コマンドを使用してMicroPythonのファームウェアを書き込みます。
図の[PATH]の部分には、ファームウェアが格納されている場所のパスを記入してください。
(例えば C:\HOME\ など。)
c:\> esptool.py write_flash -z 0 [PATH]esp32c3-usb-20230426-v1.20.0.bin
この書き込み処理には、1‐2分程度かかります。
PCのプロンプトが帰ってきたらファームウェアの書き込み成功です。ファームウェアの書き込み完了後にRSTスイッチを押して開発ボードを再起動してください。