ESP-IDF のコードをサクッと書き始めるための環境を比較する

Nature Engineering Blog 祭 13日目、いよいよ最終日!というところで小ネタを投下させていただきます、ファームウェアエンジニアの田井です。

みなさん、邪魔な処理が入っていないミニマムなコードで、さくっと ESP-IDF の機能を試してみたいことってありますよね?私はあります!そんなときには、なるべく最小の労力でテストがしたいと思うのが人の性です。今回は、できるだけ労力をかけずに ESP-IDF の機能をテストする方法を比較してみました。 比較してみる方法は、下記の 3 つになります。

「サクッと書き始める」ためには何が必要でしょうか?個人的な比較ポイントはこちらの 3 点です。 とにかく!楽を!!したい!!

  • 環境のインストール・設定が簡単であること
  • 様々な ESP-IDF のバージョンを簡単に切り替えて試せること
  • ミニマムなプロジェクトを自動生成してくれること

最後に、今回は筆者の下記の環境を前提として動作確認をしております。

それでは実際に試して比較していきましょう!

PlatformIO

インストール

下記を参考に VSCode拡張機能をインストールするだけです。とっても簡単!

platformio.org

サクッとデフォルト設定でコードを試す分には、これだけで終了です。より詳細な設定は、こちらの公式ドキュメントをご参照ください。

docs.espressif.com docs.platformio.org

バージョンを指定して環境をつくる・最小プロジェクトを生成する

通常、PlatformIO では GUI から好きな Platform (ESP32) の最小プロジェクトを簡単に生成しつつ、ビルドに必要な Framework (ESP-IDF) を自動でインストールしてくれます。素晴らしいですね!

しかし、GUI からでは使用するバージョンが指定できません。そのため、CLI からバージョンを指定して最小プロジェクトを生成するようにします。

mkdir my_pio_project
cd my_pio_project
pio project init --board esp32dev --project-option "platform=espressif32@4.4.0" --project-option "framework=espidf"

ここで一つ注意があります。実は、PlatformIO 用の espressif32 platform は ESP-IDF とは別にこちらで管理されており、ESP-IDF のバージョンと 1:1 にはなりません。つまり、一部のバージョンしか使えなかったり、最新バージョンが PlatformIO に対応するまでには結構な時間がかかります (Espressif32 Platform のバージョンと ESP-IDF のバージョンの対応を確認するのにも一手間かかります)。様々なバージョンを切り替えていろいろ試したい!という今回の要望にとっては、クリティカルな問題です。。。

PlatformIO のまとめ

ESP-IDF のバージョンがいろいろ試せない、というクリティカルな問題がありましたが、その他は非常に簡単でしたね!ざっくりと要点をまとめてみます。

評価項目 PlatformIO 所感
インストール・設定の簡単さ VSCode Extension 入れるだけ
バージョン選択の自由度 対応バージョンが少なく、最新への追従も遅い
バージョン選択の簡単さ CLI の引数を変更するだけ
プロジェクト生成の簡単さ CLI 一発だけで OK
コードを書くまでの手順の少なさ 🔺 対応バージョンを探したりするのが面倒

今回の目的にはクリティカルな問題がありましたが、PlatformIO には様々な開発補助ツールがあり、 platform.ini による開発環境のカスタマイズも簡単です。特に Arduino の開発を行うときには、公式 IDE よりも断然便利です。ぜひ一度お試しください!

VSCode Extension

さて、お次は ESP-IDF 公式の VSCode Extension です。PlatformIO のように様々な機能を搭載している、期待の新人です。

docs.espressif.com

インストール

まずは VSCode に ESP-IDF 拡張機能をインストールして、様々な準備をしていきます。ほぼこちらのドキュメントどおりに進めれば大丈夫ですが、結構いろいろと設定が必要で、正直面倒くさいです。。。

github.com

バージョンを指定して環境をつくる

複数の ESP-IDF のバージョンを切り替えて試したいので、上記リンク先の 9 ~10 番あたりで、複数のバージョンを入れてみます。む、、、思ったより選択できる ESP-IDF のバージョンが少ない、、、?まあ良しとしましょう。

きっとその後に、USE EXISTING SETUP の欄に複数の IDF バージョンが出てくるはz、、、あれ? 一番最後に入れたバージョンしか選択できない、、、 じゃあもう一度 EXPRESS から使いたい ESP-IDF のバージョンを選択すればいいはz、、、すでに存在するからインストールできないですよね、そうですよね。手動で ESP-IDF Container Directory を削除し、もう一度切り替えたいバージョンをインストール (約 3 分) すれば切り替えられました! (悲しい)

もっと良い方法があるはずだと思うですが、疲れてしまったので深追いするのはやめておきます。今後の改善に期待です。

プロジェクトを生成する

上記のバージョン指定で任意のバージョンを指定できたとして、そのバージョンにおけるミニマルなプロジェクトを生成するには下記の手順が必要となります。まあまあ手間がかかりますね。

  • ESP-IDF: Show Example Projects から、ベースになるプロジェクト一覧を表示する
    • 上記の最新バージョンの設定が有効化されている必要がある
    • Select framework to use... というプロンプトがでるので Use current する (一番最後に入れたやつしか出てきません)
  • get-started > sample_project を選ぶ
  • Create project using example sample_project ボタンを押し、生成先ディレクトリを選択

ESP-IDF VSCode Extension のまとめ

使い込もうという気力が出ませんでしたが、公式拡張機能ですので、今後に期待します!!!!!! こういう用途ではなく、デバッグ等のたくさんの有用な機能があるはずですので、ぜひ試してみてください。

評価項目 PlatformIO 所感
インストール・設定の簡単さ いろいろ煩雑な手順が必要 (今後に期待)
バージョン選択の自由度 🔺 対応バージョンが少ない (今後に期待)
バージョン選択の簡単さ 再インストールが必要 (今後に期待)
プロジェクト生成の簡単さ 🔺 複雑ではないが、ステップ数が多い (今後に期待)
コードを書くまでの手順の少なさ いろいろ大変 (今後に期待)

Docker Image

ESP-IDF には、公式の Docker Image も用意されています。Docker さえあれば、コマンド一発で環境構築が完了するので、これを使わない手はありません!

docs.espressif.com

インストール

Docker さえインストールされていれば、他に環境構築は必要ありません。最高ですね!

プロジェクトを準備する

Docker は環境を準備してくれますが、プロジェクトを自動生成してくれたりはしません。これは非常に面倒で、大問題です。が、とりあえずいくつかのバージョンで使える、ミニマルなプロジェクトのリポジトリをちょっと手間をかけて準備しておけば、あとそれを clone してくれば良いのでは、、、?

こちらに準備しました!唯一の欠点解消です!こちらを clone してきて使いましょう。

github.com

git clone -b v4.x git@github.com:hideakitai/esp_idf_empty_project.git my_project

ちなみに、ESP-IDF v4.3 以降では、下記のようにして最小のプロジェクトを生成できるようです。Dockerfile などに組み込んでみるのも良いかもしれません。

idf.py create-project <my_project_name>

バージョンを指定して環境をつくる

Docker を使えば、コマンド一発でさまざまなバージョンの環境構築ができます。しかも、いろいろなバージョンのコンテナを準備してくれていますので、バリエーションも豊富で、最新バージョンも他の方法に比べてすぐに試すことができます!利用可能なバージョンは、こちらから確認できます。

hub.docker.com

これらのバージョンを使って、先ほど clone してきた、既存のプロジェクトフォルダを Docker に mount してあげます。そのなかで idf.py build やら idf.py flash monitor やらをしていけば完璧ですね。

cd /path/to/my_project
docker run --rm -it --privileged -v $PWD:/project -v /dev:/dev -w /project espressif/idf:release-v4.4

# in docker
# idf.py set-target esp32
idf.py flash monitor

Dockerfile や docker-compose をゴニョゴニョすることで、追加でいろんなコマンドを実行するなど、拡張も容易で柔軟です!

Docker Image のまとめ

評価項目 PlatformIO 所感
インストール・設定の簡単さ Docker さえあれば他は不要
バージョン選択の自由度 ほとんどのバージョンに対応
バージョン選択の簡単さ dcoker コマンドのタグの数字を変えるだけ
プロジェクト生成の簡単さ ❌ (⭕) プロジェクト生成なし (が、リポジトリを準備した)
コードを書くまでの手順の少なさ ❌ (⭕) プロジェクト生成なし (が、リポジトリを準備した)

結論

以下に今回の独断と偏見に基づく、ESP-IDF でサクッとコードを書き始めるための環境の比較をまとめます。Docker Image を活用して、いろいろな ESP-IDF の機能をテストしていきましょう!(VSCode Extension の今後に期待します)

評価項目 PlatformIO VSCode Ext. Docker
インストール・設定の簡単さ
バージョン選択の自由度 🔺
バージョン選択の簡単さ
プロジェクト生成の簡単さ 🔺 ❌ (⭕)
コードを書くまでの手順の少なさ 🔺 ❌ (⭕)

※ ( ) の部分は筆者のひと手間 (最小プロジェクトリポジトリ) を加味した公正な評価

エンジニア積極採用中です

Natureでは一緒に開発してくれる仲間を募集しています。

herp.careers

カジュアル面談も歓迎なので、ぜひお申し込みください。

herp.careers

Natureのミッション、サービス、組織や文化、福利厚生についてご興味のある方は、ぜひCulture Deckをご覧ください。

speakerdeck.com