ESP32(ESP-WROOM-32)でLチカ (WindowsでArduino IDE使用)

#はじめに

みんな大好きESP8266(ESP-WROOM-02)の上位バージョン、ESP32(ESP-WROOM-32)が国内でも容易に入手可能になってきました。

秋月の通販または店頭で購入できます。
http://akizukidenshi.com/catalog/g/gM-11647/

技適も通ってて、電波ゆんゆんしても安心です。

私も入手してみたので、Arduino IDE で開発する方法を紹介します。

ESP8266を使ったことのある方を念頭に置いてます。~~また、半田ごては必須です。~~

とりあえず、Windows 10 64bit で試しています。

#ハードウェア

ブレイクアウトボードがまだ出回っていないので、はんだ付けが大変です。そこで！ 大変な思いをしながらはんだ付けしてください。。。


*2017/3/23追記*
*変換基板(ブレイクアウトボード)や開発ボードの入手が容易になってまいりました。*
*・aitendoさんの [ESP32変換基板各種](http://www.aitendo.com/product-list?keyword=ESP32)*
*・SWITCH SCIENCEさんの [ESP-WROOM-32ピッチ変換済みモジュール《フル版》](https://www.switch-science.com/catalog/3170/)*
*・秋月電子さんの [ESP32-DevKitC ESP-WROOM-32開発ボード](http://akizukidenshi.com/catalog/g/gM-11819/)*
*電子工作の初心者さんが初めて使う場合は、秋月電子さんの開発ボードがお勧めです。*
*おそらく、他社は秋月電子さんより安価には出せないと思います。*
*安価にするならどこかでスペックダウンしないことには対抗できません。*
*開発ボードを使う場合は、下記の配線もほぼ済んでいます。*
*本章最後（ソフトウェアの章の直前）をご参照ください*


大変なので、はんだ付けするピンは最小限にしたいところです。

最低限、引き出さなければならないのは6ピン(GND, 3.3V, EN, TXD0, RXD0, IO0) だけです。Lチカのためにもう1本(IO2)引き出して、7ピンとなります。

7本だけなので、頑張ってはんだ付けしましょう。裏返しに配線したほうが、ピンアサインのシルク印刷が見えて便利です。

![DSC_0842.JPG](https://qiita-image-store.s3.amazonaws.com/0/104360/bda6cd20-43d1-8f12-9c04-c02e35869d18.jpeg)


（写真のはさらにIO4も配線していて、8本配線されています）

---
*:warning:警告:warning: (2017/2/5追記)*
*上の写真のような配線で、ブレッドボードへの抜き差しを繰り返すと、ランドが剥げて再びはんだ付けすることができなくなってしまう場合があります。*

![DSC_0843.jpg](https://qiita-image-store.s3.amazonaws.com/0/104360/3d00cbb2-85e3-7d74-5b4c-4401f89f8f43.jpeg)
*ENのランドが剥げている様子*

*下図のように、一旦基板で受けてからブレッドボードに差す側のピンを実装するとよいでしょう。*

![DSC_0844.jpg](https://qiita-image-store.s3.amazonaws.com/0/104360/561eee8d-d9bf-9dca-be66-dc65dee747dd.jpeg)

*ピンの並びは好きにしていいのですが、この写真のモノは、ESP8266のT型ブレイクアウトボード（[スイッチサイエンス](https://www.switch-science.com/catalog/2678/)、[秋月](http://akizukidenshi.com/catalog/g/gP-09715/)）とピンコンパチになるようにしています。*

---

周辺の配線ですが、GND, 3.3V, TXD0, RXD0 は言わずもがなでしょう。

EN は10kΩぐらいの抵抗でプルアップし、スイッチを通してGNDに繋ぎます。このスイッチがリセットスイッチとなります。ESP8266ではENとRSTがありましたが、ESP32ではENがRST相当という感じになりました。

```
3.3v
 |
10kΩ
 |
 +--- EN
 |
 SW
 |
GND
```

IO0 は単にスイッチを通してGNDに繋ぎます。このスイッチが、書き込みモード指定スイッチとなります。こちらはプルアップしなくても動作しました。


```
 +--- IO0
 |
 SW
 |
GND
```

IO2 は、適当な抵抗とLEDを繋いでGNDに落とします。3.3Vに繋ぐ方法だと、ブートモードが意図しないモードになって動かないかもしれません。Lチカせず、シリアル通信だけで何かする場合は何もつながなくてOKです。

```
 +--- IO2
 |
 R
 |
LED
 |
GND
```

IO2のプルダウン要否を確認するために、自分はIO2 を使いましたが、これから配線する場合はほかのピンを選んだ方がいいかもしれません。（下の方のサンプルソースではIO4を使用しています）

![DSC_0840.jpg](https://qiita-image-store.s3.amazonaws.com/0/104360/2dcd49eb-e24f-984a-5826-1b45b1152218.jpeg)


ESP8266と比べると無駄なプルアップ・プルダウンが無くなった印象です。（どうせならENも内部でプルアップして欲しかったところです。）

###開発ボードを用いる場合

![DSC_0983 - コピー.JPG](https://qiita-image-store.s3.amazonaws.com/0/104360/1410d62a-f81e-55f8-7d76-1cc43d98d3b5.jpeg)

秋月電子さんなどの[開発ボード](http://akizukidenshi.com/catalog/g/gM-11819/)を用いる場合は、USB-UART変換や5V→3.3V変換などは配線済みです。

Lチカ用に配線するのは IO4 と GND の間に、LEDと抵抗を直列に繋ぐだけです！（MicroUSB端子をPCに繋ぐ必要もありますが。）

LEDは逆刺ししても壊れることはないので、向きを考えずに配線して、光らなかったら反転してみるとかでもいいでしょう。

ただ、その考えだと、トラブった時にソフトとハードの切り分けに苦労するかもしれないです。

足を切ってなければ、足が長いほうがアノード（プラス側）です。足を切った場合、LEDを横から見て、お皿で受けるような感じのがカソード（マイナス側）です。なんか、こう、お皿で受けでGNDに流していくような雰囲気で覚えています。

抵抗は無極性なので向きはどっちでも構いません。

抵抗値は、ホントはちゃんと計算しないといけないのですが、100～1KΩぐらいなら壊れず光ると思います。小さすぎると壊れるんですが、ぶっちゃけ短絡保護回路があったりして0Ωでも（直結でも）壊れずすむことが多いです。抵抗が大きいと暗くなります。大きすぎると光りません。

#ソフトウェア

ESP8266 は、Arduino IDE のボードマネージャを使ってインストールしましたが、ESP32 では自力でファイルシステムに配置する方法でのインストールとなります。

一次情報は [Steps to install Arduino ESP32 support on Windows](https://github.com/espressif/arduino-esp32/blob/master/doc/windows.md) です。

ちょっと手順を変えつつ、日本語で紹介していきます。

[arduino.cc のサイト](https://www.arduino.cc/en/Main/Software) から Arduino IDE Windows Installer をダウンロードし、インストールします。現在の最新版は1.8.1でした。

ZIP版やApp版はどうなんだろうと気になりますが、公式が「Windows Installer」を指定しているので、従った方がいいかもしれません。また、当然ですがインストール済みならそのまま使いましょう。

次に **Git** をインストール、、、は**しません。**

https://github.com/espressif/arduino-esp32.git にアクセスし、緑のボタン**「Clone or download」**をクリックし、出てきたポップアップ右下の **「Download ZIP」** をクリックしてZIPダウンロードします。

ダウンロードしたZIP を C:/Users/[YOUR_USER_NAME]/Documents/Arduino/hardware/espressif/esp32 に展開します。

(Arduino IDE の環境設定でスケッチブックの保存場所を変えている場合は、C:/Users/[YOUR_USER_NAME]/Documents/Arduino の代わりにそれを使ってください)

配置する際、arduino-esp32-master というフォルダは無い状態にしてください（esp32 の下に cores, doc, libraries, ... が並ぶようにしてください）。

次に、C:/Users/[YOUR_USER_NAME]/Documents/Arduino/hardware/espressif/esp32/tools の中の get.exe をダブルクリックして起動します。DOS窓が開いて何かgetするようです。DOS窓が閉じるまで待ちましょう。

これでインストールは以上です。

昔のインストール方法を見ると、python と pyserial が必要だったようですが、今は公式に言及がないので必要ないようです。get.exe のところが、MacやLinux では get.py を実行するみたいなので、Windows では get.exe を作ったことで python が不要になったのかなと思います。（しかし、手元で試したPCにはpythonが入っているので、実は必要ということもあるかもしれません。）

*2017/2/5追記*
*[GitHubのログ](https://github.com/espressif/arduino-esp32/commit/93d2bc7f1e812ae78c3e77c091e23436cd5a9ae2) を見ると、17日前に get.exe が追加されています。*


#サンプルソース

手始めなので超簡単なLチカで行きます。セッカチなので間隔を250msとしました。

```cpp:blink.ino
void setup() {
  pinMode(4, OUTPUT);
}

void loop() {
  digitalWrite(4, HIGH);
  delay(250);
  digitalWrite(4, LOW);
  delay(250);
}
```

3箇所でてくる `4` は、LEDを配線したGPIOに合わせてください。

#書き込み

Arduino IDE のメニュー、**ツール → ボード** から、ボードを選ぶのですが、何を選んだらいいのでしょうか。

よくわからないので、とりあえずそれっぽい **ESP32 Dev Module** を選択します。

（ちと脱線しますが、ESP32 Dev Module を選び、ハードウェアを https://dl.espressif.com/dl/schematics/ESP32-Core-Board-V2_sch.pdf の通りに配線すると、書き込み時のモード変更とリセットを勝手にやってくれます。配線は全部必要というわけではなく、シリアルのDTS,RTS と ESP32のEN,IO0 の間だけ回路図通りならOKです。）

また、シリアルポートを正しく選択してください。

それ以外は特にいじらず、書き込みボタン（メニュー左から２番目の→アイコン）をクリック！

で、ハードウェア側IO0とENに繋いだ物理ボタンを押します。押すタイミングは比較的どっちでもいいのですが、離すタイミングはENが先、書き込みが始まったらIO0を離す、という感じにするとうまくいくと思います。

書き込み終わったら再度ENのボタンを押してリセットしてください。押して離した時に起動して、Lチカが始まると思います。

#トラブルシューティング

この章は2017/5/13追記です。

正しくインストールしたつもりなのに、ボード一覧にESP32のボードが出てこない場合があります。

殆どの場合、原因はフォルダ配置先のミスです。

どうしても上手くいかない場合は、 `C:\Program Files (x86)\Arduino\hardware\espressif\esp32` に置いてみましょう。（32bit版Windowsでは(x86)は無しで。）

#おわりに

うまく動きましたか？

ESP8266を使ったことのある前提で、さらっと流してしまいました。Qiitaで一番乗りしてやるぜ！ という勢いで書いています。

ESP8266のarduino対応は有志が作成しましたが、ESP32のarduino対応はEspressif自身が作成されたようです。ESP32への力の入れ方が半端ないなーという印象を受けています。ESP32はこれからさらに使いやすくなっていくことでしょう！

###2017/5/13追記

ESP8266のarduino対応 は、ロシアのIvan Grokhotkov さんが作成されました。ESP32のarduino対応はEspressifの中の人のIvan Grokhotkov さんが作成されました。って転職したのかよ！

詳しくは
[Interview with Ivan Grokhotkov from Espressif](https://frightanic.com/iot/interview-ivan-grokhotkov-espressif/) をご覧ください。
Google翻訳を使えば、ほぼほぼ読めると思います。