ESP-IDF4.0入門 その1 環境構築

概要

FreeRTOSの使い方を勉強して、もうちょっと内部処理を知りたくなったのでESP-IDFも調べてみました。

Arduino Coreには3.3系が使われていますが、現在の最新バージョンは4.0です。

ESP-IDFとは?

ESP32の開発元であるEspressif社の提供している、開発環境です。Arduino CoreもESP-IDFのライブラリをArduino風にラッピングしているので、内部的にはESP-IDFの関数群も利用できます。

ただし、Arduino Coreの場合には、すでにコンパイルされているライブラリを利用するので、細かいパラメータを変更することができません。

ESP-IDFを利用することで、より細かい設定が可能になります。また、どうしてもArduino Coreの場合には、ESP-IDFのバージョンが若干古いものが入っていることが多くなりますので、最新の機能はESP-IDFを利用したほうが早く利用することができます。

ESP-IDFのバージョン

  • v4.0系(最新安定バージョン)
  • v3.3系(Arduino Core利用バージョン)
  • v4.1系(現在ベータ版)

現在は主に上記の3バージョンがあります。Arduino Coreはv3.3系ですが、すでに4.0がでているので、安定バージョンのv4.0を使ってみたいと思います。

v4.1系は現在開発が進められていますが、主にESP32-S2という新しいシングルコア+RiscVのSoC向けの機能追加が多そうな感じでした。

ESP-IDFの環境構築

今回はWindows10で行っていきます。そこそこ面倒です、、、

まずは、上記の公式ドキュメントをみながら進めていきます。注意点としては、ドキュメントのバージョンに気をつけてください。

環境構築は最新版を参照したほうがいいです。環境構築後は、利用するバージョンのページをみてください。

バージョンの切り替えは左メニューの一番下をクリックすると開くメニューから変更可能です。

latestが最新バージョンです。現在だとv4.1Betaの情報が書いてあります。すべてlatestを参照してもいいのですが、若干v4.0との差があるので注意してください。

セットアップツールダウンロード

Get Started」からStep 1. Install prerequisitesの中にある「Standard Setup of Toolchain for Windows」のページを開きます。

  • esp-idf-tools-setup-2.3.exe

このページにある、esp-idf-tools-setupをダウンロードして実行することでセットアップが可能です。

ちなみにv4.0のページをみると古い2.2のリンクになっていますので、最新バージョンを使ったほうがいいです。

esp-idf-tools-setupのセットアップ

ライセンスの承諾画面。Acceptするしかありません。

利用するPythonのバージョンを指定します。Python3.7以降であれば使えるはずです。セットアップされていない場合にはこの画面からインストールも可能です。

セットアップ済みの物を使う場合には注意が必要です。virtualenvなどのバージョンによって動かないことがあるので、いつも使っているバージョンで動かなかったらESP-IDF専用にPythonをセットアップしたほうが安全です。

Gitのバージョン指定です。こちらはすでに入っていたらそれを使えばいいと思います。入っていない場合にはインストールを選択してください。

再セットアップやバージョンアップの場合には、過去のフォルダを選びますが、基本的にはDownloadを選択します。

ダウンロードするバージョンと場所を指定します。masterを選択するとGitHubの最新バージョンを取得します。今回はv4.0にしました。

ダウンロード場所が注意が必要なのですが、デフォルトはデスクトップに保存します。このフォルダはセットアップ後も使うのでデスクトップ以外の場所に保存することをおすすめします。

私は複数バージョンを入れる可能性があるので、画面みたいなフォルダに保存しました。

こちらは個人別設定などを保存するフォルダです。複数バージョンを入れるのでなければ、初期値のままでよいと思います。

すべてデフォルトのままでいいと思います。

確認画面です。フォルダを変更した場合にはフォルダ名がこのままでよいのかか確認しましょう。

ダウンロードを自動的にはじめます。

その後にインストールがはじまります。

私はPythonを新規インストールしたので、Pythonのインストールも自動ではじまりました。

エラーがでて終了しました!

ちなみにDoneと最後にでていて、unins000.exeまで追加されていればセットアップが完了しているようでした。

esp-idf-tools-setupがまだ不安定なので、このへんはもう少しバージョンがあがれば安定すると思います。

ログを表示するかと聞かれますので、どちらでも構いません。

デスクトップに上記のアイコンが増えていたらセットアップ環境です。複数のバージョンをセットアップする場合には、このアイコンをコピーしてバージョン番号を追加しておくと使い分けることができます。

環境変数設定

何個か設定をしたほうがよい環境変数がありますので、設定します。システムのプロパティから環境設定を選ぶと、個人別のユーザー変数が設定できますので、そこで設定をします。

もしくは、初期化バッチファイルに手で追記します。

PYTHONUTF8

PYTHONUTF8はPython上で常にUTF8を利用するためのオプションです。これを使わないとSJISを使ってしまい、ESP-IDFが正しく利用できません。

そのうちESP-IDFのスクリプトが修正して、常にUTF8で読み込むオプションが内部で設定される可能性がありますが、PythonでUTF8以外を使わないのであれば、常に設定しておいたほうがいい設定です。

ESPPORT

デフォルトのシリアルポートです。設定する必要はないですが、普段使っているESP32ボードのシリアルポートを設定しておくと便利です。

ここで設定しなくて、実際に転送する際にも指定できます。

ESPBAUD

デフォルトの転送速度です。無指定の場合には460800になります。

使っているESP32ボードによって使える転送速度が決まっていますので、Arduino IDEなどで使っている転送速度を設定します。

私はM5StickCを使っていますので、デフォルトの460800だと転送失敗するので、1500000を指定しています。115200を指定すると、基本的にどのボードでも転送が可能です。

また、複数のESPボードで開発する場合には指定しない方がいいみたいです。環境変数で設定するとコマンドラインで別の値を設定できなくなるみたいです。

(非推奨).espressif\idf_cmd_init.batの編集

ユーザー変数を変更したくない場合には、idf_cmd_init.batを変更することで同じことができると思います。

esp-idf\export.batを編集しても同じことはできます。

@echo off

set PYTHONUTF8=1
set ESPPORT=COM4
set ESPBAUD=1500000

:: This script is called from a shortcut (cmd.exe /k export_fallback.bat), with
:: the working directory set to an ESP-IDF directory.
:: Its purpose is to support using the "IDF Tools Directory" method of
:: installation for ESP-IDF versions older than IDF v4.0.
:: It does the same thing as "export.bat" in IDF v4.0.

上記のように上にほうに追記するか、毎回自分でsetコマンドを実行することで設定が可能です。

ビルドと転送

プロジェクトの保存場所作成

ESP-IDFのプロジェクトはどこに保存しても構いません。

mkdir %userprofile%\esp

Get Startedの通りに作るとすれば、上記の個人別領域にespフォルダを作成します。Arduinoのように%userprofile%\Documents\espなどのドキュメントフォルダに作成したほうがわかりやすいかもしれません。

プロジェクトのコピー

  • https://docs.espressif.com/projects/esp-idf/en/v4.0/get-started/index.html#get-started-start-project

上記を参考にし、hello_worldプロジェクトをコピーします。

cd %userprofile%\esp
xcopy /e /i %IDF_PATH%\examples\get-started\hello_world hello_world

cdでプロジェクトを保存するフォルダに移動します。その後にダウンロードフォルダからhello_worldプロジェクトをコピーしてきます。

プロジェクトの構成

cd ~/esp/hello_world
idf.py menuconfig

プロジェクトに移動して、構成ツールを呼び出します。

こんな画面が立ち上がります。今回は設定する項目がないのでとりあえず終了させます。基本的にはこの画面を立ち上げなくてもサンプルプロジェクトは動くようになっているはずです。

この画面が立ち上がらない場合には、環境設定がされていない可能性があります。

set PYTHONUTF8=1

上記を実行してから、再度「idf.py menuconfig」を実行してみてください。

v4.1からの変更点

idf.py set-target esp32

上記のコマンドが追加されています。これはmenuconfigの前に実行する必要があります。

idf.py set-target esp32s2

とはいえ、上記のようなESP32-S2をターゲットにしない場合には、デフォルトでesp32になっているので、必須ではありません。

また、画面もすこしきれいになっていました。

プロジェクトのビルド

idf.py build

上記でビルドができるはずです。

ファームウエアの転送

idf.py flash

環境変数が設定されている場合には、上記で転送ができます。

idf.py -p COM4 -b 115200 flash

上記のようにシリアルポートと転送レートを指定すれば、環境変数が設定されていなくても転送が可能です。

転送レートはESP32ボードによって違うので注意してください。

シリアルモニター

idf.py monitor

上記のコマンドでシリアルモニターが起動します。起動しない場合にはシリアルポートの設定を追加してみます。

idf.py -p COM4 monitor

転送レートは115200に通常固定されています。変更したい場合にはmenuconfigからシリアル出力の転送レートが指定できます。

I (12) boot: ESP-IDF v4.0-dirty 2nd stage bootloader
I (12) boot: compile time 10:23:27
I (13) boot: Enabling RNG early entropy source...
I (16) boot: SPI Speed      : 40MHz
I (20) boot: SPI Mode       : DIO
I (24) boot: SPI Flash Size : 2MB
I (28) boot: Partition Table:
(省略)
Hello world!
This is ESP32 chip with 2 CPU cores, WiFi/BT/BLE, silicon revision 1, 2MB embedded flash
Restarting in 10 seconds...
(省略)

上記のような表示がでればビルドと転送が成功しています。ちなみに初期値はフラッシュが2MBになっています。通常のESP32は4MBを内蔵しているものが多いですので、menuconfigで変更したほうがいいかもしれません。

まとめ

今回は環境構築のみです。他の記事ではセットアップは説明しませんが、ESP-IDFは他に情報があまりないので詳しく説明しました。

次回から、実際のプロジェクトファイルの中身を調べていきたいと思います。

続編

コメント

  1. @korokoro_bone( twitter ) より:

    Eclipse環境でESP-IDF使っています。
    ESP32キットではビルド→デバッグはできるのですが、M5StickCができなかったのですが、ボーレートが異なり転送コケが原因までは突き止めたのですが、どうすればよいのか術がなく困っていたところでした。
    そこで、本記事でwindows環境下で環境変数を設定することでデフォルトのボーレート設定ができるということを学びました。

    大変助かりました。ありがとうございました。

    • たなかまさゆき より:

      お役に立ててよかったです
      環境構築だとVisual Studio CodeにEspressif社の純正ESP-IDFプラグインを入れるのが多分一番かんたんかもしれません

  2. […] ②自作のNTRIPプログラムより接続安定性が高い(2021/6月追記) WiFI NTRIP MASTER使い始めて2か月経過して判った点で、M5StickCで組んだNTRIP受信プログラムよりNTRIP接続安定性が高くて、起動が速いです。流石にプロ(nebkat社)がESP-IDFで作ったプログラムなので素人Pgmよりは性能は上です。https://github.com/nebkat/esp32-xbee/releases このプログラムをESP32にinstallすれば同様に動作できるはずですが、あいにくESP-IDFが使えないので、使える方はどうぞ試してみてください。 LangShip様の解説記事https://lang-ship.com/blog/work/esp-idf-l01-intro/ […]