ESP-WROOM-32(ESP32)周辺回路作成

#ESP32周辺回路作成
スマートフォンとのIOTを実現する前に、まずはESP32周辺回路を作成する。
持たせる機能としては、様々なプログラム実験を鑑みて汎用性の高い「赤外線リモコン」、「温湿度気圧センサ」、「LCD」を回路に組み込む。

#使用部品
○回路に必要な電子部品

| 名称 | 使用部品 | 用途 | 使用数 | 購入リンク先 | データシート |
|:---:|:-------:|:---:|:-----:|:---------:|:---------:|
| WiFi通信モジュール | ESP32-DevKitC(V2) | - | 1|[秋月電子](http://akizukidenshi.com/catalog/g/gM-11819/)|[ESP32](http://akizukidenshi.com/download/ds/espressifsystems/esp_wroom_32_datasheet_en.pdf)|
| 赤外線LED | L-53F3BT | 赤外線データ送信 | 1 | - | [L-53F3BT](https://pdf1.alldatasheet.jp/datasheet-pdf/view/89553/KINGBRIGHT/L-53F3BT.html) |
| 赤外線受信モジュール | IRM-3638 | 赤外線データ受信 | 1 | [digikey.jp](https://www.digikey.jp/product-detail/ja/everlight-electronics-co-ltd/IRM-3638/IRM-3638-ND/2693792)| [IRM-3638](https://media.digikey.com/pdf/Data%20Sheets/Everlight%20PDFs/IRM-36xx_Series.pdf)
| 温湿度気圧センサモジュール | AE-BME280 | 温湿度気圧測定 | 1 |[秋月電子](http://akizukidenshi.com/catalog/g/gK-09421/)| [BME-280](http://akizukidenshi.com/download/ds/bosch/BST-BME280_DS001-10.pdf)|
| I2C接続LCDモジュール | AE-AQM1602A(KIT) | - | 1 | [秋月電子](http://akizukidenshi.com/catalog/g/gK-08896/)| [ST7032](http://akizukidenshi.com/download/ds/sitronix/ST7032-0Dv1_3.pdf) |
| 三端子レギュレータ(1A,3.3V) | UPC2933HF | 入力電圧を3.3Vに変換 | 1 | [Amazon](https://www.amazon.co.jp/NEC-%E6%97%A5%E6%9C%AC%E9%9B%BB%E6%B0%97-%E3%83%AC%E3%82%AE%E3%83%A5%E3%83%AC%E3%83%BC%E3%82%BF-UPC2933HF-5%E5%80%8B%E3%82%BB%E3%83%83%E3%83%88/dp/B07YYFKCNW/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=UPC2933HF&qid=1583575160&sr=8-1) | [UPC2933HF](https://docs.rs-online.com/2f5c/0900766b80635347.pdf) |
| トグルスイッチ | 小型３Ｐトグルスイッチ(１回路２接点) | - | 1 | [秋月電子](http://akizukidenshi.com/catalog/g/gP-00300/) | - |
| タクトスイッチ | タクトスイッチ | - | 3 | [秋月電子](http://akizukidenshi.com/catalog/g/gP-03647/) | - |
| 積層セラミックコンデンサ(C1) | 105(1μF) | 電源回路ノイズ防止(値は任意) | 1 | [秋月電子](http://akizukidenshi.com/catalog/g/gP-08150/) | [105](http://akizukidenshi.com/download/ds/murata/RDER71H105K2K1H03B.pdf) |
| 電解コンデンサ(C2) | 47μF | 電源回路電力供給用(値は任意) | 1 | [カホパーツセンター(6549626)](http://www.kahoparts.co.jp/deal2/list/0213.htm) | - |
| 電解コンデンサ(C3) | 47μF | RCローパスフィルタ(赤外線受信モジュール用) | 1 | [カホパーツセンター(6549626)](http://www.kahoparts.co.jp/deal2/list/0213.htm) | - |
| 抵抗(R1) | 82Ω | 赤外線LED電流調整 | 1 | - | - |
| 抵抗(R2,3,4,5) | 47kΩ | 各スイッチプルダウン用 | 4 | - | - |
| 抵抗(R6) | 33Ω | RCローパスフィルタ(赤外線受信モジュール用) | 1 | - | - |
| 抵抗(R7) | 100Ω | トランジスタベース抵抗 | 1 | - | - |
| トランジスタ(Q1) | 2SC1815BL(NPN) | 赤外線LED電流確保用 | 1 | [Amazon](https://www.amazon.co.jp/%E6%9D%B1%E8%8A%9D-TOSHIBA-%E3%82%B7%E3%83%AA%E3%82%B3%E3%83%B3%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B8%E3%82%B9%E3%82%BF%E3%83%BC-2SC1815-BL-10%E5%80%8B/dp/B00J1N1X94) | [2SC1815BL](http://akizukidenshi.com/download/ds/toshiba/2sc1815.pdf) |

○回路作成に必要なその他部品

| 名称 | 購入リンク先 |
|:---:|:---------:|
| ユニバーサル基盤 | [Amazon](https://www.amazon.co.jp/HiLetgo%C2%AE-10%E5%80%8B%E3%82%BB%E3%83%83%E3%83%88-%E3%83%A6%E3%83%8B%E3%83%90%E3%83%BC%E3%82%B5%E3%83%AB-%E3%83%96%E3%83%AC%E3%83%83%E3%83%89%E3%83%9C%E3%83%BC%E3%83%89-%E3%83%97%E3%83%AD%E3%83%88%E3%82%BF%E3%82%A4%E3%83%97/dp/B011QQJVF6/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=%E5%9F%BA%E7%9B%A4&qid=1583578878&sr=8-1) |
| ピンソケット | [秋月電子](http://akizukidenshi.com/catalog/g/gC-10102/) |
| ジャンパーワイヤー | [秋月電子](http://akizukidenshi.com/catalog/g/gC-05371/) |
| 9V用電池ボックス | [秋月電子](http://akizukidenshi.com/catalog/g/gP-02668/) |
| 2.1mm DCジャック | [秋月電子](http://akizukidenshi.com/catalog/g/gC-09408/) |
| 2.1mm DCプラグ | [秋月電子](http://akizukidenshi.com/catalog/g/gC-02108/) |

#回路図面
<img width="1100" alt="スクリーンショット 2020-03-08 1.10.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595774/5d0dd1df-e285-4fb5-7a97-0a8797aa1663.png">

#回路図の説明
回路を作成するにあたってESP32への接続箇所や各電子部品の選定についての理由を紹介する。

<b>1.ESP32への接続ピンの選定方法</b>
ESP32のデータシートを確認すると、各ピンの配置と機能は以下のようになる。　[(スイッチサイエンス参照URL)](https://trac.switch-science.com/wiki/esp32_tips)
<img width="1450" alt="スクリーンショット 2020-03-07 20.50.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595774/91cfd40c-e905-798e-1d53-face8f7dc67b.png">
また、各電子部品のデータやりとりとしては「I2C接続LCDモジュール」がI2C通信、「温湿度気圧センサモジュール」がSPI通信、「赤外線受信モジュール,トグルスイッチ,タクトスイッチ×3」が入力、「赤外線LED」が出力となっている。
以上のような条件を踏まえて以下のように接続をした。

| 名称 | 使用部品 | データのやり取り | ESP32への接続ピン |
|:---:|:-------:|:-----------:|:---------------:|
| I2C接続LCDモジュール | AE-AQM1602A(KIT) | I2C通信 | SDA:21,SCL:22 |
| 温湿度気圧センサモジュール | AE-BME280 | SPI通信 | SCK:14,SDO:12,SDI:13,CSB:26 |
| 赤外線受信モジュール | IRM-3638 | 入力 | OUT:17 |
| トグルスイッチ | 小型３Ｐトグルスイッチ(１回路２接点) | 入力 | 39 |
| タクトスイッチ | タクトスイッチ | 入力 | 34,35,36 |
| 赤外線LED | L-53F3BT  | 出力 | トランジスタ(ベース):16 |

LCDについては、I2C接続ピンが21,22しかないため固定となる。

温湿度気圧センサモジュールについては、SPI通信できる種類が計3種類(SPI,VSPI,HSPI)あるが、SPIについては各接続ピンがESP32内臓のFLASHメモリに接続されており使用が推奨されていない。また、初期設定でSPI通信を利用する場合、VSPI回路が使用される仕様となっているためVSPI機能があるピン(12,13,14,16)に接続している。

赤外線受信モジュール,トグルスイッチ,タクトスイッチ×3は、入力のみの機能であるため入力機能がありその他の機能が少ないピン(17,33,34,35,39)を選定している。
※33,34,35,39ピンについては入力のみ可能。

赤外線LEDは、出力のみの機能であるため出力機能がありその他の機能が少ないピン(16)に接続している。

<b>2.三端子レギュレータ周りの電子部品</b>
UPC2933HFのデータシート推奨回路図面を確認したところ、「コンデンサ:0.1μF以上,電解コンデンサ:47μF以上,ダイオード,ショットキーダイオード」が使用されるようになっていた。
<img width="644" alt="スクリーンショット 2020-03-07 22.12.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595774/b46d61eb-42c9-5413-19f4-cd5fba3d027e.png">

こちらの理由を調べて見たところ以下のような理由だと考えられる。
・入力側にコンデンサを入れる理由：入力側ノイズによる電圧変動で出力電圧が変動しないようにするため。
・出力側に電解コンデンサを入れる理由：出力側の電圧を安定化させるため。
・出力→入力にダイオードを入れる理由：「入力電圧<出力電圧」になると逆電圧や逆電流にてICが破損する恐れがあるため、ダイオードを入 れて入力側に常時電圧をかけることによって「入力電圧<出力電圧」にならないようにするため。
・出力側にショットキーダイオードを入れる理由：出力側の電流を安定化させるため。
コンデンサについては、所有している物が1μFしかなかったためそちらにて代用している。

本回路では元々製作者が所有していたということもあり、「積層セラミックコンデンサ:1μF,電解コンデンサ:47μF」を接続している。
ダイオードについては、所有しておらず、今のとこをなくても動作に問題がないため設置をしていない。
※もし同様の回路を作成する場合は設置して下さい。

<b>3.赤外線LED周りの電子部品</b>
L-53F3BTのデータシートを確認すると、順方向電圧(ForwardVoltage)の通常値が1.2V、順方向電流(Forward Current)の動作電流が20mA,最大値が50mAだと読み取れる。
<img width="635" alt="スクリーンショット 2020-03-07 22.50.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595774/08aa6dc4-f73c-f993-c955-550728215bbd.png">
ここで、ESP32からのピン出力電圧は3.3Vであるため「3.3V - 1.2V = 2.1V」の電圧値で20〜50mAの電流が流れるような抵抗を選ぶ必要がある。
　20mAの場合：2.1V / 0.02A = 105Ω、　50mAの場合：2.1V / 0.05A = 42Ω
したがって、採用する抵抗値は42〜105Ωの間となる。
今回は、82Ωの抵抗を使用しているのでその時の電流値は「2.1V / 82Ω × 1000 = 25mA」になるような抵抗値を採用している。
しかし、ESP32は各ピンからの出力電流に上限があり、安定して電流を供給することが不明確である。
そのため、トランジスタ(2SC1815BL)を用いて定電流が流れるようにする必要があるため、ベースにESP出力、コレクタに赤外線LED、エミッタをGND接続することでベース側に少量の電流しか流れなくても赤外線LEDには一定電流を流すことが可能である。
ベース電流の最大値が50mAであるためそれを超えないようにESP32出力ピン〜2SC1815BLベースに100Ωの抵抗を設置する。
　ベース電流 = 3.3V / 100Ω × 1000 = 33mA <50mA
※実際に、トランジスタ無しで接続すると順方向電流が足りず、赤外線送信がうまくいかなかった。
<img width="1313" alt="スクリーンショット 2020-03-08 2.14.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595774/59ccce0a-5f88-2c3b-6a45-9fc11a93598d.png">
<img width="435" alt="スクリーンショット 2020-03-08 2.29.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595774/106e9814-bd75-a63c-a25b-cd3238485f53.png">


<b>4.赤外線受信モジュール周りの電子部品</b>
IRM-3638のデータシート推奨回路図面を確認したところ、「抵抗：47Ω,電解コンデンサ：47μF,可変抵抗：10kΩ以下」が使用されるようになっている。
<img width="666" alt="スクリーンショット 2020-03-08 2.38.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595774/667072fe-350a-35fc-301e-d2f7d4181ac7.png">

この用途としては、以下の理由から設置されている。
・入力側に抵抗と電解コンデンサを入れる理由：赤外線を受信すればそれに応じて電圧が出力されるが、その間に入力電圧が変動すると赤外線受信モジュールから発信される電圧も追従して変動するため、正確な値を受信できない。その入力電圧ノイズを除去するためにRC回路(ローパスフィルタ)を設置して正確な値を受信させるため。
・入力側に可変抵抗を入れる理由：ローパスフィルタは抵抗とコンデンサからなるカットオフ周波数に依存するが、万が一、上流からのノイズが元々設置しているRC回路のみでは除去できない場合に可変抵抗で抵抗値を変更させることによってカットオフ周波数を調整できるようにするため。
※詳細は「ローパスフィルタ」について調べて下さい。

本回路では元々製作者が所有していたということもあり、「抵抗:32Ω,電解コンデンサ:47μF」を接続している。
この時のカットオフ周波数は「f = 1/2πRC」より、
　カットオフ周波数 = 1 / 2 × π × 32Ω × 47μF = 105Hz
となり、105Hz以下の信号を通してそれ以上の信号はカットされる。
可変抵抗は、なくても特段問題ないため設置はしない。

<b>5.スイッチ周りの電子部品</b>
トグルスイッチとタクトスイッチ〜GND間に47kΩの抵抗を入れている。（この場合はプルダウン抵抗）
これは、スイッチが押されたかどうかを判断する際に抵抗を入れることによってON/OFFで接続点の電圧が変化することになる。
その電圧を読み取ることによってスイッチが押されたかどうかを判断するため、抵抗を入れる必要がある。
抵抗値は特に決まりはないため、元々製作者が所有していた47kΩを使用する。
※通常は10kΩの抵抗を使用する。
<img width="1113" alt="スクリーンショット 2020-03-08 3.24.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595774/02739748-c469-8f84-d4d7-1322fce9b635.png">

#回路写真
実際に上記回路をユニバーサル基盤にはんだ付けしたもの以下に載せておく。
もし自身ではんだ付けする際は参考にしてみて下さい。
![IMG_1284.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595774/70b7921c-f843-50d2-e2e5-96a06a30900a.jpeg)
![IMG_1285.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595774/1cd95535-ead7-149b-8751-ecdee4d1e0d3.jpeg)
![IMG_1286.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595774/c560b8a1-3eb4-eb6f-422f-30d06889dba7.jpeg)

ESP32周りの回路作成は以上になります。
所々間違っている箇所があるかもしれませんが、何かあればコメント等下さい。

#次回記事予定
ESP32を動かすための開発環境(Arduino)の設定

#参考文献
・https://trac.switch-science.com/wiki/esp32_tips
・http://sim.okawa-denshi.jp/CRlowkeisan.htm