Espressif社から提供されているESP-WROOM-32は、WiFiの他にBluetoothを組み込んだSoC(?)で、技適(TELEC)番号を取得済みのモジュールです。しかも、秋月電子通商では単体で1個550円(執筆時点)とお手頃価格です。
今回から、ESP32-DevKitCを使って遊んでみたいと思います。
Windows 10 にESP-IDF をインストール
ESP32はESP8266に比べるとまだ情報が少ないものの、デュアルコアになっていたりメモリが増えていたりと、やれることが大きく増えています。
早速、開発環境をインストールしていきましょう。
ESP-IDFのインストールは、Espressif社の公式なドキュメントに従って作業を進めれば良いのですが、Linuxなどの各種OSにも対応するように書かれているので、少々戸惑うところもありましたので、整理ておきたいと思います。
-
ツールチェーンのインストール
- Get StartedのSetup ToolchainからWindowsへと進み、Toolchain Setupに示されたzipファイル(執筆時点では、esp32_win32_msys2_environment_and_toolchain-20180110.zip)をダウンロードします。
- ダウンロードされたzipファイルを解凍します。
-
解凍してできた
msys32
フォルダをC:¥
に移動します。 -
スタートメニューに追加します。
C:¥msys32¥mingw32.exe
を選択してマウスの右ボタンをクリックします。- 右メニューの中から[ショートカットの作成]を選択します。
C:¥ProgramData¥Microsoft¥Windows¥Start Menu¥Programs
フォルダにmsys2
フォルダを作成します。- 先ほど作成したショートカットを今作成した
C:¥ProgramData¥Microsoft¥Windows¥Start Menu¥Programs¥msys2
フォルダに移動します。
-
MSYS2のパッケージを更新します。
- mingw32.exeを起動します。
-
パッケージデータベースを更新します。
$ pacman -Sy ↵ :: パッケージデータベースの同期中... mingw32 は最新です 0.0 B 0.00B/s 00:00 [---------------------] 0% mingw64 は最新です 0.0 B 0.00B/s 00:00 [---------------------] 0% msys は最新です 0.0 B 0.00B/s 00:00 [---------------------] 0%
-
パッケージを更新します。
$ pacman -Su ↵ :: Starting core system upgrade... 何も行うことがありません :: システム全体の更新を開始... 何も行うことがありません
-
mingw32.exeを終了します。
$ exit ↵
- 更新するパッケージがなくなるまで、更新と終了を繰り返します。
-
ESP-IDFをインストールします。
- mingw32.exeを起動します。
-
カレントディレクトリを移動します。
$ cd /opt ↵
-
GitHubからESP-IDFをクローンします。
$ git clone https://github.com/espressif/esp-idf.git esp-idf-v30 ↵ Cloning into 'esp-idf-v30'... remote: Counting objects: 52644, done. remote: Compressing objects: 100% (755/755), done. remote: Total 52644 (delta 673), reused 1203 (delta 555), pack-reused 51285 Receiving objects: 100% (52644/52644), 49.5
-
カレントディレクトリを移動します。
$ cd esp-idf-v30 ↵
-
チェックアウトします。
$ git checkout release/v3.0 ↵ Branch 'release/v3.0' set up to track remote branch 'release/v3.0' from 'origin'. Switched to a new branch 'release/v3.0'
-
サブモジュールを取得します。
※masterブランチで作業をするは少々気持ちが悪かったので、ブランチを変更しています。$ git submodule update --init --recursive ↵ Submodule 'components/aws_iot/aws-iot-device-sdk-embedded-C' (https://github.com/espressif/aws-iot-device-sdk-embedded-C.git) registered for path 'components/aws_iot/aws-iot-device-sdk-embedded-C' Submodule 'components/bt/lib' (https://github.com/espressif/esp32-bt-lib.git) registered for path 'components/bt/lib' Submodule 'components/coap/libcoap' (https://github.com/obgm/libcoap.git) registered for path 'components/coap/libcoap' Submodule 'components/esp32/lib' (https://github.com/espressif/esp32-wifi-lib.git) registered for path 'components/esp32/lib' Submodule 'components/esptool_py/esptool' (https://github.com/espressif/esptool.git) registered for path 'components/esptool_py/esptool' Submodule 'components/json/cJSON' (https://github.com/DaveGamble/cJSON.git) registered for path 'components/json/cJSON' Submodule 'components/libsodium/libsodium' (https://github.com/jedisct1/libsodium.git) registered for path 'components/libsodium/libsodium' Submodule 'components/micro-ecc/micro-ecc' (https://github.com/kmackay/micro-ecc.git) registered for path 'components/micro-ecc/micro-ecc' Submodule 'components/nghttp/nghttp2' (https://github.com/nghttp2/nghttp2.git) registered for path 'components/nghttp/nghttp2' Submodule 'components/spiffs/spiffs' (https://github.com/pellepl/spiffs.git) registered for path 'components/spiffs/spiffs' Cloning into '/opt/esp-idf-v30/components/aws_iot/aws-iot-device-sdk-embedded-C'... Cloning into '/opt/esp-idf-v30/components/bt/lib'... Cloning into '/opt/esp-idf-v30/components/coap/libcoap'... Cloning into '/opt/esp-idf-v30/components/esp32/lib'... Cloning into '/opt/esp-idf-v30/components/esptool_py/esptool'... Cloning into '/opt/esp-idf-v30/components/json/cJSON'... Cloning into '/opt/esp-idf-v30/components/libsodium/libsodium'... Cloning into '/opt/esp-idf-v30/components/micro-ecc/micro-ecc'... Cloning into '/opt/esp-idf-v30/components/nghttp/nghttp2'... Cloning into '/opt/esp-idf-v30/components/spiffs/spiffs'... Submodule path 'components/aws_iot/aws-iot-device-sdk-embedded-C': checked out '7132505b00d2dd57f48478e75efa636021919aae' Submodule path 'components/bt/lib': checked out 'b76cf6aa307acca2bf3634f2534c84b89f60a054' Submodule path 'components/coap/libcoap': checked out '6468887a12666f88b8704d797fc176cd4f40ee4c' Submodule path 'components/esp32/lib': checked out '494b2d809619e2af51a27ad39b187164e3acaa94' Submodule path 'components/esptool_py/esptool': checked out '4dab24e1b28632d270adf7305fe0d008d1acee99' Submodule path 'components/json/cJSON': checked out '7cc52f60356909b3dd260304c7c50c0693699353' Submodule path 'components/libsodium/libsodium': checked out '70170c28c844a4786e75efc626e1aeebc93caebc' Submodule path 'components/micro-ecc/micro-ecc': checked out '14222e062d77f45321676e813d9525f32a88e8fa' Submodule path 'components/nghttp/nghttp2': checked out '3bcc416e13cc790e2fb45fcfe9111d38609c5032' Submodule 'third-party/mruby' (https://github.com/mruby/mruby) registered for path 'components/nghttp/nghttp2/third-party/mruby' Submodule 'third-party/neverbleed' (https://github.com/h2o/neverbleed.git) registered for path 'components/nghttp/nghttp2/third-party/neverbleed' Cloning into '/opt/esp-idf-v30/components/nghttp/nghttp2/third-party/mruby'... Cloning into '/opt/esp-idf-v30/components/nghttp/nghttp2/third-party/neverbleed'... Submodule path 'components/nghttp/nghttp2/third-party/mruby': checked out '22464fe5a0a10f2b077eaba109ce1e912e4a77de' Submodule path 'components/nghttp/nghttp2/third-party/neverbleed': checked out 'da5c2ab419a3bb8a4cc6c37a6c7f3e4bd4b41134' Submodule path 'components/spiffs/spiffs': checked out 'f5e26c4e933189593a71c6b82cda381a7b21e41c'
release/v3.0ブランチも時々更新されているため、現時点ではブランチを変更する意味はないかもしれません。 -
ESP-IDFのパスを登録します。
-
C:¥msys32¥etc¥profile.d
フォルダにexport_idf_path.sh
ファイルを作成します。 -
export_idf_path.sh
ファイルに次の内容を記録します。
export IDF_PATH="C:/msys32/opt/esp-idf-v30"
-
-
mingw32.exeを終了します。
$ exit ↵
-
サンプルをコンパイルしてみる
-
プロジェクト用のフォルダを作成します。
今回は、E:¥MyDocuments¥Project¥esp32
とします。 -
C:¥msys32¥opt¥esp-idf-v30¥examples¥get-started¥hello_world
フォルダを作成したE:¥MyDocuments¥Project¥esp32
の下にコピーします。 - mingw32.exeを起動します。
-
カレントディレクトリを移動します。
$ cd /e/MyDocuments/Project/esp32/hello_world/ ↵
-
コンパイルする際に必要な設定を行います。
$ make menuconfig ↵
-
Espressif IoT Development Framework Configuration画面で[Exit]を選択します。
※コンパイルが通ることを確認するだけですので、正しい設定はしていません。 -
コンパイルを行います。
$ make ↵ : LD build/hello-world.elf esptool.py v2.1 To flash all build output, run 'make flash' or: python /opt/esp-idf-v30/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 /e/MyDocuments/Project/esp32/hello_world/build/bootloader/bootloader.bin 0x10000 /e/MyDocuments/Project/esp32/hello_world/build/hello-world.bin 0x8000 /e/MyDocuments/Project/esp32/hello_world/build/partitions_singleapp.bin
- コンパイルが正常に終了しました。
-
mingw32.exeを終了します。
$ exit ↵
-
プロジェクト用のフォルダを作成します。
以上で、ESP-IDFがインストールできました。
次回は、Eclipseでの開発が進められるように設定などをしていく予定です。