ESP32 を買って、 Windows 10 に開発環境（ESP-IDF）を構築し、ビルドして、書き込んで、Lチカを確認するまでの記録。

# ESP32 を買って、 Windows 10 に開発環境（ESP-IDF）を構築し、ビルドして、書き込んで、Lチカを確認するまでの記録。

このエントリでは「詳細はいいから、とにかくはやく動かしてみたい！」という「せっかちで、めんどくさがりな人＞わたし😋」に向けて記録しています。

ここ👇まで行く（はず）。

![2020-05-20.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107592/13430239-7f80-5da0-2f52-527207ec279f.gif)


# 背景

なんか楽しそう。160MHz とか高速で、Wifiが付いてこの価格(1000円以下)だったら、かなり遊べるんじゃない？と思って。

Wifi経由でして、スマホのブラウザからコントロールするラジコンみたいなのが作れたらいいなぁ、、、なんて。

## ESP32 とは

まず、[ESP32] ってなに？なひとはここには来ないと思いますが、念の為。
> Wi-FiとBluetoothを内蔵する低コスト、低消費電力なSoCのマイクロコントローラである
> 160MHzまたは240MHzプロセッサで動作するSoC（Systemon a Chip）です．

[ESP32]:https://ja.wikipedia.org/wiki/ESP32

これを買いました。（2020/05/20時点の価格は 990円）

https://www.amazon.co.jp/gp/product/B0718T232Z/

HiLetgo ESP32 ESP-32S NodeMCU開発ボード2.4GHz WiFi + Bluetoothデュアルモード

> ESP32 ESP-32S NodeMCU開発ボード2.4GHz WiFi + Bluetooth
> 小さなボリューム、簡単に他の製品に埋め込まれる
> LWIPプロトコル、Freertosをサポートした強力な機能
> AP、STA、AP + STAの3つのモードをサポート
> ESP32 ESP-32S NodeMCU開発ボード2.4GHz WiFi + Bluetoothデュアルモード

データシート：
http://wiki.ai-thinker.com/_media/esp32/docs/nodemcu-32s_product_specification.pdf

（プログラマな私が読んでも、実はよくわからない。😋）


## ESP-IDF (Espressif IoT Development Framework) 

ESP-IDF の詳細はここのページ↓に書いてある。このページを頼りにすすめます。
原文でおっけーなひとは以下は無視して、こちらへどうぞ。

https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/index.html



# 開発環境(ESP-IDF)を構築

[Arduino IDE] でもビルド＆書き込みが可能なため、ググると、そっちを使っているひとが多いような印象がある。

このエントリでは、[Arduino IDE] ではなく、ESP-IDF に挑戦する。
なぜなら、もしかしたら使い慣れているVSCode をそのまま利用できるかもしれない、と思って。
あと、短いお試しコードであれば問題は無さそうだけど、本格的な長いコードになると、[Arduino IDE] ではちょっと心細いかな、とも思った。

ちなみに、[VSCode] の拡張パックは公式のがあるみたい。
https://github.com/espressif/vscode-esp-idf-extension

で、軽い気持ちで、拡張パックを入れてみたのだけど、、、使い方がよくわからなかった。（ダメなやつ＞😰）

なので、まずは、基本に返って、 **Windowsコマンドプロンプトでのビルド＆書き込み** を目標としてみました。デバッガ接続はあとで考える。[VSCode] でデバッグできたら最高なんだけどね。

[Arduino IDE]や、[VSCode]の拡張パックの情報が知りたいひとは、他のエントリを探してくださいませ🙇‍♂️。


[Arduino IDE]:https://www.arduino.cc/en/Main/Software

[VSCode]:https://code.visualstudio.com/

## 1, Windows版 ESP-IDF はこのページから

https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/windows-setup.html

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107592/8f3f01bf-4787-9759-b440-b1a77ef25cd8.png)


## 2, これ↓をダウンロード＆インストール

https://dl.espressif.com/dl/esp-idf-tools-setup-2.3.exe

起動するとお約束の画面になり、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107592/816a0426-4edc-f0eb-fd2d-7dfd758f2966.png)

お試しなので、今回は安定していると思われる「v3.3.2」を選択してみた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107592/a92c8985-8d59-7c2c-8714-3d663743b146.png)

ちょっと待たされる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107592/0baa7e51-9a15-4288-3e2a-16a65220b46b.png)

無事にインストール完了

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107592/00886ff9-e8be-cd42-3a2f-34faf249e919.png)

で、こんな画面が出た。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107592/b65544bb-0e0c-584a-32d0-001167cc3969.png)

ここまで、特に悩むことはない。

## 3, サンプルコードを準備

フォルダごとまるっとコピーしろって書いてあるのでやってみる。

```
> cd %userprofile%\esp
> xcopy /e /i %IDF_PATH%\examples\get-started\hello_world hello_world
```

わたしがやったのは、こんな感じ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107592/e6a27c43-b2e8-788e-1d95-9231240ea1ac.png)

でも、Windows のエクスプローラーで、適当にフォルダを作って、そこにまるっとコピーして、再びコマンドラインに来ても問題無いと思った。

## 4, 謎の設定。set-target はスルー

公式サイトの STEP.7 には、以下のコマンドを入力、とあるが、

```
cd %userprofile%\esp\hello_world
idf.py set-target esp32
idf.py menuconfig
```

`idf.py set-target esp32` でエラーになる。「Python のVersionが違うんじゃね」なメッセージにまぎれているが、よく読むと「`set-target`というコマンドは無い」と言っている。

```
You are using Python 3.7.3. Python 3 support is new, please report any problems you encounter. Search for 'Setting the Python Interpreter' in the ESP-IDF docs if you want to use Python 2.7.
```

エラーになったら、`install.bat` とか、`export.bat` を起動してみて、という記述を見かけたので、やってみたけど、`set-target`は相変わらずでした。

公式ページの情報が古いのかな。ということで、set-target はスルー。

`idf.py menuconfig`は日本語環境だといろいろアレだけど、なんとか動くみたい。
設定を変えるコマンドなので、ビルドしてみるだけなら、起動しなくてもいける模様。ということで、こちらもスルー。


## 5, ビルド

いきなりこのコマンドでいいみたい。

```
> idf.py build 
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107592/e98886bf-affa-1614-7f11-ae08496fce9c.png)


でビルドできたっぽい。最初は、ファイルが多いのか、それなりに時間がかかります。


## 6, 書き込み

まず、ESP32 を USB に接続すると、Windows10 が認識して、「COM5 に接続しました！」なメッセージが右下に一瞬表示される。

見逃しても、「デバイスマネージャー」で確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107592/7bc05a9d-fa09-cb4a-fbbf-049bec6231cb.png)

COMポートの番号が確認できたら書き込みます。

```
> idf.py -p COM5 flash
```

わたしの環境ではこんな感じ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107592/a3ea0ca7-2009-0bed-44b4-cd98f45f440f.png)

書き込みできたっぽい。

## 7, 動いた？

ちなみに。Hello World のコードは「Lチカ」しません。あたりまえですが。

コードを読むと、どうやらシリアルポートになにやらLOGを出しているように読めます。

[TeraTerm] を起動して。COM5 に接続。なんか出てる。
![2020-05-21.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107592/2f4f43ea-d06b-4fb9-4e4b-49ee6bd1fb78.gif)

文字化けしてるね。通信速度が合っていないようなので、合わせる。

Setup > Serial port ... > Speed: 115200

![2020-05-21-2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107592/34df82d0-55fd-047a-3bb8-02af6584a888.gif)


やったね。無事に動いたっぽい。😀👍

[TeraTerm]:https://ttssh2.osdn.jp/

どうでもいいけど、[TeraTerm]って、GitHub に置かないんですかね。




# 目標は Lチカ！

## 1, サンプルコードはこれ

LED をチカチカさせるには、こっちのコードです。

examples > get-started > blink

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107592/5788eba9-eac2-9d6f-a41c-5eeb0ef5fe7f.png)

これをフォルダごと適当な場所にまるっとコピーする。

## 2, コードをちょっと直して

LEDのGPIO番号を確認して修正。
デフォルトは５番PINになっているが、付属の回路図を見るとわたしが買ったものは２番PINにLEDがつながっていた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107592/476f3803-0bb4-d2a5-a0a9-1f7679fd6bee.png)
blink.c 18 行目を更新して保存。

```
#define BLINK_GPIO CONFIG_BLINK_GPIO
↓
#define BLINK_GPIO 2
```

ちなみに、CONFIG_BLINK_GPIO は `idf.py menuconfig`で変更できるようになっているらしい。おそらく、そっちが正式ルート。


## 3, ビルド

デフォルトのコマンドプロンプトではなくてこっち「ESP-IDF Command Prompt」を起動。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107592/695b6d9f-5912-b9b7-8c13-e72f9a53b0a3.png)

起動後、カレントディレクトリを blink に移動してビルド。

```
> idf.py build
```



## 4, 書き込み


```
> idf.py -p COM5 flash
```

うまく書けると「Done」になる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107592/33734ce4-3f30-3454-20c1-1508e313b038.png)

失敗する場合は、USBを抜き差ししてみるといい。

## 5, 動いた？

Lチカ、できました？？？

![2020-05-20.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107592/13430239-7f80-5da0-2f52-527207ec279f.gif)


ちなみに、TeraTermにはこんなLOGが出てます。
![2020-05-21-3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107592/c5148238-e35d-8dbf-9561-2bd4d3c8f5a3.gif)



できたら、点滅速度を変えたり、他のサンプルコードをビルドしたり、たっぷりたのしみましょー。