ArduinoでIoT！

（最近？）話題になっているらしいESP-WROOM-32というものを使ってArduinoでIoTをやってみようと思います。

この記事では[ESP32-DevKitC-32-F](https://www.marutsu.co.jp/pc/i/31749958/)を買ってから使えるようにする設定と起動の確認をします。

# ESP-WROOM-32とは

Wi-FiとBLEが使えて技適も通ってるArduino互換機で、1500円（税込、マルツで）くらいで買えます。メインのモジュール部分と基盤を自分でバラバラで買ってはんだ付けすればもう少し安く買うこともできます。

これだけでウェブサーバーも建てられるので、色々と活用できそうです。

Raspberry Piに比べて消費電力が小さそうなのと[スイッチサイエンス](https://www.switch-science.com/catalog/3156/)によると、動作電圧は2.2~3.2V、消費電流は平均80mAとのことなので、Raspberry Piよりは電池なので動かした際に長持ちしそうです。

# 必要なもののインストール

筆者の環境はMac(macOS 10.15.1)ですが、Windowsでも同様の手順でできると思います（確認はしていません）。

## ArduinoIDE

[Arduinoの公式ページ](https://www.arduino.cc/en/Main/Software)からダウンロード、インストールします。

既に入っている人は最新版にしてください。1.8以上が必要です。

### ボードのインストール

[ESP32の公式のGitHubのページ](https://github.com/espressif/arduino-esp32)の[Installation instructions using Arduino IDE Boards Manager](https://github.com/espressif/arduino-esp32/blob/master/docs/arduino-ide/boards_manager.md)の手順でインストールします。

1. `Arduino`>`Preferences...`でArduinoIDEの設定を開きます。<img width="304" alt="スクリーンショット 2019-11-17 21.39.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299406/61a5cc13-4038-cea5-3828-3a00a8b211ad.png">

1. 「追加のボードマネージャーのURL」に[https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json](https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json)を貼ります。（これは安定版ですが、開発版の場合は[https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json](https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json)）既に違うURLが入っている場合はURLの欄の右のアイコンをクリックし、そこに改行して先ほどのURLを貼り付けます。
1. 一番したの「OK」を押して設定を閉じます。
1. `ツール`>`ボード`>`ボードマネージャ...`でボードマネージャーを開きます。<img width="1160" alt="スクリーンショット 2019-11-17 21.45.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299406/25bdf0c2-b8bd-a1c7-424f-7d052e54ab67.png">

1. 検索欄から「esp32」と検索します。
1. `esp32 by Espressif Systems`のインストールボタンを押し、インストールします。
1. 完了！

### 書き込んでみる

1. `ファイル`>`スケッチ例`>`ESP32 DevModule用のスケッチ例` `WiFi`>`SimpleWiFiServer`を開きます。<img width="821" alt="スクリーンショット 2019-11-17 21.53.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299406/d1927216-9581-e805-459a-ad844ea0753b.png">

1. 開いたスケッチの中の`yourssid`と`yourpassword`を自分の接続するWiFiのSSIDとパスワードに書き換え、保存します。（書き込めないので別に保存するかと聞かれるので、別で保存します。）**接続できるのは2.4GHzのWi-Fiのみです。5GHzは接続できません。**
1. パソコンにESP32-DevKitC-32-Fを接続します。
1. `ツール`>`シリアルポート`から自分のESP32のシリアルポートを選択します。出てこない場合は次のCP210xのインストールをしてもう一度やってみてください。
1. 書き込みボタンを押して書き込みます。この時、書き込みボタンを押したらシリアルモニタを右上の虫眼鏡マークから起動します。もしこれでエラーが出る場合、次のCP210xのインストールをしてからもう一度やってみてください。
1. シリアルモニタに`WiFi connected`と表示されたら無事に書き込みは終了しています。

### CP210x USB - UART ブリッジ VCP ドライバのインストール

上の「書き込んでみる」が何事もなく終わった場合は飛ばしてください。

ESP32-DevKitC-32-Fとパソコンを繋いだだけでは、シリアル通信がうまくいかないようなので、[CP210x USB - UART ブリッジ VCP ドライバ](https://jp.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers)というものをインストールします。https://jp.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers
にアクセスし、自分の環境にあったものをダウンロード、インストールします。Macの場合、許可を求められ、設定を開くか聞かれることがあるので、そのときは指示通りに設定を開いて許可をします。

その後、`ツール`>`シリアルポート`からUSBtoUARTのように書いてあるものを選択します。


終わったら、上の書き込んでみるをもう一度やってみてください。

## 配線

今回書き込んだプログラムはブラウザ上からGPIOを操作するものなので、それを確認するためにLEDを繋げます。五番ピン→LED(+)LED(-)→抵抗→GNDとなるようにブレッドボードなどで配線します。抵抗の大きさはLEDが消えない程度ならなんでもいいと思います。最悪、なくても多分大丈夫です。

## ブラウザから接続

最後にシリアルモニタに出てきた`192.168.?.??`のようなIPアドレスにブラウザからアクセスします。すると、下の画像のようになるので、それぞれの`here`のリンクを押すと、LEDがついたり消えたりします。
<img width="1280" alt="スクリーンショット 2019-11-17 21.28.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299406/b6398f8b-4be1-cf9e-530c-dbe64b345492.png">

以上でセットアップは終了です。お疲れ様でした。

# 最後に

予想以上に簡単にArduinoでIoTをすることができました。今後これを使って何かを作ったらまた記事を書こうと思います。

この記事に間違いやミス、不備などがありましたら、コメントで教えてくださると幸いです。

最後まで読んでくださり、ありがとうございました。

# 参考
[MacでESP32のLチカ（Arduino IDE版）](https://qiita.com/naohiro2g/items/b8baa3f0e1a880ae9d0a)
[ESP32-DevKitを使ってWiFiコントロール・カーを製作(1)](http://mukujii.sakura.ne.jp/esp1.html)