VSCodeのESP-IDF拡張機能「Espressif IDF」を使ってみる

| 4 min read
Author: shuichi-takatsu shuichi-takatsuの画像

以前のIoT記事にてArduino IDEを紹介しましたが、いつも使用しているVSCode(Visual Studio Code)でESP32のプログラムを作成できたら便利だなと思っていました。
今回はVSCodeでESP32のプログラムが作成できる ESP-IDF拡張機能「Espressif IDF」を紹介します。

ESP-IDF とは

#

ESP-IDF は”ESP-IoT Development Framework” の略です。
ESP32を開発した Espressif Systems 社が公開しているESP32向け開発環境です。
今回はこの「ESP-IDF」をVSCodeから使用してみます。

ESP-IDF拡張機能「Espressif IDF」

#

VSCode で ESP-IDF拡張機能「Espressif IDF」を検索してインストールします。

VSCodeを起動すると「ESP-IDF Setup」が表示されます。

上記の画面が表示されない場合はVSCodeのコマンドパレットで「>ESP」と入力します。
以下のような選択肢が表示されますので ESP-IDF Welcome を選択します。

次に「configure extension」を選択します。

「choose a setup mode」で EXPRESS を選択します。

以下の画面にて

  • Select download server
  • Select ESP-IDF version
  • Enter ESP-IDF directory (IDF_PATH)
  • Enter ESP-IDF Tools directory (IDF_TOOLS_PATH)

を設定します。

今回は以下のように設定しました。

項目
download server Github
ESP-IDF version v5.0
ESP-IDF directory (IDF_PATH) C:\Users<ログインユーザ>\esp
ESP-IDF Tools directory (IDF_TOOLS_PATH) C:\Espressif

上記の設定でインストールします。

インストールが完了するまでに10分ほど時間を要します。

上記のような画面になればインストール完了です。

ESP32「Hello World」サンプル作成

#

Welcome画面から「Show examples」を選択します。

現環境の「ESP-IDF」のパスを選択します。

「hello world」サンプルを選択し、プロジェクトを作成します。

以下のようなプロジェクトが作成されます。

画面左下の「ESP-IDF Set Espressif device target」をクリックします。

「esp32」を選択します。(接続しているIoTデバイスはESP32 LOLIN D32です)

「ESP32 chip」を選択します。

「ESP-IDF Build project」をクリックします。

Buildが開始されます。(初回はかなり時間がかかります)

Buildが完了したら、「ESP-IDF Flash device」をクリックします。

「ESP-IDF select Flash method」で「UART」が選択されていない場合は「UART」を選択します。(ESP32とPCはUSBで接続しています)

USB(仮想COMポート)経由でプログラムがESP32のメモリに書き込まれます。

モニターで動作を確認します。
「ESP-IDF Monitor deivce」をクリックします。

仮想COMポート経由で「hello, world!」の文字列が出力されているのがわかります。

ソースコードを覗いてみる

#

hello world のCプログラムを覗いてみます。

/*
* SPDX-FileCopyrightText: 2010-2022 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: CC0-1.0
*/


#include <stdio.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_chip_info.h"
#include "esp_flash.h"

void app_main(void)
{
printf("Hello world!\n");

/* Print chip information */
esp_chip_info_t chip_info;
uint32_t flash_size;
esp_chip_info(&chip_info);
printf("This is %s chip with %d CPU core(s), WiFi%s%s, ",
CONFIG_IDF_TARGET,
chip_info.cores,
(chip_info.features & CHIP_FEATURE_BT) ? "/BT" : "",
(chip_info.features & CHIP_FEATURE_BLE) ? "/BLE" : "");

unsigned major_rev = chip_info.revision / 100;
unsigned minor_rev = chip_info.revision % 100;
printf("silicon revision v%d.%d, ", major_rev, minor_rev);
if(esp_flash_get_size(NULL, &flash_size) != ESP_OK) {
printf("Get flash size failed");
return;
}

printf("%uMB %s flash\n", flash_size / (1024 * 1024),
(chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");

printf("Minimum free heap size: %d bytes\n", esp_get_minimum_free_heap_size());

for (int i = 10; i >= 0; i--) {
printf("Restarting in %d seconds...\n", i);
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
printf("Restarting now.\n");
fflush(stdout);
esp_restart();
}

ヘッダ部分を見るとFreeRTOSが利用されているのがわかります。
こんなところでもFreeRTOSは利用されているのですね。

まとめ

#

ここまで VSCode拡張機能「Espressif IDF」を”すんなり”インストールできたように見えますが、この環境を構築するまで色々と問題がありました。
ここから単独のESP-IDFインストーラーをダウンロードできますが、最初からESP-IDF開発環境をインストールしているとVSCode拡張機能が正しく動作しませんでした。
理由はわかっていませんが、ESP-IDFがインストールされていない状態でVSCode拡張機能をセットアップすると、セットアップ中にESP-IDFのランタイム部分がインストールされるようです。
(回避策が分かるまで筆者は何度もインストール・アンインストールを繰り返すことになりました)
単にESP32のCプログラムを作成したいだけなら Arduino IDEで十分だなと感じました。
ESP32+Rustの開発環境が構築できたらご報告したいと思います。

豆蔵デベロッパーサイト - 先週のアクセスランキング
  1. 基本から理解するJWTとJWT認証の仕組み (2022-12-08)
  2. AWS認定資格を12個すべて取得したので勉強したことなどをまとめます (2022-12-12)
  3. Nuxt3入門(第4回) - Nuxtのルーティングを理解する (2022-10-09)
  4. Backstageで開発者ポータルサイトを構築する - 導入編 (2022-04-29)
  5. Nuxt3入門(第8回) - Nuxt3のuseStateでコンポーネント間で状態を共有する (2022-10-28)
  6. Viteベースの高速テスティングフレームワークVitestを使ってみる (2022-12-28)
  7. ORマッパーのTypeORMをTypeScriptで使う (2022-07-27)
  8. Nuxt3入門(第1回) - Nuxtがサポートするレンダリングモードを理解する (2022-09-25)
  9. GitHub Actions - 構成変数(環境変数)が外部設定できるようになったので用途を整理する (2023-01-16)
  10. Jest再入門 - 関数・モジュールモック編 (2022-07-03)