ESP32シリーズはEspressif Systems社のWi-Fi・Bluetooth内蔵するSoCです。
CPUは160MHz(or 240MHz)で可動する32bitのデュアルコアを内蔵し、520KBのメモリを持っています。
Wi-FiとBluetooth両方を備えており、ハイスペックなデュアルコアCPUを持っているのに非常に安価な為、世界中で人気上昇中です。
Arduino IDEにも対応しており、教育やホビー用としても扱いやすい製品です。
ESP32の開発環境はArduino IDEか公式SDKのESP-IDFが主流ですが、Arduinoだと使えない機能があったりデュアルコアの性能を活かせなかったりするそうなので、ここではESP-IDFのWindowsでの環境構築について書いていきます。
公式のマニュアルはあるのですが、全文英語だったり途中で違うページに飛んだりしてわかりにくい部分があります。
大きく分けて3つの工程となっています。
- ツールチェインの設定
- GitHubからESP-IDFの取得
- 環境変数にESP-IDFのパスを通す
目次
ツールチェインの設定
まずはツールチェインの設定です。
ツールチェインをダウンロードして保管
以下のリンク先からツールチェインをダウンロードし、展開(解凍)します。
https://dl.espressif.com/dl/esp32_win32_msys2_environment_and_toolchain-20180110.zip
展開したら中身のmsys32を公式マニュアルに合わせてCドライブの直下(C:\)に保管します。
Cドライブ直下で無くてもいいですが、マニュアルに合わせた方が不要なトラブルが防げます。
espフォルダを作成して移動
保管したらmsys32内のmingw32.exeを起動するとLinuxのターミナル環境と同じbashが開きます。
以下のコマンドを入力してespフォルダを生成し、espフォルダに移動します。
mkdir -p ~/esp
cd ~/esp
bashに慣れている人には常識ですが、pwdを入力すると現在のパスが表示されます。
ちなみにmingw32.exeを起動時の現在パスはbash上では"/home/ユーザー名"で、Windows上の実際のパスは"C:\msys32\home\ユーザー名"です。
ESP-IDFをGitHubから取得
次はSDKであるESP-IDFをGitHubから取得します。
~/espに移動したら以下のコマンドを入力してクローンを作成します。
git clone -b v3.1 --recursive https://github.com/espressif/esp-idf.git
注意事項にありますが、--recursiveのオプションは必ず付けましょう。
付けずにクローンしてしまった場合は以下のように~/esp/esp-idfフォルダに移動し、全てのサブモジュールを取得してください。
cd ~/esp/esp-idf git submodule update --init --recursive
ESP-IDFへの環境変数設定
ツールチェインは環境変数IDF_PATHを使用してESP-IDFにアクセスします。
bash上で手動で設定してもよいのですが、起動時に毎回設定するのは面倒なのでユーザープロファイルを作成してIDF_PATHを設定しておきましょう。
C:\msys32\etc\profile.d\フォルダ内にexport_idf_path.shという名前でテキストファイルを作成し、以下のコマンドを書いておきます。
この作業はbash上でやるより普通にWindows上で操作した方が楽です。
export IDF_PATH="C:/msys32/home/<ユーザー名>/esp/esp-idf"
このファイルはmingw32.exeの起動時に読み込まれる為、一度bashを終了して再度起動します。
正しくファイル作成が出来ていれば以下のコマンドを入力した時にパスが表示されます。
printenv IDF_PATH
パスが表示されない場合は設定出来ていませんので、export_idf_path.shの保管場所やコマンドの文字が間違っていないか等を確認しましょう。
起動時に手動で設定したい場合はexport_idf_path.shに書くコマンドをbashで入力すればOKです。
USBドライバの設定とシリアルポート確認
ESP32に書き込む前にUSBドライバの設定とシリアルポートの確認をします。
ESP32とPCのシリアル通信を確立する - 公式マニュアル -
USBケーブルをESP32のボード接続して自動的にドライバがインストールされない場合はUSB - シリアル通信の変換チップを特定してインターネットでドライバを検索してインストールします。
評価ボードの場合はモノによってドライバが異なります。
- ESP32-PICO-KIT and ESP32-DevKitC - CP210x USB to UART Bridge VCP Drivers
- ESP32-WROVER-KIT and ESP32 Demo Board - FTDI Virtual COM Port Drivers
ドライバーをダウンロードしてインストールしたらデバイスマネージャーのポート(COMとLPT)の欄に表示されます。
ここで表示されるCOMポート番号はプロジェクトをビルドした後の書き込みで使用するので控えておいてください。
ちなみに私は開発キットとしてESP32-DevKitCを使用しているのでCP210x USB to UART Bridge VCP Driversになります。
サンプルプロジェクトの実行
ESP-IDFをクローンし、環境変数の設定が出来たら一度サンプルプロジェクトをコピーしてビルド・書き込みしてみましょう。
以下のコマンドで~/espフォルダにhello_worldプロジェクトがコピーされます。
※ESP-IDFではパスのスペース(空白)は対応していません。単語を区切りたい場合は_(アンダーバー)で区切り、日本語文字などの2バイト文字も避けましょう。
cd ~/esp cp -r $IDF_PATH/examples/get-started/hello_world .
メニューから設定を変更
ビルド時や書き込みの設定をGUIのメニューから行う事ができます。
以下のコマンドを実行してhello_worldプロジェクトに移動し、メニューを表示させましょう。
cd ~/esp/hello_world make menuconfig
シリアル通信のポートがデフォルトではLinux用になっているのでWindows用に修正します。
キーボードの矢印キー↑↓でSerial flasher configを選択し、<Select>が青い状態でEnterを押します。
矢印の←→は<Select>などの項目の移動になります。
一番上のDefault serial portを選択してEnterを押し、ポートのパス設定を/dev/COMxxに修正して<OK>を選択してEnterを押します。
※COMxxはデバイスマネージャーで調べたCOM番号
設定変更したら<Save>を選択して設定を保存しましょう。
保存したら<Exit>でEnterを押してメニューを閉じます。
プロジェクトをビルドして書き込み
以下のコマンドでビルド・成功後は書き込みを行います。
これにより全てのESP-IDFコンポーネントがコンパイルされ、ブートローダ、パーティションテーブル、アプリケーションバイナリが生成され、これらのバイナリがESP32ボードに書き込まれます。
make flash
書き込みが成功すると以下のような画面になります。
書き込んで動作しているボードからはメニューで設定したCOMポートからデバッグ用のデータが出力されています。
Tera Termなどのターミナルソフトで接続してもよいですが、以下のコマンドでbashウィンドウに出力する事ができます。
make monitor
hello_worldは起動後Hello world!とデバッグ出力で表示して10秒後に再起動を繰り返すというサンプルプログラムとなっています。
Ctrl+Cでキャンセルできます。
これでビルド・書き込み環境が構築できました。
コーディングはエディタでもよいですが、デバッグもできるEclipseを使用するのがよいでしょう。
Eclipseの設定はまた別の記事にしたいと思います。