さよならESP32-DevKitC君🥺 

はじめまして！　記事をご覧くださりありがとうございます。
フリーランスエンジニアと通信制大学生(心理学)をしているたつのぶと申します。

今回は、「さよならESP32-DevKitC君」というテーマで
**ESP32-DevKitCを使わずにESP32チップ単体でプログラムを書き込む手順**を
まとめた記事です。具体的には、IoTプロタイプに使ったりするESP32-DevKitC(開発ボード)
を使うのではなく、製品化されるときに組み込まれるレベルに近いESP32チップ単体を取り扱い
備忘録としてまとめた内容になっています。
ぜひ最後まで読んでくださると幸いです！！

#はじめに
![M-11819.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580405/e5d6c1b1-88f1-51b2-397a-e581735ef2cd.jpeg)
IoTプロダクトを作っている方とかはおなじみ開発ボード
ESP32-DevKitC。これを使うことでIOピンにセンサ・アクチュエータをつないで気軽にIoTなどのプロトタイプ実装ができます。
しか～し。
たいていの製品はこの開発ボードを使うことはほとんどなく、
写真のココの部分(ESP32チップ単体)をベースに電源回路や周辺回路とセンサなどが一体化した基板にプログラムを書き込んでいきます。開発ボードを使うのは悪いことではありませんが、
ハードウェアをもう少し掘り下げて扱うことで、いろいろESP32の仕組みや挙動の理解が深まるということでこの記事を書きました。それでは、開発ボードより回路に近い世界を体感してみましょう！


#使うもの
- ESP32 DIP化キット

https://akizukidenshi.com/catalog/g/gK-11755/

![K-11755.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580405/6365ca67-b508-2463-a9cf-45dd4651c08a.jpeg)


- USBシリアル変換モジュール

 
https://akizukidenshi.com/catalog/g/gM-08461/

![M-08461.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580405/dd279c9a-4b7d-790d-1049-49c36babee65.jpeg)

- LED

- カーボン抵抗
     470Ω←LED電流制限用/4.7kΩ←ENpinプルアップ用

- Arduno Nano
 　ESP32に3.3vを供給するため使用

- コンデンサ
　100μF←電源安定用

- タクトスイッチ
　ENボタンに使用

- ブレッドボード・ジャンパー線

#配線

|モジュール  |ESP32DIP化キット |
|---|---|
|ArdunoNanoの3.3v  |3.3v|
|ArduinoNanoのGND  |GND  |
|シリアル変換モジュールのGND |GND |
|シリアル変換モジュールのRX |TX  |
|シリアル変換モジュールのTX  |RX |
|4.7kΩ抵抗の片足を3.3v  | 4.7kΩ抵抗の片足をENピン |
|タクトスイッチの片方をGND  |タクトスイッチのもう片方をENピン  |
|モード選択に使うジャンパー線の片方をGND/抜く ※1 |　ジャンパー線の片方をIO0  |
|-  |コンデンサ長足を3.3v/コンデンサの短足をGND  |
|LEDのカソード＝470Ω抵抗＝GND |LEDのアノードをIO4  |
※1　モード選択(IO0がGNDのときプログラム書き込みモード/IO0未接続のときプログラム実行モード)

#プログラム書き込み手順
①IO0（モード選択ピン）をGNDに
②一応EN用タクトスイッチを押す。
③通常のESP32と同じ書き込み方法で書き込む(ArduinoIDE)
※基本のLチカプログラムでテスト！！
※約一秒おきにLEDが点灯消灯を繰り返すプログラムになっている。

```cpp
#define LEDPIN 4
void setup() {
  pinMode(LEDPIN, OUTPUT);
}
void loop() {
  digitalWrite(LEDPIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LEDPIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}
```
④プログラム書き込みが終了したら、GNDにさしているIO0ジャンパー線を抜く。
⑤EN用スイッチを押す。


#備忘録(電圧不安定問題)
最初コンデンサがない状態でプログラムを書き込んだら
シリアルコンソールから下記エラーがでてきた。

![E4vZvgtVgAEwi-Q.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580405/bb5f3951-4a94-e3c0-7913-5f103f7d6b4c.jpeg)

LEDも点滅しなくて困っていた。🥺 🥺 🥺 🥺 








「Brownout detector was triggered」
どうやら**電圧低下**していることが原因らしい。

疑問を持って実際にオシロスコープで確認！！

**オシロスコープで電圧低下して電源が安定しない波形が、はっきりわかんだね()**

![E4vZugjVgAIVrWE.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580405/723ddee7-7031-bf3f-baf3-06b4413d2e79.jpeg)


電源安定用のコンデンサを入れると.....

![E4vZvQvVUAEioTY.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580405/3dcd0531-d465-4df0-8930-110ef4e58b03.jpeg)


###  Lチカがちゃんとできました～！！

![led_red.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580405/f706b571-98e2-e86d-6ba2-fb9522ee717e.png)


#最後に
いかがだったでしょうか。
ESP32-DevKitC(開発ボード)ではボードが自動でプログラム書き込みをやっていましたが、
DIP化キットを使うことにより、**ENピンやIO0(モード選択ピン)の切り替えを内部**でやっていたということが分かります。あと**電源回路などを若干ごにょごにょ**すればオリジナル基板だってできると思います。

これを機会に読まれた方が、タイトルのようにESP32-DevKitCからさよならして、一歩でも製品向けのIOT開発に近づけるきっかけになると幸いです。


ここまで読んでくださりありがとうございました！！それでは次の記事で✋