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

esp_idf_00

従来のMSYS2でESP-IDFを使う方法

従来はMSYS2でESP-IDFを開発していました。
これから紹介する方法は昔の方法です。
現在は大分変ってしまいました。
リンク切れがあるかも知れませんので、MSYS2で使う方法としての参考程度ということで予めご了承ください。

1.MSYS2 ツールチェーンをインストール

まず、ESP32用に構成されたMSYS2 をインストールします。
MSYS2とは、Windows で gcc コンパイラなどのUNIX コマンドが使えるソフトです。
ESP32用 のC言語ソースを gcc コンパイラでコンパイルするために、MSYS2 を使います。

まず、Espressif社の ESP-IDF Programming Guide の以下のページを開いて下さい。

Standard Setup of Toolchain for Windows

そのページの中の下図の様な Toolchain Setup のところに、ZIPファイルリンクがありますので、クリックしてダウンロードしてください。
そのページのリンクでは、2019/09/11現在では 20181001 というバージョンですが、最新版に更新されていたらそれを使って下さい。

ダウンロードしたら、解凍してください。
サイズは 1.21 GB くらいあります。かなり大きいです。
解凍するのに10分くらい時間がかかりますので覚悟してください。

解凍したら、下図のようにその中の msys32 フォルダをドライブ直下にコピーすると良いです。
なぜかというと、コマンドラインでフォルダのパスを指定するので、Cドライブ直下か、またはその他のドライブ直下の方が、長いパス名を入力しなくて済む為に使いやすいと思います。
私は下図の様にシステムドライブとは別の Dドライブ直下に置きました。
因みに、コピーするだけでも多量のファイルがある為、5分以上の長い時間がかかりますので覚悟しておいてください。

次に、msys32 フォルダを開きます。
下図の様に、64bitパソコンならば、mingw64.exe をクリックして起動し、32bitパソコンならば、mingw32.exe をクリックして起動します。
実際に起動するファイルは mingw32.exe というファイルを使います。
試したところ、64bitパソコンでも mingw32.exe を使用してください。
mingw64.exe ではうまく動作しない場合があります。

すると、下図の様な MSYS2 ウィンドウが開きます。
ここにコマンドを入力していきます。

すると、msys32フォルダの中に home フォルダがありますが、その中にご自分のユーザー名フォルダが作成されているのが分かると思います。
このフォルダの中に ESP-IDF ファイルやプロジェクトを作成していきます。
このフォルダ以外で作成するとうまく動作しませんのでご注意ください。

これで、MSYS2 のインストールは完了です。

2.ESP-IDF をGET する

ESP-IDF は GitHub で公開されていて、C言語ソースファイルやライブラリ、環境設定ファイル、Makeコマンド設定ファイルなどがパッケージになっているものです。
本家の以下のページも合わせて参照してください。

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

まず、ESP-IDF を設置するフォルダはどこでもいいのですが、
msys32/home/ご自分のユーザー フォルダの中に設置します。

下図の様に、msys32/home/ユーザーフォルダの中に esp というフォルダを作成します。

次に、msys32.exe または msys64.exe を起動して、以下のようなコマンドを入力します。
ここで注意!!
フォルダ指定はバックスラッシュ( ¥)ではなく、スラッシュを入力してください。

User-Name のところはご自分のユーザー名フォルダに書き換えてください。

cd /d/msys32/home/User-Name/esp

cd は change directory (カレントディレクトリ変更)です。
/d/ はd ドライブということです。
これを入力して、 Enter を押すと下図の様になります。

因みに、コマンドをコピペしたい場合、Windows の場合は右クリックするとコピペできます。
Ctrl+C などの一般的なショートカットは異なりますのでご注意ください。

ここで、私の場合は Toolchain を最新版(20170918)にしたときに、CDコマンドが効かず、espフォルダに移動できないという症状が出ました。
その場合、一旦 MSYS2 ウィンドウを閉じて、パソコンを再起動してみてください。

次に下図の様なコマンドを入力します。
ESP-IDFのバージョンも指定できます。
今回はv3.3としています。

git clone -b v3.3 --recursive https://github.com/espressif/esp-idf.git

2019/09/11時点の最新バージョンは、v4.0-beta1 です。
この記事に習ってインストールして、最新バージョンで不具合が出た場合、旧バージョンをインストールしてみてください。
バージョンの種類は以下で確認できます。

https://github.com/espressif/esp-idf/releases

git の説明はここでは省きますが、このコマンド群を使うと、GitHub にある最新のプログラムをダウンロードできます。
特に、

--recursive

というオプションコマンドを入れないとサブモジュールが最新版になりませんので気を付けてください。
では、それを入力すると、こうなり、GitHubからダウンロードが始まります。

ダウンロードが終了するとこうなります。


ToolChain 20180110版では、ダウンロードできない場合があります。
その場合、諦めずにもう一度同じコマンドを入力してみてください。
私の場合はそれでダウンロードできました。

(2018/1/14)

そうしたら、実際にフォルダを見てみましょう。
下図の様な感じでGitHub上の ESP-IDF と同じものができているはずです。

要するに、GitHub から ZIP ファイルをダウンロードして解凍しても同じことができるわけです。
GitHub 上のファイルのクローンをパソコン上に作ったということです。

ちなみに、Arduino core for ESP32 のようにtools フォルダに get.exe はありません。

3.MSYS2 の環境設定で ESP-IDF のパスを通すファイルを作成

次に、MSYS2 に ESP-IDF のソースファイルを参照できるようにパスを通しておく環境設定ファイルを作成します。

まず、メモ帳などのテキストエディタで以下のようなコマンドを入力します。
User-Nameのところはご自分のユーザー名フォルダに書き換えてください。

export IDF_PATH="D:/msys32/home/User-Name/esp/esp-idf"
export PATH="$PATH:/d/msys32/usr/bin:/d/msys32/mingw32/bin:/d/msys32/opt/xtensa-esp32-elf/bin"

これを以下のフォルダパスに名前をつけて保存しておきます。

d:\msys32\etc\profile.d

(ここで注意していただきたいのは、profile.d というのはフォルダです
ファイル名ではありませんのでご注意!!)

ファイル名は、ここでは、My_IDF_PATH.sh としておきます。
ファイル拡張子は .sh にしてください。
文字コードは UTF-8 にして保存します。

profile.d フォルダ内には、こんな感じで保存されます。

そうしたら、必ず MSYS2 を一旦閉じて再起動してください。

再起動したら、設定した PATH が通っているか確認します。
下図の様に

printenv IDF_PATH

と入力してエンターしてください。
そして、次に

printenv PATH

と入力してください。

toolchain-20171123 版では、下図のように export command not found というメッセージが出ます。
その場合、toolchain-20180110 版にインストールし直してください。
(2018/01/14)

このようにパスが通っていたらOKです。
警告は無視して良いようです。

4.プロジェクトの作成

では、いよいよプロジェクトを作成します。
空のプロジェクトを作成してもいいのですが、一番簡単で確実な方法は、ESP-IDF の examples からコピーして書き換えることです。

下図の様に、
msys32/home/User-Name/esp/esp-idf/examples/get-started
フォルダへ移動し、まずは LED チカチカするためのサンプルプロジェクトがある、blink フォルダを msys32/home/User-Name フォルダへコピーします。

Blink フォルダの中のmain フォルダを開くと、blink.c というC言語ソースファイルがあるので、テキストエディタで必要によってプログラムを書き換えればOKです。
要するにこれが Arduino IDE で言うスケッチのようなものです。

5.ESP32-DevKitC を接続する

ESP32-DevKitC などの ESP-WROOM-32 開発ボードを下図の様に LED と接続します。
LED は一般的な5V以下の物でOKです。
GPIO には最大12mA しか流せませんので、必ず電流制限抵抗を入れてください。

写真ではこんな感じになります。

6.コンパイルオプションメニュー設定

コンパイルする前に、コンパイルオプションを設定します。

まず、ESP32 開発ボード ( ESP-DevKitC , ESPr Developer 32 など )をパソコンとUSB接続します。
次にMSYS2 ( mingw64.exe または mingw32.exe )を再起動し、cd コマンドを以下のように入力して、blink フォルダに移動します。

cd /d/msys32/home/User-Name/blink

次に

make menuconfig

と入力します。
Enter を押すと、下図の様に make コマンドが走り始まればOKです。

しばらく経つとコンパイル設定メニューが表示されます。

キーボードの矢印カーソルキー[↓] を押して、下図の様に Serial Flasher config を選びます。

すると、下図の様な画面になりますので、Default serial port をセレクトしてEnterします。

すると、下図の様な画面になります。

ここで、Windows10 画面のタスクバーにあるWindowロゴを右クリックして、タスクマネージャーを起動します。

デバイスマネージャーを開いたら下図の様にポート(COM と LPT) をクリックすると、ESP32-DevKitC の USB COMポート番号が分かります。
ここでは3番です。

そうしたら、MSYS2 コマンドライン画面に戻り、下図の様に番号を書き換えてOKをEnterします。
Windows の場合、COM3 という形に書き換えます。
Mac の場合 /dev/cu.3 という形式らしいです。
その後、OKしてください。

そうしたら、[Esc]キーを2回連続で押すことを、何回か繰り返すと、元の画面に戻ります。

元の画面に戻ったら、キーボードの矢印カーソルキーの[↓]を押して、例えば下図のように、Example Configuration へカーソルを移動させます。

そこで、下の部分が <Select>にカーソル(青くなっている)ことを確認して、Enter を押します。
(矢印キーの [←] や [→] を押すとカーソルが移動します)

そうすると下図の様に Example Configuration メニューの中に入れます。

もう一度 Enter を押すと下図の様な画面になります。

ここで、LED を接続するところを GPIO #5 から #23 へ変更してみます。

そうしたら Enter を押します。

キーボードのEsc キーを2回連続で押すと、一つ前の画面に映ります。

そして、最初の画面まで行ったら、次に ESP32 の CPU クロック周波数を設定してみます。
LED 点滅程度ではデフォルトのままでもいいのですが、ここではあえて設定してみます。

下図の様に Component config を選択します。

下図の画面でもう一度 Enter します。

そして、下図の画面でもう一度 Enter します。

すると、下図の様な画面になるので、カーソルキーの[↓] を押して、240MHz の最速にして Enter キーを押すと決定になります。

その後、下図の画面になり、240MHz にセレクトされていることが確認できます。

次に、矢印カーソルキー[→] を押して、<Save>をセレクトして設定を保存します。
GPIO 設定と共に、今まで設定したものが保存されます。

すると、下図の画面になるので、OKをEnter します。

次に下図のように保存100% になった旨の画面が出るので Exit します。

ひたすら<Exit>していくか、[Esc] キーを2回連続で押していくと、menuconfig 画面が閉じ、設定ファイルがmake されてMSYS2コマンドウィンドウに戻ります。
カーソルが現れるまで、しばらく時間がかかります。1分くらいでしょうか。

これでコンパイルオプション設定完了です。

7.コンパイル書き込み

では、いよいよ、ESP32-DevKitC や ESPr Developer 32 などの開発ボードのフラッシュにコンパイル書き込みしていきます。

下図の様に

make flash

というコマンドを入力してEnter します。
(ここで注意!! flush と間違えないように!!私は何度もやらかしました)

するとコンパイルが始まり、コンパイル終了後、自動的に ESP32 へ書き込みします。
今回の場合、転送速度は 115200bps です。
思ったより時間がかかります。
2~3分丸々かかります。
あまりにも早く終わったら何かしらエラーがあります。
気長に待ってください。

たかが Lチカプログラムのコンパイルなのに、何でこんなに時間がかかるのかと不思議に思うかもしれません。
恐らく、全てのライブラリもコンパイルしているからだろうと思われます。
Arduino IDE ならば直ぐにコンパイル終わります。
でも、Arduino IDE も ESP-IDF でコンパイルしたライブラリを使っているのです。
つまり、ESP32用の Arduino は、ESP-IDF で作られたものと言っても過言ではありません。

手軽に操作したければ、Arduino core for ESP32。
全ての機能と、ライブラリを自分の好きな設定でコンパイルしたければ ESP-IDF と言った感じですね。

というわけで、書込み成功したらこんな感じになります。

実際にLED がチカチカ点滅していればOKです。

以上、ESP-IDF の使い方でした。
Arduino IDE に比べてかなり面倒ですね。
ネット上に様々な方々が記事にされていますが、イマイチ分からないところがあったので、今回は自分で記事にしてみました。

その他、参考にさせていただいたサイトは以下の通りです。
情報ありがとうございました。
m(_ _)m

rukihenaさん
ESP32(ESP-WROOM-32)でLチカ (WindowsでESP-IDF使用)

T-YOSHさん
WROOM-32 セットアップ

コメント

  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をコピーしました