ESP32-WROOM-32 ?
技適取得済みのWiFiとBLEが載ってるSoCを乗せた開発キットが1480円という、
ESP32-DevKitC ESP-WROOM-32開発ボード
というなんだか信じられない製品、を使うための環境をWindowsでせってアップしました。
ESP-IDF環境セットアップ
ESP-WROOM32は、ArduinoIDEからも使えるのですが、BLE周りはまだ対応していないようなので、本記事は、開発元が提供している環境であるESP-IDFをセットアップする内容になります。
基本的には、Get Started に従って実行すればできるはずと思って、作業したのですが、なぜかはまったのでその辺を中心に書きます。
ToolChainのダウンロード
zipを展開して、"C:\msys32" とかに置きます。
"C:\msys32\msys2_shell.cmd" をダブルクリック。
gitでESD-IDF環境を取得。
$ mkdir esp
$ cd ~/esp
$ git clone --recursive https://github.com/espressif/esp-idf.git
早速、サンプルのhello_worldをビルドしてみましょう。そのまえに、gitで取得した
esp-idfへのパスと通しましょう。~/.bashrcに下記を追加します。
export IDF_PATH="C:/msys32/home/shin/work/esp/esp-idf"
設定の更新。
$source ~/.bashrc
では、改めてhello_worldをビルド。
$ cd ~/esp
$ cp -r $IDF_PATH/examples/get-started/hello_world .
$ make menuconfig
$ make
make失敗。pythonがインストールされていないと怒られる。
...中略
AR libmain.a
LD bootloader.elf
/bin/sh: python: コマンドが見つかりません
make[1]: *** [/home/shin/work/esp/esp-idf/components/esptool_py/Makefile.projbuild:49: /home/shin/work/esp/hello_world/build/bootloader/bootloader.bin] エラー 127
make: *** [/home/shin/work/esp/esp-idf/components/bootloader/Makefile.projbuild:31: /home/shin/work/esp/hello_world/build/bootloader/bootloader.bin] エラー 2
pythonインストール
$ which python
which: no python in (/usr/local/bin:/usr/bin:/bin:/opt/bin:/c/Windows/System32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0/:/opt/xtensa-esp32-elf/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl)
確かにインストールされていないので、python2をインストールする。pacman はパッケージマネージャらしい。
$ pacman -S python2
$ which python2
/usr/bin/python2
コマンド名が python2 で気持ち悪いのでシンボリックリンクを貼っておく。
$ ln -s /usr/bin/python2 /usr/bin/python
再度、make。
$ make
Traceback (most recent call last):
File "/home/shin/work/esp/esp-idf/components/esptool_py/esptool/esptool.py", line 25, in <module>
import serial
ImportError: No module named serial
make[1]: *** [/home/shin/work/esp/esp-idf/components/esptool_py/Makefile.projbuild:49: /home/shin/work/esp/hello_world/build/bootloader/bootloader.bin] エラー 1
make: *** [/home/shin/work/esp/esp-idf/components/bootloader/Makefile.projbuild:31: /home/shin/work/esp/hello_world/build/bootloader/bootloader.bin] エラー 2
今度は、pythonのシリアル通信ライブラリ serial がないと怒られる。
python のパッケージツール pipを先にインストールしてから、
pip で pyserial をインストールする。
$ wget https://bootstrap.pypa.io/get-pip.py
$ pip install pyserial
再度、make。通った。
$ make
...中略
To flash all build output, run 'make flash' or:
python /home/shin/work/esp/esp-idf/components/esptool_py/esptool/esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 115200 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 40m --flash_size detect 0x1000 /home/shin/work/esp/hello_world/build/bootloader/bootloader.bin 0x10000 /home/shin/work/esp/hello_world/build/hello-world.bin 0x8000 /home/shin/work/esp/hello_world/build/partitions_singleapp.bin
書き込み先のシリアルポート設定
make flash(ESP-WROOM-32のflashへの書き込み)。失敗。
$ make flash
Flashing binaries to serial port /dev/ttyUSB0 (app at offset 0x10000)...
esptool.py v2.0-beta3
Traceback (most recent call last):
File "/home/shin/work/esp/esp-idf/components/esptool_py/esptool/esptool.py", l ine 2349, in <module>
_main()
File "/home/shin/work/esp/esp-idf/components/esptool_py/esptool/esptool.py", l ine 2342, in _main
main()
File "/home/shin/work/esp/esp-idf/components/esptool_py/esptool/esptool.py", l ine 2072, in main
esp = chip_class(args.port, initial_baud)
File "/home/shin/work/esp/esp-idf/components/esptool_py/esptool/esptool.py", l ine 166, in __init__
self._port = serial.serial_for_url(port)
File "/usr/lib/python2.7/site-packages/serial/__init__.py", line 88, in serial _for_url
instance.open()
File "/usr/lib/python2.7/site-packages/serial/serialposix.py", line 268, in op en
raise SerialException(msg.errno, "could not open port {}: {}".format(self._p ort, msg))
serial.serialutil.SerialException: [Errno 2] could not open port /dev/ttyUSB0: [ Errno 2] No such file or directory: '/dev/ttyUSB0'
make: *** [/home/shin/work/esp/esp-idf/components/esptool_py/Makefile.projbuild: 53: flash] エラー 1
シリアルポートの設定が正しくないので修正する。
(Establish Serial Connection with ESP32 に書いてありそうで書いていない?)
ESP-WROOM-32の接続先をデバイスマネージャーで確認。自分の場合はCOM3でした。
よくわからなければ、ESP-WROOM-32からUSBケーブルを抜き差しして変化があるデバイスです。
make menuconfig でシリアルポートの設定を行います。
デバイスマネージャーで確認したポートが"COM3"なら、"/dev/ttyS2" を設定します。"ttyS3"ではなく, "ttyS2"です。
$ make menuconfig
Serial flasher config ---> (/dev/ttyUSB0) Default serial port
認識されているシリアルポートは下記でも確認できます。
$ ls /dev/tty*
/dev/tty /dev/ttyS0 /dev/ttyS13 /dev/ttyS2 /dev/ttyS7
フラッシュに焼く
flashに焼けました。
$ make flash
...中略
LD hello-world.elf
esptool.py v2.0-beta3
Flashing binaries to serial port /dev/ttyS2 (app at offset 0x10000)...
esptool.py v2.0-beta3
Connecting........_
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Flash params set to 0x0220
Compressed 15792 bytes to 9198...
Wrote 15792 bytes (9198 compressed) at 0x00001000 in 0.8 seconds (effective 152.9 kbit/s)...
Hash of data verified.
Compressed 355216 bytes to 167647...
Wrote 355216 bytes (167647 compressed) at 0x00010000 in 14.9 seconds (effective 190.8 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 82...
Wrote 3072 bytes (82 compressed) at 0x00008000 in 0.0 seconds (effective 1486.4 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting...
Hello world!
PuTTyなどのシリアルコンソールをつないでみてみましょう。
Hello world!