このところ、VS Code+PlatformIOを使わせていただき、M5StackそしてESP32 DevKitCと「ESP32系」でビルドを何回かやってきました。しかし、フレームワークは毎度おなじみArduino。Arduinoは便利で大好きですが、ESP32の場合「本格的にRTOS」するならばArduinoの下に隠れているFreeRTOSに触れる環境、ESP-IDFを使えるようにせねばなりませぬ。メンドイな~と思っていたのですが、PlatformIOにお願いすれば、何もメンドイことは無かったのでした。これまたお楽で結構。
※「鳥なき里のマイコン屋」投稿順Indexはこちら
ご本家ESP-IDFのGet Startedに行けば、ESP-IDFのセットアップ手順(ビルドツールはCmakeとNinja、IDEはEclipse)が書かれています。しかし、PlatformIOでのセットアップ手順はそれとは異なりますのでご注意を(というよりほとんど何も考えなくても大丈夫)また、PlatformIOのESP-IDFのページにもCmakeのためにCmakeLists.txtを配置するように書かれていたのですが、実際にやってみた限りでは不要。なんでだろ?
例によって、VS CodeからPlatformIOのホームを開き、PlatformIOのProject Wizardを開きます。前回、前々回と同様、ESP32 DevkitCがターゲットボードなので、Boardの指定はEspressif ESP32 Dev Moduleです。しかし、次のFrameworkの欄が違います。今までArduinoを指定していたのですが、プルダウンメニューから現れるもう一つの選択肢
ESP-IDF
常々、PlatformIOの凄いところに感服するのは、この指定だけで
ビルドなどの環境できてしまう
ということであります。どこかのサイトからあれこれ取ってくることもない。ただプルダウンメニューで指定するだけ。例によって初回はダウンロードに多少時間が掛かりますが、大した時間ではありません。完了すれば、プロジェクトフォルダ(今回はHELLOIDFというプロジェクト名にいたしました)がセットアップされています。ここで1点Arduinoと異なるのが、ソースディレクトリはあるのだけれど、ソースコードのファイルは用意してくれてない事です。Arduinoの場合、キメウチの2大関数 setup()とloop()が必要なので、どちらも中身は空ですが用意済、直ぐに書き込めるようになっています。が、ESP-IDFの場合、そういうキメウチはなく、自分でファイルを用意せねばなりません。イマイチはっきりしたことが書かれていないのですが、つらつらファイルを見るに
main.c
という名のファイルの中に、app_main()という名で自前のアプリのメイン関数を用意いたしました。これでのでビルドできたので良いのでしょう。前回、前々回と使ったDevKitCが刺さっている同じブレッドボードをターゲットに、ほぼ前々回と同等のシンプルなLチカプログラムを用意しました。ソース自体は、インタフェース誌のESP32特集に掲載されていたものを原型にしたのですが、そのままだと型違いで警告が出るので、無理やりキャストして乗り越えてしまいました。多分、もっと然るべき方法があるのでしょうが。ほとんど前々回と同じLチカコードなのですが、Arduinoプラットフォームの前々回のコードと比較すると、ほとんど等価でも大分厳めしい感じになります。当然か、FreeRTOSの関数直接呼んでいるし。。。
ビルドには、結構時間かかります。眺めているとOSの各種コンポーネントを次々にビルドしています。これまたショウガナイ。でも、クリック一発でちゃんとビルド成功。こんな感じ。
ちょっと気になるところがあったので、main.cを修正し、今度はそのままボードにアップロードかけてみます。以下の感じで、main.cがコンパイルされ、リンクされて、アップロード。これまたクリック一発でOK。
動きました。動いているところは、前回、前々回と変わりませぬので写真は省略いたします。でもま、これでESP-IDF環境でFreeRTOSできるようになりました。FreeRTOSの続きは「モダンOSのお砂場」シリーズの方で。