MacでESP32のLチカ（ESP-IDF版）2019-02-20

MacでESP32のLチカ、[Arduino IDE版](http://qiita.com/naohiro2g/items/b8baa3f0e1a880ae9d0a)から続いて、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~~ （リンク切れ）

https://docs.espressif.com/projects/esp-idf/en/latest/get-started/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チカ](http://qiita.com/naohiro2g/items/1ddb03e8647f2b3b2d38)