PlatformIO IDE for VSCode でESP-IDF を利用したESP32プログラムの開発

ESP32の複数のコアを適切に利用して並列動作させるためには、Espressif の ESP-IDF をフレームワークとして使う必要があるようだ。PlatformIO IDE for VSCode でESP32のプログラム開発ではArduinoをフレームワークとして使う場合について試したが、今回は ESP-IDF を利用した場合の動作確認をしてみた。少し時間がかかり、待つ必要がある場合もあるが、PlatformIOが自動的に必要なファイルなどをインストールしてくれるので環境設定でイライラすることがなく、楽である。

ここでは、ESP-IDFに含まれているサンプルプロジェクトの  espidf-hello-world をビルドして実行する。

PlatformIO IDE のインストールまでは、PlatformIO IDE for VSCode でESP32のプログラム開発 に書いた内容と基本的に同じだが、Visual Studio Code をインストール時にGitがインストールされていない状況から始めた例を示す。Platform IDE がインストール済みなら プラットフォームのインストール から、Platform としてEspressif32 がインストール済みなら サンプルプロジェクトのインポート から始めればよい。

Visual Studio Code インストール直後の起動

言語パック

日本語表示をする場合には、次の[インストールして再起動(Install and Restart)]をクリックして言語パックをインストールする。

Git

Git がインストールされていない場合には上記のようにGitが見つからないという警告が表示される。

必要に応じて次の[Download Git]をクリックし、Git をダウンロードしてインストールする。

Gitをインストールして再起動すると次のようなメッセージが表示され、Gitがうまく使えるようになったことがわかる。

PlatformIO IDE のインストール

次に PlatformIO IDE のインストールを行う。

VSCodeウィンドウの一番左にあるアクティビティバーの拡張機能  (Ctrl-Shift-X)を選択する。

サイドバーの検索窓に platformio を入力して検索する。

しばらくすると候補が表示される。

候補から[PlatformIO IDE]を選択する。

選択すると次のように表示されるので、[インストール]ボタンをクリックして、インストールを開始する。

インストールが開始されたらしばらく待つ。

インストールができたら、次のようになるので、[再読み込み]ボタンをクリックして有効化する。

再読み込みされると次のような表示になるが、この時にステータスバーが PlatformIO: Installing PlatformIO IDE … なら、まだインストール中なので別の作業はしない。

右下の出力ウィンドウを大きくすると次のように、終了するまでこのウィンドウを閉じたり、他のフォルダーを開いたりするなというメッセージが出ている。

正常にPlatformIO IDE のインストールが終わったら次のようなメッセージが表示され、ウィンドウのリロードが促される。

リロードする前に、右下の出力パネルにも[PlatformIO IDE installed successfully]が表示されていることを確認すると、より良い。

一方、を表示したままだと、ウィンドウの一番下のステータスバーが PlatformIO: Installing PlatformIO IDE … のままのようであり、それが消えるのを待っていると時間を無駄にする(無駄にした :-<)。

次のように表示された場合には、[ウィンドウの再読み込み]ボタンをクリックして更新する。

しばらく待っていると次のようにPIO Home が表示される。

プラットフォームのインストール

プラットフォーム(Espressif32)がインストールされていない場合に、PIO Home の [Project Examples]ボタンをクリックすると以下のように表示され、プラットフォームのインストールが促される。

(PIO Homeの Platform ボタン をクリックし、そこからまずプラットフォームをインストールしても良い。)

組み込み用プロセッサであるESP32のプラットフォームをインストールするので[Install Embedded Platform]をクリックする。

次のような画面になるので、しばらく待つ。

検索窓が表示されたら、ESP32を入力する。そうすると Espressif 32 が候補として表示される。

Espressif 32 をクリックする。

次のような画面になるので、[Install]ボタンをクリックしてプラットフォームのインストールを開始する。

インストール中は次のように表示される。

インストールが完了すれば次のようになる。

[OK]ボタンを押してパネルを消す。

Espressif 32 のプラットフォームをインストールすると Arduino と ESP-IDFの両者のフレームワークがインストールされるようである。

サンプルプロジェクトのインポート

PIO Home の [Project Examples]ボタンをクリックする。

次のような [Import Project Example]パネルが表示される。

Select an Example … の検索窓をクリックすると候補が表示される。

ここでは、espidf-hello-world を選択する。

[Import]ボタンをクリックしてインポートを開始する。

自動的に必要なファイルのインストールもされるので、完了を待つ。

インポートが完了するとサイドバーのエクスプローラーにプロジェクトが表示される。

サンプルプロジェクトのビルド

platformio.ini の編集

まず、ビルドの準備として platformio.ini を編集する。

ここでは、PlatformIO IDE for VSCode でESP32のプログラム開発 と同様にターゲットのボードとして「DOIT ESP32 DEVKIT V1」を使用するとする。

PlatformIO IDE for VSCode でESP32のプログラム開発 から「DOIT ESP32 DEVKIT V1」は次の記述になる。


上記を platform.ini に追加し、また、シリアル通信速度を115200 bps にする。

このままでは、ビルドすると platformio.ini に記載されているすべてのボードがビルド対象になり、時間がかかる。使わないボードの記述を削除しても良いが、ここでは、PlatformIO IDE における複数の対象環境の指定方法 で示したように、デフォルトを設定する。「DOIT ESP32 DEVKIT V1」をデフォルトにするには次を追加することになる。


ビルド

ステータスバーのビルドアイコン をクリックしてビルドする。

次のように順次コンパイルなどが進む。

 

正常にビルドできれば以下のようになる。

アップロード

正常にビルドができたらプログラムをボードにアップロードする。

ステータスバーのアップロードアイコン  をクリックする。もちろん、ボードをPCに接続しておく必要がある。

次のようになればアップロード完了。

シリアルモニタアイコン  をクリックしてシリアルモニタを開く。

動作確認

Hello world! とプロセッサの情報が表示されれば、ビルドしたプログラムが実行されていることがわかる。

不具合

DOIT ESP32 DEVKIT V1 ボードで試したら、上記の出力メッセージの 「Restarting in X seconds … 」が次々と速く表示され、1秒間隔くらいでリセットが行われている。本来なら10秒ごとにリセットされるはず。プログラム中の portTICK_PERIOD_MS の値の設定がどこかでおかしくなっているようだ。ボードに対する FreeRTOS のなんらかの定数の設定がおかしいのかもしれない。

別の環境で MH-ET Live ESP32 minikit を試したら10秒間隔でリセットされた。2種類のボードで違う挙動をする原因は調べていない。

まとめ

PlatformIO IDE for VSCode を使えば、ESP-IDFのためのインストールなどの環境設定もArduino と同様にほぼ自動的に行われる。GUI環境での開発もできるので ESP-IDFを直接利用した開発の敷居を低くしているように思う。

 ただ、ESP-IDF を利用して並列動作するプログラムを作成するには、ESP-IDFのAPIを理解するだけではなく、 FreeRTOS を理解することも必要なので少し時間がかかりそうである。

コメント

  1. espおじさん より:

    DOIT ESP32 DEVKIT V1にて早くリセットがかかってしまう件、platformio.iniのenv:esp32doit-devkit-v1の設定によるものと思われます。
    スニペットではframework = espidfとなっていますが、スクリーンショットではframework = arduinoとなっています。後者でビルド・アップロードを行うと件の現象が再現しましたが、前者では正常に動作しました。