3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ESP-IDFで、Arduino-ESP32 のプログラムをビルドする。

Last updated at Posted at 2019-02-21

#これまでのあらすじ
Arduino-ESP32 のプログラムを ESP-IDF でビルドするために、以下の2つの記事のような準備をしてきた。

いよいよ本番です。

#ESP-IDF の component として Arduno-ESP32 を入れる
ESP-IDFは、「使っている Arduino-ESP32 がコンパイルされた時点のバージョンのもの」が ~/esp/esp-idf/ に入っている前提で。
(執筆時点では、ESP-IDF が master branch の commit id = abea9e4c02bb17e86298aec4e299780399e4789f、
Arduino-ESP32 が master ブランチの commit id = 5af03361775e78fc7a0721ceec198663d2f1db44 でやってます。)

###1. hello_world プロジェクトをコピーして流用 myproject とする。

$ cd ~/esp
$ cp -r $IDF_PATH/examples/get-started/hello_world ./myproject
$ cd myproject/
$ perl -pe 's/hello-world/myproject/g;' -i Makefile
$ perl -pe 's/hello-world/myproject/g;' -i CMakeLists.txt
$ rm main/hello_world_main.c

perl の2行はファイルの中身を読んで、hello-world を myproject に置換して上書きするワンライナーです。
中身は cat Makefile などで確認できます。そしてプログラムは別途用意するので hello_world_main.c は削除(rm)しておきます。

###2.コンパイルしたい .ino.cpp ファイルと必要な関連ファイル(ライブラリなど)を main/ の中に置く
「コンパイルしたい .ino.cpp ファイルと必要な関連ファイル(ライブラリなど)」の用意の仕方は別の記事 でまとめてあります。

###3.project のディレクトリの下に components ディレクトリを掘って Arduino-ESP32 のソースを git clone で入れる

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

###4.project のディレクトリの sdkconfig を Arduino-ESP32 で使っていたものにあわせる。
Windows で Arduino-ESP32 (1.0.1)使っていれば
C:\Users\username\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.1\tools\sdk\sdkconfig とかにあるので
これを myproject/ にコピーします(既にあるのを上書き)

###5.myproject/partitions.csv を、Arduino-ESP32 で指定していたパーティションに対応する csv で上書き
Arduino-IDE-ESP-Partition.png

Arduino IDE では画像のようにパーティションスキームを指定していますが、スキームに対応するパーティション定義の csv ファイルが
Windows であれば C:\Users\username\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.1\tools\partitions\ にあります。

どれがどの csv に対応しているかは、 boards.txt を No OTA (Large APP) とかで検索すれば解ります。

conf項目 Arduino IDE項目名 使う csv
あり Default(初期値) default.csv
あり Minimal (2MB FLASH) minimal.csv
あり No OTA (Large APP) no_ota.csv
あり Huge APP(3MB No OTA) huge_app.csv
あり Minimal SPIFFS (Large APPS with OTA) min_spiffs.csv
16MB Fat ffat.csv
Default (2 x 6.5 MB app, 3.6 MB SPIFFS) default_16MB.csv
Large SPIFFS (7 MB) large_spiffs_16MB.csv

自分が使ってるパーティションスキームに対応する csv ファイルが解ったら、myproject/partitions.csv にコピーして上書きします。

なお、conf 項目ありというのは、後の make menuconfig で設定出来る奴です。が、項目がない 16MB の奴をつかってる(らしい)M5Stack-FIRE などではどうなるのか?(持ってないので試せない)

とりあえず、自分はいつも No OTA でやってたので、それで。

###6. make menuconfig で設定画面開いて COMポート指定する。また、前述パーティション設定も確認する。
make menuconfig は sdkconfig を設定するためのツールを起動するコマンドです。
sdkconfig がある場所(この場合 myproject/ ) で実行します。確認/設定は3カ所。

1つめは、カーソルキー上下で Serial Flasher Config を選んで Enter おすと、先頭に Default serial port とあるので設定します。Windows なら COM1 とか。

で、Save して Exit で最初のメニューまで戻って、

2つめは Arduino Configuration。4つめにUsed partition scheme とあるので、Arduino IDE で指定していたパーティションスキームを指定します。自分は No OTA 3MB。ですが、ここ、前項で「conf項目あり」とした5種類しか選択肢がないので、それ以外の奴でやりたい場合は……わかりません!ごめんなさい!(Flash 4MB の DevKitC しか持ってないので試せない)

また、Save して Exit で最初のメニューまで戻って、

3つめは Partition table。ここは一番上のを Custom partition table にして、その次が partitions.csv になっていることを確認。
また、Save して Exit くりかえして終了。

###7. いよいよ make
コンパイラのバージョンやオプションが違うので Arduino IDE で通った書き方が ESP-IDF で通らないものがあります。
たとえば、 sprintf( str, "%d", long_int_var ) とかは %ld じゃないと怒られます。自分が書いてた範囲ではそれくらい。

エラーを排除したら無事 build/myproject.elf が出来ているはず。 make flash で書き込めます。

いろいろ苦労してここまで来たのだけど、記事は最短コースを書くので意外と大変じゃなさそうな感じにまとまった、気がしています。

#その他
sdkconfig や project file を書き換えない限り、最初からリビルドにならないので、ちょっと修正即ビルドってやる分には Arduino IDE よりかなり速いです。Arduino IDE は AVR の Arduino のビルドをする場合もあり、その後 ESP32 に戻ったらやっぱりフルリビルドなので、時間かかるけど、ESP-IDFと分けてるだけでリビルドが減りますね。

HDDに余裕があるなら、ESP-IDF を別々のフォルダに、1プロジェクトごとに1つ用意すれば時間効率良いかも!?(2つのESP32 で BLE通信するようなときは2つ欲しいと思ってた~)

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?