【ESP32】ESP-IDFでbuildと書き込み(Windows 11)
星杜なぎさです。
ESP-IDFの環境構築がまだの人は、前回の記事を読んでくれると嬉しいです。
忙しい人向け
- ESP-IDF x.x COMを起動
- ESPを接続して、COMポートを確認する(仮にCOM3だったとする)
- 以下のコマンドを実行でビルド&書き込み&出力のモニタリング
cd 【プロジェクトフォルダ】 idf.py -p COM3 flash monitor
0. PCスペックなど
- ESP-IDF v5.5.1
1. 公式のチュートリアルをなぞる
公式サイトにありがた~いHello Worldのチュートリアルがあるので、それをもとに解説していきます。
チュートリアルの流れは以下の通りです。
- ESP-IDFの立ち上げ方(Windows Command Line)
- サンプルプロジェクトのコピー(xcopyコマンド)
- targetの設定(ESP32用のプロジェクトとして設定)
- menuconfig(今回は特に変更しない、紹介のみ)
- build(ビルドの実行)
- flash(マイコンへ書き込み)
- monitor(マイコンの出力確認方法)
ちなみに私が使用したマイコンは、「ESP32-WROOM-32E」「ESP-WROOM-32」「EPS32-C3M-SLIM」です。
ESP-IDFの立ち上げる
今回は、コマンドプロンプトでESP-IDFを立ち上げます。

Tips:ショートカットがない場合は、
下部メニューのWindowsのアイコン[スタート]をクリック
「ESP-IDF」で検索

検索欄に「ESP-IDF ... CMD」があればそれを開く

正常に起動すれば、下記のような画面になります。

Start a Project
公式ではこの後cdしてespフォルダにhello_worldのプロジェクトをコピーしてますが、
この時点では、%USERPROFILE%/espのフォルダがそもそもないので、下記のエラーが発生します。

そこで、一度移動してからmkdirでフォルダを作成、その後にxcopyを実行します。
cd %USERPROFILE%
mkdir esp
cd esp
xcopy /e /i %IDF_PATH%\examples\get-started\hello_world hello_world
出力など
espフォルダ内にhello_worldというフォルダが作成されていればOKです。

余談
新規プロジェクトの作成方法
本手順では紹介されていませんが、コピーではなく新規プロジェクトを作成する場合は、以下のコマンドだそうです。
idf.py create-project <project name>
参考
Connect Your Device
使用するEPSのマイコンを接続して、COMポートを確認します。
デバイスマネージャーを起動

ESP接続前後を比較して、EPSのCOMが何番であるかを確認します。
(画像中では、COM11で認識されています)

ちなみに、ESP32はUSB経由で接続してください(画像はESP-WROOM-32です)

コマンドラインでの確認方法
modeとfindstrコマンドで確認可能です。
(余談ですがfindstr等はセキュリティで引っかかる可能性があるため、使用には注意です)

参考記事
USB-Enhanced-SERIAL CH9102(COMXX)などが表示されない場合
以下のどちらかの可能性が高いです
- 繋いでいるUSBケーブルが、データ送信に対応していない
- 接続したESP32に対応したドライバがインストールされていない
後者の場合は、以下の手順でドライバを導入してください。
- CH343SER.ZIPをダウンロード
- zipファイルを解凍し、Driverフォルダにある「SETUP.EXE」を実行
- DriverSetup(X64)画面の「INSTALL」ボタンを押下し、ドライバーをインストール
詳しくは下記参照のこと
参考:ESP32の使い方
参考:Adafruit How To Install Drivers for WCH CH9102 USB to Serial Chips
Configure Your Project
指示どおり、以下のコマンドを順番に実行します。
cd %userprofile%\esp\hello_world
idf.py set-target esp32
idf.py menuconfig
以下の画面が表示されます(ここでEPSの機能の有効/無効が設定できます)

操作方法は下の青いところに表示去れているので、Escキー([ESC] Leave menu:メニュー画面を去る)を押して元のコマンドプロンプトへ戻ります。
出力

Build the Project
buildを実行します。私の環境では30秒程度で終わりました。
idf.py build
出力

Flash onto the Device
指定したCOMポートに接続してあるEPSデバイスに、バイナリを書き込みます。
Replace PORT with your ESP32 board's USB port name. とあるので、コマンド例の記載のPORTを、COM11に置き換えて実行します。
idf.py -p COM11 flash
出力
出力の最後にDoneと表示されれば書き込み成功だと思います。



書き込みが失敗する場合の対処法
私が遭遇したエラーについて、記載しておきます。
長いので折り畳み
事象1:Connecting.................. と表示されるが、書き込みが始まらない

すぐ下に下記のメッセージがあれば、これです。
A fatal error occurred: Failed to connect to ESP32: Wrong boot mode detected (0x13)! The chip needs to be in download mode.
原因は、書き込み可能なモード「Download mode」になっていないこと
ESP-WROOM-32などは、書き込み時に自動でDownload modeにならないものがあります。
(私の使用していたESP32-WROOM-32Eは、自動でDonwload modeになるようです)
解決策として、デバイスのDownload modeへの移行方法(書き込み方法)を調べて、Connecting...の文字が表示されている(であろう)タイミングでその操作を行ってください。
ESP-WROOM-32の場合は、以下の手順でDonwload modeに移行します。
- 基板上のENボタンを押しっぱなしにする(4までホールドする)
- IOOボタンを押す
- IOOボタンを離す
- 1でホールドしているENボタンを離す
事象2:対応していないマイコン
Connectingの後に、エラーが発生する

エラー内容(抜粋)
A fatal error occurred:This chip is ESP32-C3, not ESP32. Wrong --chip argment?
ESP32とESP-C3シリーズでは、異なるようです。
ESP-C3の場合は、set-targetでESP32-C3に変更すればOKでした。
idf.py set-target esp32c3
idf.py -p COM12 flash
出力

事象3:buildが見つからない
カレントディレクトリにbuildがない、または CMakeLists.txtなどbuildに必要なものが不足している場合は、下記のエラーとなるようです。
CMake will not be able to correctly genrate this project.
ちなみに真因は、私がカレントディレクトリ勘違いしていたから。。。
(起動した後のesp-idf-v5.5.1のディレクトリのままbuildしようとしていた)

そりゃ何もないのにbuildできないよね...
Monitor the Output
書き込みは完了しましたが、正常に動いてるか確認してみたいです。
そんな時は、monitorコマンドで確認しましょう。
こちらもPORTをCOM11に置き換えで実行します。
idf.py -p COM11 monitor
出力
Hello world! の文字列と、書き込んだEPSのデバイスの基本情報(CPU, WiFi/BL BLEの有無、バージョン、FLASHの容量など)が表示され、10秒カウントダウンした後、再起動します。

モニタリングを終了するには、"ctrl + ]"を入力します。
もし出力が文字化けした場合は、menuconfigからMain XTAL frequency(水晶発振子の周波数)の設定を26MHzにすると治るそうです(私のてもとでは発生しませんでした)
余談ですが、以下のコマンドで、ビルド->書き込み->モニタリング が一貫して実行可能です
(flashの際にbuildも行う仕様のため)
idf.py -p PORT flash monitor
Flash Erase
書き込んだ内容を削除する際は、以下のコマンド
(PORTは、COM番号で置き換えてください)
idf.py -p PORT erase-flash
出力

2. 感想
- buildについてはめっちゃ難しいイメージだったが、サンプルコードでbuildに必要なものがそろった状態だったので、簡単にbuildできてよかった
- 一口にESP32といっても、ESP32なのかESP32-S3なのか、ESP32-C3なのか?等細かい種類があるため、Web上の記事を参考にする際は意識しておくべきだと感じた
Discussion