ESP32は中国Espressif Systems社のマイコンチップ。ESP8266と同じ開発元だが、ESP8266よりもESP32の方が新しく高性能でWiFiだけでなくBluetoothも動作する。またESP8266はSDKが提供されているだけなのに対して、ESP32には純正の開発環境であるIDF(IoT Development Framework)という物が用意されている。
今回はこのIDF開発環境をUbuntuとWindows10で構築する手順と、簡単なプロジェクトをビルドしてESP32で動かす一連の手順をまとめる。ハードウエアはESP32の開発キットであるESP32 DevkitCを用いた。
IDFのインストール
Windowsの場合はオールインワンの専用インストーラが用意されており、Pythonやgitも含めて必要な物を全て一発でインストールしてくれるので楽。
IDFを手動でインストールする方法は公式ドキュメント(英語)にひととおり記載されている。以下、Ubuntuでの手順をまとめる。(もしWindowsで手動インストールする場合も概ね同じ手順でインストール出来る筈)
Python環境とgitのインストール
IDFはPythonベースで作られていおり、インストーラが中からPythonのパッケージ管理ツールpipを呼び出すので、Python環境を事前に構築しておく必要がある。インストーラはPythonの他にgitも呼ぶので一緒にインストールしておく。Ubuntuの場合はaptでインストールすればOK。
sudo apt install git python python-pip
IDFインストーラの取得とインストール実行
Pythonとgitがインストールされた状態なら、GitHubから一式持って来てシェルスクリプトのインストーラを実行するだけだ。インストーラの実行は一般ユーザ権限でOK。というかインストーラがツールをインストールする先はホームディレクトリ配下の$HOME/.espressifなので寧ろroot権限でインストーラを実行しない方が良い。
git clone https://github.com/espressif/esp-idf.git
cd esp-idf/
./install.sh
ビルドツールへのパスを通すスクリプト
インストーラと同じディレクトリにインストールしたツールへのパスを通すためのスクリプトも用意されており、ビルド前にコンソールから実行するようにする(後述)。
IDFの使い方
上記ツールのインストール時にサンプルプログラムもインストールされており、以下の公式ドキュメントにビルド方法など使い方が解説されている。
このサンプルプロジェクトをコピーして自作プロジェクトの雛形に使う事も出来るが、ここでは敢えてスクラッチからのプロジェクト作成にトライする。
ビルドシステムの詳細については公式ドキュメントに記載があるのだが、内容がとっ散らかっててちょっと分かりづらい。ドキュメントのこの辺にプロジェクトの新規作成方法が書かれており、以下公式ドキュメントから情報を拾って実機フラッシュメモリに書き込む迄の流れを整理した。
コンソールの準備
まず最初に端末エミュレータやコマンドプロンプトから上記export.shやexport.batを実行してidf.pyを始めツール群へのパスを通す。Linuxの場合は以下のように実行する(export.shを直接実行するわけではないので注意)。
source export.sh
Windowsのインストーラでインストールした場合は”ESP-IDF Command Prompt”というショートカットが作られているので、このショートカットを実行すればパスの通った状態のコマンドプロンプトになる。
プロジェクトの新規作成
idf.pyのcreate-projectコマンドを実行するとプロジェクトの雛形が自動生成される。但し、Windows版だと何故かcreate-projectコマンドが使えなかった。
idf.py create-project --path hello_path hello_project
create-projectコマンドを実行した直後のディレクトリ構成は以下のような感じ。–pathに指定したディレクトリhello_pathの下にmainというディレクトリが掘られて、その下に指定したプロジェクト名hello_projectの名前が付いた.cファイルが自動生成されている。
.
└── hello_path
├── CMakeLists.txt
└── main
├── CMakeLists.txt
└── hello_project.c
自動生成されたCソースファイル以外はディレクトリ毎にCMakeLists.txtが置かれているだけだ。自動生成されたファイルをZIPに固めた物を以下に置いておく。
Windows版の場合はcreate-projectコマンドを実行する代わりにこのZIPファイルを展開し適宜Cソースファイル名やCMakeLists.txtの中身を編集して使えば良いだろう。
ソースコードの編集
create-projectコマンドで自動生成されたCソースhello_project.cにはユーザプログラムのエントリポイントとなるapp_mainという関数が定義されているのだが、関数の中身が何も書かれていない空の状態。そこでapp_main関数に一行だけお約束のprintf文を追加したhello_project.cは以下。
#include <stdio.h>
void app_main(void)
{
printf("Hello World!\n");
}
プロジェクトの設定
上記手順で生成されたhello_pathに移動してmenuconfigコマンドを実行。
cd hello_path
idf.py menuconfig
すると以下のようなCUI画面が立ち上がり、コンパイラオプションやESP32の内蔵ペリフェラルなどがメニュー操作によって設定出来る。設定が終わったらESCキーで抜ける。
menuconfig実行後のディレクトリ構造は以下のようになる。諸々の設定ファイルやライブラリ等非常に沢山のファイルがbuild以下に自動でダウンロード/生成される。
.
└── hello_path
├── CMakeLists.txt
├── build
│ ├── CMakeCache.txt
│ ├── CMakeFiles
│ │ ├── 3.10.2
│ │ │ ├── CMakeASMCompiler.cmake
: : : (略)
│ ├── partition_table-flash_args
│ └── project_description.json
├── main
│ ├── CMakeLists.txt
│ └── hello_project.c
└── sdkconfig
プロジェクトのビルド
buildコマンドでプロジェクトのビルドを行う。
idf.py build
次に説明するflashコマンドをいきなり実行しても、中から自動でbuildコマンド相当の処理が実行されるので、buildコマンドは実は省略可能だったりする。
プログラムの書き込み
flashコマンドを使うと、ESP32のフラッシュメモリへプログラムの書き込みが出来る。Linux版の場合は、
idf.py -p /dev/ttyUSB0 -b 115200 flash
Windows版の場合は、
idf.py -p COM8 -b 115200 flash
自分の環境ではLinuxでは問題無く書込み出来るのに、Windowsだとコマンド実行後ハードウエアのリセットボタンを押さないと書込みが始まらない時があった(ハードは同じESP32 DevkitCを使っているのに)。フラッシュメモリへの書き込み動作はidf.pyから呼び出されるesptool.pyが行っているため、IDFの問題と言うよりesptool.pyのWindowsでの動作に問題がある可能性が高い。
プログラムの実行
monitorコマンドを実行すると、シリアルポート経由でESP32と接続され自動でリセットがかかる。コンソールにはブートメッセージの後で”Hello World!”の文字列が表示されるので、プログラムが問題なく実行された事が確認出来る。
idf.py -p /dev/ttyUSB0 monitor
monitorコマンドを終了させるにはキーボードで”Ctrl”と”]”を同時に押す。
monitorコマンドを使わずに、シリアルコンソールで接続してもOKだが、自動でリセットがかからないためハードウエアのリセットボタンを押す必要がある。
picocom --b 115200 /dev/ttyUSB0
IDFのバージョンについて
開発版vs安定版
IDFのバージョンは–versionオプションで調べることが出来る。
idf.py --version
上記手順でインストールしたIDFのバージョンを調べてみると、Windows版は4.1でLinux版は4.3だった。Linux版はgitから最新の開発版を持ってくるのに対し、インストーラを使ったWindows版は安定版がインストールされたという事のようだ。製品に載せる場合は安定版を使った方が良いとEspressifのページには書かれている。
サポート期間について
ESP-IDFのサポート期間についての考え方もEspressifのページに書かれている。v4.1以降に関してはサポート期間は30ヶ月で、それ以前のバージョンについてはこのページに期限が明示されている。
v3.1.xやv3.2.xのサポート期限は2020年の10月なので既にサポート期限切れであり、特別な理由が無い限りは使わないほうが良いだろう。現在はv3.x系とv4.x系の過渡期のようで、v3.x系最後のリリースであるv3.3のサポート期限は2022年2月であり、サポート期間内であればバグフィックス版がリリースされると明記されている。
まとめ
ESP32の純正開発環境ESP-IDFインストールして、簡単なプログラムをビルド/実機動作させる所までをまとめた。ESP-IDFはArudinoのようなGUIは無いものの、コマンドラインから簡単にビルドやフラッシュ書込みが出来て使い勝手は良いと感じた。ただ自分の環境ではWindows版はLinux版よりも使える機能が少なかったり(プロジェクトの新規作成など)フラッシュ書込みにリセットボタンを押す必要があったりと問題点も見受けられた。インストールしたLinux版はv4.3だったのに対しWindows版はv4.1だったので使える機能が少ない可能性もあるが、詳しいところは不明だ。
ESP32の開発環境は他にもArduinoやMicroPython等があるのでおいおい試していきたい。
コメント