ブログ
ESP-IDF:SDK・ビルド・Arduino との比較
ESP32 IDF とは何か、インストール方法、最初のプロジェクトの組み立て方。ESP-IDF は Espressif 公式の C/C++ SDK で、Arduino のラッパーより一段深いところまで届きます。ボードマネージャーでは物足りなくなったときに人が聞く質問に、短く答えました。
ESP32 IDF とは何ですか?
ESP-IDF(Espressif IoT Development Framework)は、このチップを作っている Espressif 社公式の C/C++ SDK です。Arduino の親しみやすいラッパーではなく、FreeRTOS、ハードウェアドライバー、idf.py ビルドシステムを手に入れます。言語でも IDE でもありません。チップ自身のドキュメントが相手にしているツールチェーンです。
ESP32 IDF をインストールするには?
Windows なら、Espressif IDE か esp-idf インストーラーが Python、Git、ツールチェーンを一度にセットアップします。Linux では、リポジトリを git clone –recursive してから install.sh と export.sh を source します。ディスク 4〜6 GB と 10〜20 分の時間を見込んでください。私の場合、2022 年製ノート PC への v5.3 インストールが 14 分でした。
ESP32 IDF にプロジェクトを入れるには?
プロジェクトは 1 つのフォルダーです。C ファイルを置く main/ ディレクトリと、一番上の CMakeLists.txt で構成します。examples/get-started にあるサンプルの 1 つをコピーし、idf.py set-target esp32s3 を一度実行してから idf.py build を実行します。Arduino 風のコードはそのままでは入りません。ESP-IDF が求めるのは app_main() であって、setup() と loop() ではありません。Arduino から来た人向けの手順は入門 FAQにあります。
boot.py を ESP32 で実行するには?
boot.py は MicroPython の起動スクリプトで、ESP-IDF には存在しない概念です。まず MicroPython を書き込み(esptool.py write_flash 0x1000 micropython.bin)、boot.py をファイルシステムにアップロードすれば、起動のたびに実行されます。ESP-IDF で boot.py を期待しているなら、それは役割違いのファームウェアです。
ESP-IDF と Arduino、どちらを使うべきですか?
どちらも動きます。答えは基板とあなたの忍耐力次第です。Arduino は sdkconfig やビルドシステムを隠してくれるラッパーです。ESP-IDF は制御を手渡し、公式ドキュメントとも一致します。公式ドキュメントは良い出来ですが、C 言語の経験を前提にしています。ディープスリープと Wi-Fi を組み合わせる用途や、製品として作るなら ESP-IDF が安全な選択。趣味のプロトタイプなら Arduino の方が早くゴールに着きます。
app_main() とは何ですか?なぜビルドがそれを要求するのですか?
すべての ESP-IDF プロジェクトは、ちょうど 1 つの app_main() を定義します。setup() と loop() の分割はなく、これがエントリーポイントです。その中で FreeRTOS タスクを作り、生かし続けます。ビルドが「undefined reference to app_main」で終わったら、その関数が足りないピースです。
sdkconfig とは何ですか?編集してもいいですか?
sdkconfig はプロジェクトの生成済み設定ファイルで、クリーンビルドのたびに再生成されます。手で編集してはいけません。idf.py menuconfig が代わりに書いてくれます。コミットすべきは sdkconfig.defaults の方です。設定がビルドにどう反映されるかは内部構造 FAQで説明しています。
「fatal error: driver/gpio.h: No such file or directory」とは何ですか?
コンポーネントの依存関係が不足しているという意味です。ヘッダー自体は SDK に存在します。あなたの CMakeLists.txt が REQUIRES でそれを宣言していないだけです。1 行で直ります。私がフォーラムでデバッグを手伝った中で最も多い ESP-IDF のコンパイルエラーです。私自身も最初のプロジェクトで深夜 2 時に遭遇しました。パニックをやめてから 20 秒で直りました。
ESP-IDF で ESP32 のボーレートを設定するには?
idf.py menuconfig を実行し、Serial flasher config → Default flash baud rate を開きます。これが「ESP-IDF で ESP32 のボーレートを設定する方法」への直接の答えです。これは書き込み速度であって、アプリの UART 速度ではありません。アプリ側のボーレートはコードで設定する UART ドライバーのパラメータで、別物です。
ESP-IDF の中で Arduino のコードを動かせますか?
動かせます。最近のコアは Arduino をオプションのコンポーネントとして同梱しており、idf.py add-dependency espressif/arduino-esp32 で取り込めます。大半は動きますが、2 つの世界を混ぜると混乱します。設定システムも 2 つ、タイマー API も 2 つありますから。プロジェクトごとに 1 つに絞りましょう。混在プロジェクトのデバッグで本領を発揮するのがデバッグ FAQです。
この記事のテーマのプロジェクトは、sensbench の無料シミュレーターでそのまま実行できます。回路は配線済み、ファームウェア同梱、アカウントもインストールも不要です。