ArduinoIDEのコードをESP-IDFへ移行する

前回の記事で、ESP-IDF(+Eclipse)を導入しました。

今回は、今までArduinoIDEで書いていたコードを、ESP-IDFへ流用する方法についての備忘録です。

これをすると、Arduino特有のフレームワーク(setup(),loop())や関数(micros()等)をそのまま使うことができます。

基本はこちらに従って、Arduino関連のライブラリ関連をESP-IDFへ取り込めばOK。

Arduino関連ライブラリの導入

前回、テストで作成したhello_worldへ導入する例を以下に示します。

(2019/01/05追記)
「gitコマンドよくわかんないし、使うのやだなぁ」と言う方向けに「方法2:手動配置編」を追記しました。方法1と2のお好きな方で試してみてください。

方法1: gitコマンド編

シェルを立ち上げ、前回作成したhello_worldディレクトリへ移動したのち、以下のコマンドを実行します。

mkdir -p components
cd components
git clone https://github.com/espressif/arduino-esp32.git arduino
cd arduino
git submodule update --init --recursive

方法2: 手動配置編

こちらのDevelopment Statusのリンク先から、好きなバージョンのzipファイルをダウンロード。

前回作成したhello_world下にcomponentsというフォルダを作成。

先程ダウンロードしたZIPを解凍してできたフォルダを、components下に移動。

esp-idfの設定

シェルを立ち上げ、hello_world下へ移動し、以下のコマンドを実行。

make menuconfig

メニュー画面が表示されると思いますので、Arduino特有である、main.cppに記述されたsetup()とloop()関数を呼ぶための設定をします。

"Arduino Configuration"にて。

そのままビルドすると、途中でコンパイルエラーが出たので、以下の設定もしておくと吉。

"Compiler options"にて。

main.cppの作成

hello_world/main下にあった「hello_world_main.c」を削除し、代わりに「main.cpp」(.cppにすることに注意)を作成します。内容は以下。

#include "Arduino.h"

void setup(){
Serial.begin(115200);
}

void loop(){
Serial.println("loop");
delay(1000);
}

いつもの、ArduinoIDEで見慣れたやつですね。

ビルド&書き込み

よっしゃ、でけた!と思ったんですが、2018/04/15現在のコードだと、こちらのコード修正をいれないと、コンパイル通りません。

以上までできたら、hello_world下で以下を実行。

make flash

膨大な量のコンパイルを経て、最終的に書き込みが成功するはず!

試しにSerialで接続してみて、loopの文字が1秒間隔で出続けていれば成功です。

あとは、今まで開発していたコードをhello_world/main下にごそっともってくれば、移行完了です。

あ、ArduinoIDEで独自にライブラリを導入されていた方は、そこら辺のファイルも持っていく必要があるのでご注意を。

最後に

私のようなアマチュアのESP32開発者は、まずArduinoIDEで色々いじってみて、やりたいことが増えてきた後、ESP-IDFへ移行、という方が多いのではないかと思います。

なので、ArduinoIDEのコードを流用したい方も多いはず!ということで、記事にしてみました。

ただ、esp-idfのバージョンとの整合性が必ずしもとれていないので、今回のようにコンパイルエラーが発生したりすることがあります。

なので、ある程度臨機応変な対応が必要になるので、運よくエラーでなければラッキー、と思ってください。

以上でーす。