Help us understand the problem. What is going on with this article?

MacでESP32のLチカ(ESP-IDF版)2019-02-20

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 (リンク切れ)

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_4GPIO_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チカ

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away