ESP32 Core Board V2 (ESP32 Dev Module)をArduino IDEで使ってみた

#なぜESP32 Core Board V2なのか
arduinoシリーズはクロックが基本的に16MHzしかないので，頻繁なタイマ割込みや繰り返し処理をさせると動作が重くなりがちです．
そこで動作周波数が240MHzあるという噂のESP32-WROOM-32搭載のESP32 Core Board V2を買ってみました．
~~僕はC国製の500円位のもの(やっぱクソ安い)を購入しました．~~
無線モジュールにおいて技適マークのついてない商品は法律で罰せられるらしいので，無線モジュールを使う際は秋月等で同様のものを購入しましょう．
[ＥＳＰ３２－ＤｅｖＫｉｔＣ　ＥＳＰ－ＷＲＯＯＭ－３２開発ボード]
(http://akizukidenshi.com/catalog/g/gM-11819/)
秋月のサイトは相変わらず全角でイラつくなあ...

#ESP32-WROOM-32とは何か
搭載されているESP32-WROOM-32のデータシートをチェック．
[ESP32-WROOM-32 Datasheet]
(https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32_datasheet_en.pdf)
確かに
>clock frequency is adjustable from 80 MHz to 240 MHz

って書いてある！
更に，

- Bluetooth，Bluetooth LE，Wi-Fi対応
- SDカードインターフェース，イーサネット、高速SPI、UART、I2S、I2C対応
- アンテナは最大150Mbpsのデータレートと20dBmの出力電力をサポート
- 容量性タッチセンサ，ホールセンサ搭載
- CPU電源を切り，消費電力5μAの低電力コプロセッサを使用して周辺機器の変化を監視可能
- オペレーティングシステムはfreeRTOSとLwIP(OSまであんのかよ)

というモンスターモジュールなんですね．やっべえなこれ．
しかし公式の開発環境は
ESP-IDF: Espressif IoT Development Framework
というやつで，これが
テキストエディタ：C++で書く(エディタ自体は何でもよい)
コンパイラ　　　：make all 
書き込み　　　　：make flash
というなじみのない開発環境...
全ての機能にアクセス出来ますが，とっつきにくい．

#Arduino core for the ESP32 をインストール
先人によるとArduino IDEで開発出来るっぽいです．
これはありがたい．
[Arduino core for the ESP32 のインストール方法]
(https://www.mgo-tec.com/arduino-core-esp32-install)

1. GitHubからリンクを取得
    - 以下のGitHubの[Stable release link(安定版)]か[Development release link(開発版)]のリンクをコピー．
    - [Installation instructions using Arduino IDE Boards Manager]
(https://github.com/espressif/arduino-esp32/blob/master/docs/arduino-ide/boards_manager.md)
2. Arduino IDEにインストール
    1. [ファイル]→[環境設定]→[追加のボードマネージャのURL]にペースト
    2. [ツール]→[ボード]→[ボードマネージャ...]の中の[esp32 by Espressif Systems]をインストール
    3. [ツール]→[ボード]→[ESP32 Dev Module]が出てきます．

しかしここで問題が...設定を見ると80MHzか40MHzしか選べん．
Arduino IDEを使うと様々な箇所に制限がかかる様です．
当初240MHzを使おうとしていたので誤算ですが，80MHzでもArduinoシリーズに比べれば十分早いので良しとしましょう．

#ドライバのインストール
ここで書き込みをしようとしますが，書き込めません．
デバイスマネージャを見ると，[CP210x USB to UART Bridge]にCOMポートが割り当てられていないので，ドライバをインストールします．
[CP210x USB - UART ブリッジ VCP ドライバ]
(https://jp.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers)
これで書き込めるようになりました．

#ピンアサインを確認
プログラムを実行するにあたり，Arduino上のどのピンがESP32 Core Board V2のどのピンにアサインされているかを確認する必要があります．
Arduino IDEの変換パッチを配布していたGitHubをもう一度チェック．
[Arduino core for the ESP32]
(https://github.com/espressif/arduino-esp32)
ピンマップがこちら．
![esp32_pinmap.png](https://qiita-image-store.s3.amazonaws.com/0/246335/57cb31ca-e020-1af6-f2b2-b15d1ff2e141.png)
これだけだと大して良く分かりませんが，データシートの[2.2 Pin Description]にピン構成が載ってます．
[ESP32-WROOM-32 Datasheet]
(https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32_datasheet_en.pdf)
FLASH領域(GPIO6~11)は使えないので注意しましょう．
これによると
[GPIOx]→デジタルIOピン
[ADCx]→アナログピン
です．
TOUCHピンはタッチセンサが使えるようです．
アナログピンで閾値使えばいいような気もしますが，TOUCHピンは静電容量式なので，このピンのみでタッチが検出出来るようです．すげえ．
DACピンもあるし，どのピンも豊富で嬉しい限りです．

#Lチカしてみる
以下のプログラムを書き込んで，Lチカを確認．やっほう．
使ったのはGPIO4ピンです．

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

void loop() {
  digitalWrite(4, HIGH);
  delay(1000);
  digitalWrite(4, LOW);
  delay(1000);
}
```
その他の用法は以下のQiitaの記事に大体載ってます．
大変便利だ...こういう記事書きたいよな．
[ESP32をArduino IDEから使う時のTipsのメモ]
(https://qiita.com/tomorrow56/items/fcf5ea7bfd2056e8f88f)


#まとめ
Arduinoシリーズより安くてArduinoシリーズよりはるかに高機能．
重宝することになりそうです．
ただArduino IDEだと応用が効かないことが多そうなので，240MHz目的も兼ねてC++実装も頑張る！(ぞいって言え)

取りあえず卒論がやばいので，これ使って卒論やるか...