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ディレクトリへ移動したのち、以下のコマンドを実行します。
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下へ移動し、以下のコマンドを実行。
メニュー画面が表示されると思いますので、Arduino特有である、main.cppに記述されたsetup()とloop()関数を呼ぶための設定をします。
"Arduino Configuration"にて。
そのままビルドすると、途中でコンパイルエラーが出たので、以下の設定もしておくと吉。
"Compiler options"にて。
main.cppの作成
hello_world/main下にあった「hello_world_main.c」を削除し、代わりに「main.cpp」(.cppにすることに注意)を作成します。内容は以下。
void setup(){
Serial.begin(115200);
}
void loop(){
Serial.println("loop");
delay(1000);
}
いつもの、ArduinoIDEで見慣れたやつですね。
ビルド&書き込み
よっしゃ、でけた!と思ったんですが、2018/04/15現在のコードだと、こちらのコード修正をいれないと、コンパイル通りません。
以上までできたら、hello_world下で以下を実行。
膨大な量のコンパイルを経て、最終的に書き込みが成功するはず!
試しにSerialで接続してみて、loopの文字が1秒間隔で出続けていれば成功です。
あとは、今まで開発していたコードをhello_world/main下にごそっともってくれば、移行完了です。
あ、ArduinoIDEで独自にライブラリを導入されていた方は、そこら辺のファイルも持っていく必要があるのでご注意を。
最後に
私のようなアマチュアのESP32開発者は、まずArduinoIDEで色々いじってみて、やりたいことが増えてきた後、ESP-IDFへ移行、という方が多いのではないかと思います。
なので、ArduinoIDEのコードを流用したい方も多いはず!ということで、記事にしてみました。
ただ、esp-idfのバージョンとの整合性が必ずしもとれていないので、今回のようにコンパイルエラーが発生したりすることがあります。
なので、ある程度臨機応変な対応が必要になるので、運よくエラーでなければラッキー、と思ってください。
以上でーす。