トホホな疑問(53) VScodeからESP-IDFインストール、ターゲットによる?

Joseph Halfmoon

別件記事でESP32C3(RISC-V)の吉例LチカをArduino環境でやってみました、簡単。しかしESP32というとESP-IDFというEspressif社自身の開発環境があり、いろいろやろうとするとそちらになります。PCも新しくなって昔の環境が使えなくなっているので、最新版をインストールしようとしてハマりました。

御本家 Espressif社のESP-IDF開発環境のGet Startedページへのリンクは以下です。

ESP-IDF Get Started

上記よりリンクをたどり適切に指定していけば問題なく動作するハズなのですが、Windows11上にインストールしようとしてトホホです。

WSL2へのESP-IDFのインストールは成功

実はWindows11に直接インストールする前に、Windowsの上のWSL2(Ubuntu 20.04)へのESP-IDFのインストールを試みて成功しております。ESP32C3用のオブジェクトファイルの生成まで出来。

しかし1点問題が。WSL2はそのままではUSBシリアルに接続できず、デバイスにオブジェクトファイルを書き込みできません。調べてみるとUSBシリアルに接続可能ではあるのですが、結局、WSL2で動かしているカーネルの再ビルドをしないとシリアルデバイスとして使えないようです。それはまた今度だな~

ということで、直接シリアルポートを使えるWindows11上にもESP-IDF入れておくか(DISKの肥やしが増えまくり)と思い立ちました。以前手作業で入れたときに結構トラブった遠い記憶があるのです。しかし今回はVScodeのイクステンションでも入るみたいです。きっとお手軽に違いない。その方法を使ってみます。

VScodeからのインストール

冒頭のアイキャッチ画像に掲げたとおり、VScodeにはEspressif IDFというExtensionがあるので、それをインストールし、そこから環境を整えていくことにいたします。Extension自体は呼び水みたいなもので、大きなファイルは何もインストールしないようです。ESP IDF: Configure ESP-IDF extensionを実行すると、はじめて各種ファイルを大量にダウンロードしてインストールし始めます。まずそこで項目をよく読まずにヒトコケしました。以下の青色のところ。

ESPIDFconfig

デフォルトでは、Find ESP-IDF in your system となっているのです。つまりDISK上にすでにESP-IDFがダウンロードしてあったら、そこへのパスを通して処理を行おうとします。今回ESP-IDFが無いのに、デフォルトのままインストールボタンを押してました。何度やっても途中でコケます。よく見たらこれのせい。プルダウンメニューを引き出せば、いくつかのバージョンを選択してダウンロードできるようになってます。最新版を指定したらOKとな。よく読めよ、自分。こんな感じで指定。ESPIDFconfig2

なお、途中で以下のような画面になり、Download Toolsを押すと、XtensaもRISC-Vもツールチェーンから何から結構な量をダウンロードしますです。DISKの肥やしゲット?ESPIDFdownload

 

ダウンロードそのものは問題なく終わったようです。こんな感じ。ESPIDFdownloadEnd

Example Projectのビルドでハマる

ESP-IDF: Show Example Projects で大量に見つかるExample Projectから「いつもの」Blinkを選んで、適当なフォルダにコピーすればExampleはOKです。ESP-IDFのBlinkは、Aruduino版と比べると「荘厳」です。ソースだけで84行、それに加えてコンフィギュレーションファイルが1400行以上もあります。

基本変えずに済むところは変えない、というスタンスなので、量が多くてもとりあえず気にしませんが。

そこで大事なことが一つ。VScodeからESP-IDFを使うときは、一番下のツールバーに主要なコマンドがアイコンとしておかれているのでこれを使わんといけません。ESP-IDF環境のセットされたPowershellのウインドウを開くアイコンは下の図の右から2番目のやつです。ただターミナルを開いて idf.pyとか打っても知らんとはねられます。exproj2

上記から開いたシェルで、idf.pyは走るのですが、困ったのがターゲットをesp32-c3とすると途中でエラーで落ちるのであります。

idf.py set-target esp32-c3

何が悪いのだか、esp32c3に設定してくれません。弱りました。

※2022年11月3日追記:上記問題解決済であります。その件はこちら

ESP32ならビルドはOK、なして?

試みにESP32としてみたらすんなり設定OKです。

idf.py set-target esp32

そして menuconfigをしてみます。

idf.py menuconfig

立派なことに、異なるボードでもソースを変更することなく、configファイルで対応可であります。ボード毎に異なるLEDの端子とか点滅周期などは以下のExample Configurationで設定します。
menuconfig

Example Configurationの中はこんな感じ。menuconfigEx

なお、ESP32 DevKitCにターゲットをスイッチし、該当ボードのLEDは23番だったのでBlink GPIO numberは23にしてあります。

この設定でBuildしてみると成功。書き込みはというとこれまた成功。こんな感じ。ESP32OK

 

ただし、書き込み成功までにもひと悶着あり。新しいPCなので、CP210Xのドライバが入っておらず、ESP32 DevKitCを接続しても仮想シリアルとして認識してくれませんでした。慌ててSILICON LABS社へ行き、ドライバをダウンロードしてインストールしてます。ドタバタだあ。トホホ。

それでもま、オブジェクトはDevKitC上で動いております。Lチカ。

Windows上でESP32C3のビルドが通るのと、WSL2でシリアルを使えるようにするのとどっちが早いか?いやまてよ、すでにWindows上でESPTOOLを動かしてターゲットデバイスに書き込み出来てるのだから、WSL2上のオブジェクトファイルをWindows側でターゲットに書き込めばいいんじゃないか。どうする、トホホだな。今日はもう疲れました。

トホホな疑問(52) WSL2、Ubuntu、学ばないな、pkg-configでコケる へ戻る

トホホな疑問(54) WSL2、USBシリアル、既につながっておるぞよ。デバイスによるケド。へ進む