ESP-IDF ( ESP32 開発環境 ) の使い方

esp_idf_00

ESP32のメーカーEspressif Systems社公式の開発環境、ESP-IDF の使い方を説明します。

ESP-IDFは従来、MSYS2環境内で動作させていましたが、現在はWindowsコマンドプロンプト内で動作し、非常に軽快で設定も簡単になりました。
前半は、2020/8月時点のver4.0.1の使い方を説明します。
後半は、従来のMSYS2環境の使い方を説明しています。
※最新のver4.2以上の場合は、たなかまさゆきさんの以下のサイトを参照してみて下さい。
https://lang-ship.com/blog/work/windows-esp-idf-42/

 

スポンサーリンク

Arduino IDEでも ESP32 ( ESP-WROOM-32 ) は開発できますが、全ての機能を使うことができません。
ESP-IDF を使うともっといろいろな機能が使えます。
簡単にサクッとESP32を開発したい方はArduino IDE。
もっとコアにガッツリ使いたい方はESP-IDFを使えば良いのではないかと思います。
(Arduino IDEでの使い方はこちらの記事をご覧ください。)

ESP-IDF の使い方はいろいろな方々が記事にされていますが、Arduino IDEをよく使う私にとっては、イマイチよく分からないことが多かったので、私なりに備忘録も兼ねてまとめてみました。
これは要するに、Linux環境を使うようなものです。
結構ハマりますので、覚悟しておいてください。
また、日々アップデートされているので、数か月後には使い方が変わっている可能性があります
その場合はお知らせいただけると助かります。

本家、ESPRESSIF社公式以下のページに英語版使用方法がありますので、合わせてご覧ください。

https://docs.espressif.com/projects/esp-idf/en/stable/index.html

ここでの場合は Espressif社の ESP32-DevKitC ( ESP-WROOM-32 )開発ボードを使います。

もちろん、スイッチサイエンスさんの ESPr® Developer 32 でも同じように使えます。
ただ、ピンヘッダは別途購入して、ハンダ付けする必要があります。

ESPr Developer 32
スイッチサイエンス(Switch Science)

ESPr Developer 32 については、過去にレビューした記事がありますので、ご参照ください。

ESPr Developer 32 ( スイッチサイエンス製 ) を使ってみました

以下、Windows10 環境の場合で説明します。

    【目次】

  1. ESP-IDF v4.0.1 stable版の使い方
  2. 従来のMSYS2でESP-IDFを使う方法

ESP-IDF v4.0.1 stable版の使い方

2020年8月9日時点では、ESP-IDF の安定(stable)バージョンは 4.0.1 です。
これは、旧来のMSYS2を使う方法とは異なり、Windowsのコマンドプロンプト内で実行できて、とても便利になりました。
そのインストール方法、および使い方を説明します。

ESP-IDF をインストールする

ここでは、Windows 10環境で説明します。

まず、ESP32のメーカーESPRESSIF systems公式のESP-IDF Programming Guideサイトに行き、以下のページを開きます。

https://docs.espressif.com/projects/esp-idf/en/stable/get-started/windows-setup.html

そこの、ESP-IDF Tools Installer項目のところに、ESP-IDF Toolsインストーラーファイルのダウンロードリンクがあります。
下図の様なところをクリックすると、実行ファイルがダウンロードされます。

ダウンロードされるファイルは、2020/08/09現在では、
esp-idf-tools-setup-2.3.exe
という実行形式ファイルです。

ESP-IDF Tools をインストールする

次に、先ほどダウンロードした ESP-IDF Tools をインストールします。
ダウンロードフォルダを開き、下図の様に保存されたファイルを右クリックして、
「管理者として実行」
をクリックします。

すると、インストーラーが起動し、下図の様な画面になるので、規約内容をしっかり読み、同意すれば
I accept the agreement.
を選択して、「Next」をクリックして次に進みます。

すると、下図の様に Python をインストールするか訪ねてきます。
Pythonはプログラムの環境設定をしたり、ビルドしたり、ESP32にバイナリを転送するために必要なアプリです。
既にインストールされていなければチェックを入れて、次に進みます。

すると、下図の様な画面が出て来て、Git をインストールするか聞いてきます。
ESP-IDFのソースはGitHubにあり、そこから最新版に更新したりする為にGitが必要です。
Gitの最新版がインストールされていなければ、下図の様に選択します。
私の場合は、ver 2.13.2 がインストールされていましたが、最新版の2.21.0の方が欲しかったので、それを選択して、次に進みました。

すると、下図の様な画面が出てきます。
初めてESP-IDFをインストールする場合は、
Download ESP-IDF
を選択して、次に進みます。

すると、下図の様な画面が出てくるので、2020/08/09時点で最新の安定版である、
v4.0.1(release version)
を選択します。
そして、その下のダウンロードするフォルダは、私の場合はDドライブ直下にesp-idfというフォルダを作成し、そこを選択して次に進みました。
これは任意で良いと思います。

すると、下図の様な画面が出て来て、ESP-IDFツール群をインストールするフォルダを聞いてきます。
私の場合は、Dドライブ直下としました。
これも任意で良いと思います。
.espressif
というフォルダ名が自動的に作成されるはずです。

すると、下図の様な画面になるので、必要事項にチェックを入れます。
内容はこんな感じです。

①ESP-IDF Tools ショートカットをスタートメニューに作る場合
②ESP-IDF Tools ショートカットをディスクトップに作る場合
③ESP-IDF Tools 実行ファイルをウィルスチェックソフトWindows Defenderから除外する場合

特に3番については自己責任でチェックしてください。

すると、下図の様な画面になるので、問題無ければ、「Install」をクリックします。

すると、下図の様にインストールが始まります。

インストール完了すると、下図の様な画面になるので、他の開いているソフトを終了させてから、Yesを選択して、「Finish」をクリックすると、パソコンが再起動します。

パソコンの再起動が完了したら、ディスクトップに下図の様なアイコンが表示されていると思います。

そこで、ESP-IDF Command Prompt をダブルクリックして起動させます。
すると、下図の様な画面になれば、インストール成功です。

サンプルプログラムをコピーする

では、次にサンプルプログラムをコピーします。
先ほど作ったesp-idfフォルダを開きます。
私の場合はDドライブ直下に作ったので、パスは
D:¥esp-idf
となります。

そして、その中のexamplesフォルダの中にget-startedフォルダがあるのでそれを開きます。
パスは以下のようになります。

D:\esp-idf\examples\get-started

その中に、blinkというLEDをチカチカさせるプログラム(Lチカ)が入っているので、そのフォルダごと
D:\esp-idf フォルダにコピーします。
下図の様な感じです。

ESP32開発ボードとLEDを接続する

ESP32-DevKitC や、ESPr Developer 32 とLEDをブレッドボード上で接続します。
ブレッドボードは、サンハヤトのSAD-101がお勧めです。

サンハヤト SAD-101 ニューブレッドボード
サンハヤト
¥529(2024/03/19 08:38時点)

LED は通常の5V程度の砲弾型LEDで良いと思います。
ただ、ESP32のGPIOには最大12mA程度の電流しか流せないので、必ず電流制限抵抗を入れてください。
LEDの電流に合わせて、1kΩ~10kΩ程度になるかと思います。

ここでは、下図の様にGPIO #23 に接続します。

写真では以下のようになります。

接続し終わったら、今度はパソコンとESP32開発ボードをUSB接続しておきます。

サンプルプログラムを修正する

では、次に、blinkプログラムのソースコードを修正します。

先ほどコピーしたblinkフォルダを開き、その中のmainフォルダを開きます。
パスは私の場合は以下です。

D:\esp-idf\blink\main

すると、下図の様になるので、blink.cというファイルをテキストエディタで開きます。
テキストエディタはできるだけメモ帳でない方が良いです。
例えばサクラエディタとか。。。

そうしたら、18行目を以下のように変更して上書き保存します。
要するに、LEDをGPIO #23に接続したので、その番号に変更するということです。

/* Blink Example

   This example code is in the Public Domain (or CC0 licensed, at your option.)

   Unless required by applicable law or agreed to in writing, this
   software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
   CONDITIONS OF ANY KIND, either express or implied.
*/
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "sdkconfig.h"

/* Can use project configuration menu (idf.py menuconfig) to choose the GPIO to blink,
   or you can edit the following line and set a number here.
*/
#define BLINK_GPIO 23

void app_main()
{
    /* Configure the IOMUX register for pad BLINK_GPIO (some pads are
       muxed to GPIO on reset already, but some default to other
       functions and need to be switched to GPIO. Consult the
       Technical Reference for a list of pads and their default
       functions.)
    */
    gpio_pad_select_gpio(BLINK_GPIO);
    /* Set the GPIO as a push/pull output */
    gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
    while(1) {
        /* Blink off (output low) */
	printf("Turning off the LED\n");
        gpio_set_level(BLINK_GPIO, 0);
        vTaskDelay(100 / portTICK_PERIOD_MS);
        /* Blink on (output high) */
	printf("Turning on the LED\n");
        gpio_set_level(BLINK_GPIO, 1);
        vTaskDelay(100 / portTICK_PERIOD_MS);
    }
}

環境設定をする

次に、ESP-IDFのblinkプログラムの環境設定をします。
ここからは、Espressif Systemsの公式サイトドキュメントの以下のページを合わせて参照してください。

https://docs.espressif.com/projects/esp-idf/en/stable/get-started/index.html#step-5-start-a-project

ESP-IDFを起動し、下図の様に

cd blink

とコマンドを入力して Enterキーを押します。
cd はchange directory コマンドです。

すると、サンプルプログラムのblinkフォルダに移動します。

そうしたら、今度は

idf.py menuconfig

と入力して、Enterキーを押します。

すると、下図の様な環境設定アプリ画面になります。

パソコンの矢印キーの「↓」を押して、下図の様に
Serial flasher config
を選択し、Enterキーを押します。

すると、下図の様な画面になるので、赤枠で囲った範囲のメニューを選択して選んで、値を変更します。

Flash SPI mode — QIO
Flash SPI speed — 80 MHz
Flash size — 4 MB

これは各々ESP32ボードに合わせれば良いです。

変更ができたら、パソコンのキーボードで「Esc」キーを2回連続して押しと、下図の様な画面になりますので、Yesを選択してEnterキーを押して設定を保存して環境設定を終了させます。
(「Esc」キーを押さなくても、下の欄の<Save>でも同じような画面になると思います。)

すると、下図の様な画面になり、設定を保存して、menuconfig画面を抜けたことになります。

ビルド(コンパイル)して、データをESP32のフラッシュへ書き込む

では、いよいよ、ESP32にビルド(コンパイル)して、データをESP32のフラッシュへ書き込みます。

その前に、パソコンとUSB接続したESP32開発ボードのCOMポート番号を調べます。
下図の様に、Windowsロゴマークを右クリックして、デバイスマネージャーを選択します。

すると、下図の様な画面になるので、
ポート(COM と LPT)
をクリックすると、そのボードのCOM番号が分かります。

次に、ESP-IDF画面に戻り、以下のflashコマンドを入力します。
flashコマンドはビルド(コンパイル)を実行して、フラッシュへ書き込みます。
私の場合はcom4だったので、以下のようにしました。

idf.py -p com4 flash

これでEnterキーを押します。

すると、ESP32のフラッシュへバイナリデータを転送します。
デフォルト設定では460800bpsで転送するようです。
完了すると、下図の様になります。

これでESP32のフラッシュへ書き込みました。
以前のMSYS2を使ったビルドよりも格段に高速になりましたね。

下図の様にLEDがチカチカすればOKです。

ビルド(コンパイル)だけする。(フラッシュに書き込まない)

参考として、フラッシュに書き込まずにビルド(コンパイル)だけしたい場合を紹介します。

下図の様に、

idf.py build

と入力して、Enterキーを押すと、コンパイルが始まります。

2~3分くらいでビルド(コンパイル)が終ると下図の様な画面になります。

これでビルドだけできました。

以上、Windows10 コマンドプロンプト環境でESP-IDFを使う方法でした。
次のページでは、従来のMSYS2環境で使うESP-IDFを紹介します。

スポンサーリンク
mgo-tecをフォローする
mgo-tec電子工作

コメント

  1. juchang より:

    mgo-tec 様

    ESP-IDFの使い方にチャレンジしてみました。
    「書込み成功したらこんな感じになります。」の所まで何とかたどり着いたのですが、Lチカ点滅には至りませんでした。
    最後の行に下記のメッセージが出ていますが素人の私にはまったく解読できません。何かコメントをいただけると幸いです。
    make[1]: *** [/home/name/my-esp-idf/esp-idf/make/prpject.mk-387 /c/msys32/home/blink/build/bootloader/bootloader.elf] エラー 1
    make *** [/home/name/my.esp-idf/esp-idf/components/bootloader/Makefile.projbuild:40: /c/msys32/home/blink/build/bootloader/bootloader.bin] エラー 2

    • mgo-tec mgo-tec より:

      juchangさん

      お返事おそくなりすみません。
      検証するのに時間がかかってしまいました。

      しばらく IDF を使っていなかったので分かりませんでした。
      ツールチェーンを最新版にしたら make が全くできませんでした。

      いろいろ試したところ、Espressif Systems の ESP-IDF設定ページにあるように、homeフォルダの中にあるユーザーフォルダ内にespフォルダやプロジェクトフォルダを入れないとうまく動作しないことがわかりました。

      それと、64bitパソコンでも、mingw32.exe を使うことです。
      これは今分かったことです。

      ということで、記事も書き換えましたので、ご参照いただき、再度試してみて下さい。
      これでも動作しない場合はまたご連絡いただけると助かります。

  2. ギター好き より:

    初めまして。

    高級言語は全くの素人です。
    ESP32を使いたくこのページに来ました。
    一応、解説通り行ったつもりですが、make menuconfigのところでエラーで止まります。
    いろいろ書いてありますが、具体的にどうしていいのか分からず、お聴きしたく書いています。
    よろしければアドバイスお願いいたします。

    以下はエラーメッセージです。

    The following Python requirements are not satisfied:
    click>=5.0
    pyelftools>=0.22
    The recommended way to install a packages is via “pacman”. Please run “pacman -Ss ” for searching the package database and if found then “pacman -S mingw-w64-i686-python2-” for installing it.
    NOTE: You may need to run “pacman -Syu” if your package database is older and run twice if the previous run updated “pacman” itself.
    Please read https://github.com/msys2/msys2/wiki/Using-packages for further information about using “pacman”
    Alternatively, you can run “C:/msys32/mingw32/bin/python.exe -m pip install –user -r C:/msys32/home/so/esp/esp-idf/requirements.txt” for resolving the issue.
    make: *** ‘menuconfig’ に必要なターゲット ‘check_python_dependencies’ を make するルールがありません. 中止.

    よろしくお願いいたします。

    • mgo-tec mgo-tec より:

      ギター好きさん

      記事をご覧いただきありがとうございます。
      今、多忙で検証する時間が無いので、今しばらくお待ちください。

      • mgo-tec mgo-tec より:

        ギター好きさん

        お待たせしました。
        インストールし直してみたのですが、当方ではそのエラーが出ないため、正直よくわかりません。
        ただ、エラーメッセージを見る限り、Pythonモジュールのインストールが不十分だったようです。
        ESP-IDFの英語マニュアルサイトを参照してみてください。
        https://docs.espressif.com/projects/esp-idf/en/stable/get-started/index.html#get-started-get-esp-idf
        そこに、必要なPythonパッケージのインストール方法が書いてあります。
        それに沿って、以下のコマンドをMSYS2ウィンドウに入力してみて下さい。

        python -m pip install --user -r $IDF_PATH/requirements.txt

        これで、Pythonパッケージがインストールされると思いますので、再度 make menuconfig を試してみて下さい。

        因みに、このコマンドを入力しなくても私の環境では問題ありませんでした。
        もしかしたら、セキュリティソフトがダウンロードを阻害している可能性がありますので、ダウンロードの際はセキュリティソフトやファイアウォール設定を解除するなりしてみるということも考えられますね。

  3. 7年ぶりの電子工作再開? より:

    ひさしぶりでしたが、うまく点滅まで行けました。
    ひとつ気になったのは、フォルダーのパスのコピーは手入力よりは、シフト押しながらの右クリックが間違いないな、と実感(笑)。
    /でなくても¥で通りました。
    そろそろ終わりのwindows7での工作でした。
    ありがとうございました。

    • mgo-tec mgo-tec より:

      ブログご覧いただき、コメントありがとうございます!
      そうですね。手入力はやってられないし、間違えますね。
      コピペが一番です。

      ESP-IDFは私は難しくて面倒なので、今は殆どArduino core for the ESP32でプログラミングしています。
      ライブラリも豊富で、お勧めですよ!
      (^^)

  4. とんかつ より:

    こんにちは
    Windows10 64bitの場合は
    esp-idf-tools-setup-2.2を
    インストールすると簡単に進めると
    公式ガイドのページにあるのですが、
    何故かインストールに”code1″で失敗します。
    はまってます!
    やはり、古いインストール手順にしないと
    行けないのか?
    この段階で暗礁に載っていても仕方ないですね。
    どうしたモノか:)

    • mgo-tec mgo-tec より:

      とんかつさん

      ご無沙汰しております。
      私も試してみましたが、
      esp-idf-tools-setup-2.2.exe
      を実行すると、ESP-IDFの展開で失敗しました。
      原因はまだ分かりません。
      とりあえず、MINGW32 で動かすことが良いのかも知れませんね。

  5. とんかつ より:

    こんにちは

    こちらの記事に従って、慎重に2ページ目の
    6.コンパイルオプションメニュー設定の入り口まで
    記事画像を見ながら進めて来ました。

    コマンドプロンプト(ming32.exe)上で
    cd /d/msys32/home/User-Name/blink
    でディレクトリを
    User-Name@xxxxx MINGW32 /d/msys32/home/user-name/blink
    となり、ここまでは、OKなのですが
    make menuconfig で

    $ make menuconfig
    Makefile:8: D:/msys32/home/User-Name/esp/esp-idf/make/project.mk: No such file or directory
    make: *** ターゲット ‘D:/msys32/home/User-Name/esp/esp-idf/make/project.mk’ を make するルールがありません. 中止.

     となります
     ディレクトリが無いかファイルが無い」というのですが・・
     この13行目の
    D:/msys32/home/User-Name/esp/esp-idf/make/project. の
    User-Name は”実際のユーザー名’になっていなくても良いのでしょうか?
    [cd ]では、実際のユーザー名で表示されているのですが。

    「メークするルールがありません」と言うのも!?ですね。

    さて、流れの5番まではOKだと思うのですが。
    どこまで戻った方が、良いでしょうか?

    なおESP-IDF はVer.4.0 を使いました。
    コマンドプロンプトは
    [ msys2.exe ] というのも有りましたので
    この6に来て、使っていましたが、結果は同じでした。

    コメント頂けると嬉しいです。

  6. とんかつ より:

    失礼しました!!

    上手く行きました!!

    Lチカ成功。

    実際、凄く時間が掛かりました。
    (メイク/ビルドに)

    上手く行かなかった、原因は
    自分でも?と思っていた正に、その点でした。
    pathの記述が間違っていました。
    コピペのままでした、
    ユーザー名を自分の名前に替えるのを
    忘れていました!!

    大変 失礼致しました。

    とても参考になりました。
    これで、先に進めます。

    感謝!!

    いや~~~スッキリしました。

    ありがとうございます。

    • mgo-tec mgo-tec より:

      あ、よかったですね。
      Windowsだと、勝手にユーザー名フォルダを作られてしまうので、面倒ですよね。
      特に私は何もしてませんが、とりあえず良かったです。

  7. juchang より:

    mgo-tec 様

    MicroPythonを使った事例がネット上にたくさんあり試したいのですが、M5Stack用MicroPythonの設定がうまくいきません。
    ESP-IDFを使ってMicroPythonの設定ができると知り、本記事のESP-IDF v4.0.1 stable版の使い方で試しているのですが、MicroPython_BUILD/BUILD.shのmenuconfigでエラーとなってしまいます。( MicroPython_BUILD の呼び出しまではできています。)
    お忙しいところ恐縮ですがアドバイスをいただけると有難いです。

    • mgo-tec mgo-tec より:

      juchangさん

      いつもブログをご覧いただき、ありがとうございます。

      せっかくご質問いただいたのに、残念ながら私はMicroPythonを全く使ったことがありません。
      ESP-IDFの設定も全く分かりません。
      ネットでザッと調べたところ、おそらく拝見されていると思いますが、以下の方のブログ記事が参考になるかも知れません。
      https://blog.hrendoh.com/setup-micropython-esp32-port/

      MycroPythonをESP-IDFで使う時は特定のバージョンのみサポートしているらしいので、4.0.1では動かないかもしれませんね。
      その場合は、MSYS2で動かすのかも知れません。
      単なる想像でしかありませんが、私が言えることはここまでです。
      お役に立てず、申し訳ございません。
      m(_ _)m

タイトルとURLをコピーしました