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」は次の記述になる。
1 2 3 4 |
[env:esp32doit-devkit-v1] platform = espressif32 board = esp32doit-devkit-v1 framework = espidf |
上記を platform.ini に追加し、また、シリアル通信速度を115200 bps にする。
このままでは、ビルドすると platformio.ini に記載されているすべてのボードがビルド対象になり、時間がかかる。使わないボードの記述を削除しても良いが、ここでは、PlatformIO IDE における複数の対象環境の指定方法 で示したように、デフォルトを設定する。「DOIT ESP32 DEVKIT V1」をデフォルトにするには次を追加することになる。
1 2 |
[platformio] env_default=esp32doit-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を直接利用した開発の敷居を低くしているように思う。
コメント
DOIT ESP32 DEVKIT V1にて早くリセットがかかってしまう件、platformio.iniのenv:esp32doit-devkit-v1の設定によるものと思われます。
スニペットではframework = espidfとなっていますが、スクリーンショットではframework = arduinoとなっています。後者でビルド・アップロードを行うと件の現象が再現しましたが、前者では正常に動作しました。