最近、STM32を学んでいて、周囲の人々にESP32を使用してもらいましたが、ESP32には公式なIDEがないため、多くの人がどのように始めるのかわからなかったのです。
この記事では、STM32の視点からESP32の環境について解説し、STM32と同じようにESP32を開発・学ぶ方法を教えます。
STM32とESP32の環境は異なります。STM32はKeilなどの統合開発環境(IDE)で開発・コンパイル・ダウンロード・デバッグが可能ですが、ESP32には同様のIDEがないため、自分で開発環境を構築する必要があります。これがESP32が扱いづらい理由の一つです。
ESP32環境の理解と使用
1. ESP32コードのコンパイラ選択
STM32ではKeilを使用することが多いですが、ESP32ではVSCodeとESP-IDFというツールを選択しています。VSCodeは機能豊富なコードエディタであり、多くの開発環境を構築するのに適しています。ESP-IDFは、楽天社が提供する公式な開発環境で、STM32のHALライブラリに似ていますが、より多くの機能を追加しています。これにより、直接オフィシャルAPIを呼び出すことができます。
2. コンパイル用ターミナルの選択
ESP-IDFは開発環境を提供しますが、その方法はターミナルスクリプトを利用することで、基礎ライブラリのパスを一時的にシステム環境変数に登録することで、.hファイルを参照することができます。このとき、コンパイルは新しく作成したターミナルで行います。楽天社は、Windows 10の既存のCmdやShellをデフォルトのターミナルとして提供しています。これらのターミナルをVSCodeに統合して内部でコンパイルを行うこともできます。ただし、VSCodeをESP32の専用開発環境にするようになります。興味がある場合は、以下の記事を参照してください。
私は、見た目が良く、多くの機能があります——Tabbyという第三者のターミナルを選択しました。この第三者のターミナルを使用するには、ターミナルに適切な設定が必要です。
初心者の方は、楽天社が提供する既定のターミナルを使用することをお勧めします。
3. コードのコンパイルと焼き込み
現在、基本的な開発環境を構築しました。次に、コードをコンパイルします。STM32では、ソフトウェアインターフェース上のいくつかのアイコンをクリックすればよいのですが、ESP-IDFは単なるコードベースライブラリですので、コンパイルと焼き込みは手動でコマンドラインで実行する必要があります。
ESP32の開発フロー
1. 新しいプロジェクトの作成
まずは、ターミナルで基本的なコマンドを理解しましょう。cdとは、あるパスに移動する意味です。ここでは、自分自身が設定したESP32のプロジェクトディレクトリに移動します。この状態では、前のパスが自分の設定したアドレスになっています。
次に、以下のコマンドを入力します:
idf.py create-project --path <プロジェクト名> <主関数名>
ESP32プロジェクトを作成します。作成後、lsコマンドを入力すると、自分が作成したフォルダが見えます。
次に、作成したディレクトリに移動します:
cd .\test\
ls
また、リソースマネージャーを開き、作成された内容を見ることができます。
空白部分を右クリックし、「Codeで開く」を選択します。
これで、ESP32のプロジェクトが完成しました。
2. プロジェクトの構造
VScode用必須プラグイン
VScodeでESP32を正常に編譯するには、以下の3つのプラグインが必要です。
ディレクトリ構造の説明
私の独自の詳細なプロジェクト構造を示します。
C:.
│ .gitignore
│ CMakeLists.txt //ESP-IDFはcmakeを使用してプロジェクトをリンクします。
│ README.md
│ sdkconfig //ESP-IDFの設定ファイル
│ sdkconfig.old
│
├─.vscode // VScodeの設定ファイル
│ c_cpp_properties.json
│ settings.json
│
├─build // コードのビルド出力
│
├─components // プロジェクトの各部品、類似してKeilの工程下の異なるフォルダ
│ ├─dns_server // 各部品フォルダには必ずCMakeLists.txtがあり、プログラミングにリンクされます。
│ │ CMakeLists.txt
│ │ dns_server.c
│ │ dns_server.h
│ │
│ ├─web_server
│ │ CMakeLists.txt
│ │ index.html
│ │ url.c
│ │ url.h
│ │ web_server.c
│ │ web_server.h
│ │ wifi.html
│ │
│ ├─wifi_nvs
│ │ CMakeLists.txt
│ │ wifi_nvs.c
│ │ wifi_nvs.h
│ │
│ ├─wifi_softap
│ │ CMakeLists.txt
│ │ wifi_softap.c
│ │ wifi_softap.h
│ │
│ └─wifi_station
│ CMakeLists.txt
│ wifi_station.c
│ wifi_station.h
│
└─main // 主関数のフォルダ
CMakeLists.txt
main_app.c
main_app.h
1.VScode設定ファイル夹の説明
VScodeの画面で`Ctrl`+`Shift`+`P`キーを押してコマンド入力メニューを開きます。以下のような項目を選択して、含むパスを設定します。
.vscodeファイル夹が生成され、c_cpp_properties.jsonファイルで設定します。一般的な設定コードを参照します。
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**",
"${workspaceFolder}/build/config",
"${IDF_PATH}/components/**",
"${IDF_PATH}/components/freertos/include/**",
"${IDF_PATH}/components/driver/include/**",
"${IDF_PATH}/components/log/include/**",
"${IDF_TOOLS_PATH}/tools/xtensa-esp32-elf/esp-2021r2-patch3-8.4.0/xtensa-esp32-elf/xtensa-esp32-elf/include/sys/**",
"${IDF_TOOLS_PATH}/tools/xtensa-esp32-elf/esp-2021r2-patch3-8.4.0/xtensa-esp32-elf/xtensa-esp32-elf/include/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "C:/System Tools/mingw64/bin/gcc.exe",
"cStandard": "gnu17",
"cppStandard": "gnu++14",
"intelliSenseMode": "windows-gcc-x64"
}
],
"version": 4
}
システム環境変数にも以下の2つの変数を作成します:パスは自宅でインストールしたESP-IDFのパスです。
2. 部品の追加
ESP32特有のターミナルを開き、新たに作成したプロジェクトに移動します。以下のコマンドで部品を作成します:
idf.py -C components create-component test1
test1が部品名です。
作成後、以下のように表示されます:
この時点で、プロジェクトディレクトリ下にcomponentsフォルダが生成され、その中に作成した部品フォルダが生成されています。
部品フォルダは、.c/.hファイルを追加できる 기본的な内容が含まれています。
3.CMakeLists.txtファイルの書式規則
これは少し複雑ですが、使用中に慣れていけば簡単です。
3. コンパイル・デバッグの説明
次に、コンパイルとダウンロードを行います。
最初に、プロジェクトのルートディレクトリに戻り、以下のコマンドでプロジェクトをコンパイルします:
idf.py build
初めてのコンパイルは時間がかかるので、耐えてください。
コンパイルが完了したら、以下のコマンドでダウンロードします:
idf.py -p PORT flash
PORTはダウンロード対象のデバイスポートです。ESP32の場合、公式に推奨されているダウンロード方法はシリアルダウンロードです。JTAGダウンロードも可能ですが、公式のダウンローダーを使用する必要がありますので、おすすめしません。
これで、ESP32の世界へようこそです。
ESP32_IDFのコマンド説明
1. 基本コマンド
| 機能 | コマンド |
|---|---|
| 設定画面 | idf.py menuconfig |
| プロジェクトのクリーンアップ | idf.py fullclean |
| コンパイル | idf.py build |
| ダウンロード | idf.py -p PORT flash |
| ポートの監視 | idf.py -p PORT monitor |
| Flashの全消去とダウンロード | idf.py (-p PORT) erase_flash |
| コンパイル+ダウンロード+監視 | idf.py -p PORT build flash monitor |
| 目標チップの設定(デフォルトはESP32) | idf.py set-target <チップ名> |
2. 新しいプロジェクトの開始
idf.py create-project --path <プロジェクト名> <主関数名>
このコマンドは<プロジェクト名>ディレクトリ下に<主関数名>という新しいプロジェクトを作成します。
3. 新しい部品の作成
idf.py -C components create-component <部品名>
この例では、現在のワークスペースディレクトリの子ディレクトリcomponentsに新しい部品を作成します。
既存のプロジェクトで部品を新しい場所に移動して上書きする場合、プロジェクトは自動的に新しい部品のパスを認識しません。部品の構造が見えるように、idf.py reconfigureコマンドを実行するか、プロジェクトの構築ファイルを削除してから再度構築してください。