🐤

【ESP32】ESP-IDFでbuildと書き込み(Windows 11)

に公開

星杜なぎさです。
ESP-IDFの環境構築がまだの人は、前回の記事を読んでくれると嬉しいです。
https://zenn.dev/hoshinagi1219/articles/d4546682e19b28

忙しい人向け

  • 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のチュートリアルがあるので、それをもとに解説していきます。
https://docs.espressif.com/projects/esp-idf/en/stable/esp32/get-started/windows-setup.html#start-a-project

チュートリアルの流れは以下の通りです。

  • 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>

参考
https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-guides/tools/idf-py.html

Connect Your Device

使用するEPSのマイコンを接続して、COMポートを確認します。

デバイスマネージャーを起動

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

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

コマンドラインでの確認方法

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

参考記事
https://qiita.com/nak435/items/1c28778ffbb795a3fca2

USB-Enhanced-SERIAL CH9102(COMXX)などが表示されない場合

以下のどちらかの可能性が高いです

  • 繋いでいるUSBケーブルが、データ送信に対応していない
  • 接続したESP32に対応したドライバがインストールされていない

後者の場合は、以下の手順でドライバを導入してください。

  • CH343SER.ZIPをダウンロード
  • zipファイルを解凍し、Driverフォルダにある「SETUP.EXE」を実行
  • DriverSetup(X64)画面の「INSTALL」ボタンを押下し、ドライバーをインストール

詳しくは下記参照のこと

参考:ESP32の使い方
https://ameblo.jp/bongbongbong73/entry-12881301336.html

参考:Adafruit How To Install Drivers for WCH CH9102 USB to Serial Chips
https://learn.adafruit.com/how-to-install-drivers-for-wch-usb-to-serial-chips-ch9102f-ch9102/windows-driver-installation

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に移行します。

  1. 基板上のENボタンを押しっぱなしにする(4までホールドする)
  2. IOOボタンを押す
  3. IOOボタンを離す
  4. 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