MacでESP32のLチカ、Arduino IDE版から続いて、ESP-IDFでのやり方です。
2019年2月20日に再確認して更新しました。
2019年9月20日追記:MacBook Air 13での不具合。右側USBポートだと認識できないDevボードあり。AliExpressで入手した一枚$1.90のもの。
2019年12月27日追記:アプリテンプレートがLチカではなくhello worldになっていたので、アプリ変更
##開発環境を作ります
###ツールチェインを設定
これまた本家Espressif Systemsのgithubページの解説が丁寧。
"Set up of Toolchain for Mac OS"
githubのREAD.MEでも良いし、
https://github.com/espressif/esp-idf/blob/master/docs/macos-setup.rst (リンク切れ)
https://github.com/espressif/esp-idf/blob/master/docs/en/get-started/macos-setup.rst
それが収容されているesp-idfのページでも良し。
http://esp-idf.readthedocs.io/en/latest/macos-setup.html (リンク切れ)
###シリアル通信ツール(Python)をインストール
pipとpyserialがない場合はインストールしましょう。
sudo easy_install pip
sudo pip install pyserial
###ツールの置き場所を作って、ダウンロード、展開
mkdir -p ~/esp
cd ~/esp
curl -O https://dl.espressif.com/dl/xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz
tar -xzf xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz
(2019-2-20: URLを更新しました。その時の最新版をゲットしましょう。
Macは入れないとwgetが無いのでcurlに変えました。
wgetが欲しいときは、brew install wget
で。homebrewもないときは。。https://brew.sh/index_ja へ。)
###パスを通します。
~/.bash_profile
を編集して以下の行を追加。
export PATH=$HOME/esp/xtensa-esp32-elf/bin:$PATH
export IDF_PATH=~/esp/esp-idf
###ESP-IDFをゲット
cd ~/esp
git clone --recursive https://github.com/espressif/esp-idf.git
###pythonパッケージをインストール
python -m pip install --user -r $IDF_PATH/requirements.txt
##マイアプリを作ります
###Lチカのテンプレートをゲット
追記:2019年12月27日
なんと、テンプレートの中のLチカが無くなってhello worldになってました。
代わりにesp-idf/examples/get-started/blink/main/blink.cを使ってください。
make menuconfigでGPIOナンバーをセットしてflash!
cd ~/esp
git clone https://github.com/espressif/esp-idf-template.git myapp
###LEDのGPIO番号を変更
プログラム本体は、 ~/esp/myapp/main/main.c
です。
編集して、 GPIO_NUM_4
を GPIO_NUM_2
に変えます。
##ビルドして、書き込み!
cd ~/esp/myapp
make flash
初回にmake menuconfig
が起動されます。
いろいろ設定する項目がありますが、とりあえず、 Serial flasher config
のみで、オッケー。
- Default baud rate (921600 baud)とします。
-
Default serial port
を/dev/cu.SLAB_USBtoUART
に設定。
シリアルポート設定文字列の確認は以下のコマンドで。Arduino IDEやVirtualBoxなどが起動中だとポートが占有されていて、Macから見えない時があります。
ls /dev/cu.*
menuconfigをうろうろすると、Bluetoothまだ無いよとか(2017/02/10当時)、OTA用のパーティションを切る設定、OpenSSL設定、CPU速度240MHzとか、わかります。
ビルドは、結構時間がかかります。終わったら、esptool.pyが起動して書き込みが始まります。
このとき、前もって書き込みモードにしてあげないと通信エラーになる時があります。書き込みモードにするには、[RST]ボタンと[KEY]ボタンを押して、[RST]ボタンから離す。また、Arduino IDEやVirtualBoxなどが起動中だとポートが占有されていますというエラーになる時もあります。
以降は、main.c
の編集、make flash
の繰り返し(地獄 or 天国)。
###書き込み成功パターン
(2019-02-20: esptool.py v2.6になっています。)
server:myapp tsuji$ make flash
Flashing binaries to serial port /dev/cu.SLAB_USBtoUART (app at offset 0x10000)...
esptool.py v2.0-beta1
Connecting......
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Attaching SPI flash...
Configuring flash size...
Auto-detected Flash size: 4MB
Flash params set to 0x022f
Compressed 9504 bytes to 5656...
Wrote 9504 bytes (5656 compressed) at 0x00001000 in 0.1 seconds (effective 887.3 kbit/s)...
Hash of data verified.
Compressed 488048 bytes to 247504...
Wrote 488048 bytes (247504 compressed) at 0x00010000 in 5.1 seconds (effective 758.3 kbit/s)...
Hash of data verified.
###書き込み失敗パターン
書き込みモードになっていない時。
server:myapp tsuji$ make flash
CC main.o
AR libmain.a
LD app-template.elf
esptool.py v2.0-beta1
Flashing binaries to serial port /dev/cu.SLAB_USBtoUART (app at offset 0x10000)...
esptool.py v2.0-beta1
Connecting...........................................
A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header
make: *** [flash] Error 2
追記:ESP32でLチカシリーズ、第3弾はこちら。ESP32 ROM BASICでhello world & Lチカ