ESP32でLチカ

# 前提
:::note warn
この記事は、主が開発した流れ、試行錯誤したところなどをまとめた個人的な備忘録です。用語や順序・細かい操作などは説明を省くことが多々ありますのでご了承ください。
:::

基本的に以下の記事を参考にしています。

https://qiita.com/kotaproj/items/2dec528de7140d0e772b#l%E3%83%81%E3%82%AB%E7%94%A8%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B

# 環境・用意したもの
* ESP32: ESPRESSIF製 ESP32-WROVER-E
* LEDライト
* ジャンバーワイヤー
* ブレッドボード
* 抵抗：今回は220 Ω（多分小さすぎなければなんでもいい）
* Windows11
* VSCodeの拡張機能: PlatformIO IDE

ESP32はちゃんとしたのを買いたかったので、[秋月電子](https://akizukidenshi.com/catalog/)（通販コード：M-15674）から買った。（最初技適マークがなくて使えない800円くらいのしょうもないのをAmazonで買って失敗したのは内緒）

ちなみに↓の画像にある通り、秋月電子は商品等への直接リンクを避けてほしいみたいなので代わりに通販コードを載せている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1571966/493514f2-e68b-18d4-ce5c-3c3a98b4d313.png)

# VSCodeからESP32にプログラムを書き込む
## PlatformIOで作業用プロジェクトを作成
PIO Home -> New Project
Project Name: blink_led
Board: Espressif ESP32 Dev Module
Framework: Arduino Framework
Location: "Use default location"にチェック

:::note warn
注意事項が２点
* Remote WSLでの開発は非推奨
* OneDriveがデフォルトのフォルダになっている人はPIO開発環境のデフォルトフォルダもOneDrive下になってしまう。
:::
* Remote WSLでの開発は非推奨
Remote WSLのウィンドウを開いて作業しようとすると、フォルダ名にバックスラッシュが入ってPathの設定でめんどくさい。なのでRemote Windowは開かないことをお勧めする（Remote SSHの場合はよく知らん）

* OneDriveがデフォルトのフォルダになっている人
Windows11からか知らんが、なぜかOneDriveでバックアップをしているせいで、デスクトップ、ドキュメント、ピクチャのPathがOneDriveになっている。なので以下でそれを解除してやる。
やり方は以下の記事を参照。

https://sma-lind.hatenablog.com/entry/56326604

古いので、自動保存などの名前が異なっていたが大きな違いはなかった（バックアップの停止をするたびに「準備しています...」とかくるくるしてくそイラついた）。

## プログラムを書いてビルド&アップロード
```main.cpp
#include <Arduino.h>

#define LED_PIN   15

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  delay(100);
  Serial.printf("%s - run\n",__func__);
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(LED_PIN, HIGH);
  Serial.printf("%s - LED_PIN - HIGH\n",__func__);
  delay(1000);
  digitalWrite(LED_PIN, LOW);
  Serial.printf("%s - LED_PIN - LOW\n",__func__);
  delay(1000);
}
```

PCにESP32をつないで画像のように配線
![S__326868994.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1571966/ba98d645-4560-985d-86b5-0a6d4b36150d.jpeg)


ビルドはうまくいったが、アップロードで以下のようにupload portのエラーを吐かれた。
```
Looking for upload port...
Error: Please specify `upload_port` for environment or use global `--upload-port` option.
For some development platforms it can be a USB flash drive (i.e. /media/<user>/<device name>)
*** [upload] Explicit exit, status 1
```
PIOでDevicesの項目を見てみると確かにNo Itemとなっている。

このエラーは次の2つが原因だった。
* ケーブル
* 専用のドライバが入ってない

デバイスマネージャーでESP32が認識されているか確認してみた。
最初、手持ちの適当なケーブルでつないでいたため、そもそも認識されなった（これに気づくまでレガシーなハードウェアの追加とやらで通信ポートを入れたり、入れてもリソース不足で警告出てわけわからんかったり無駄に時間を費やしてしまった、、、）
結局Amazonで別のESP32を買ったときについてきたUSBケーブルでつないだらちゃんと認識した（しょうもないとか言ってごめんありがとう）。

正しいケーブルでつないで、デバイスマネージャーを見てみると認識はしているものの、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1571966/05c1199e-c707-600c-3825-5108830a9672.png)
のような警告が出た。ダブルクリックしてみてみると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1571966/0ef1ef88-6cbd-1b0d-8a05-8a4025d066aa.png)
とドライバーがないようなので、[Silocon LabsのCP210x USB - UARTブリッジVCPドライバ](https://jp.silabs.com/developers/usb-to-uart-bridge-vcp-drivers)のCP210x Universal Windows Driverをダウンロード。
ダウンロードしたzipファイルを解凍して、再度上の画像のドライバーの更新
コンピュータを参照してドライバーを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1571966/7db28d42-ed30-84bc-1fc7-e5e03e5e2be7.png)
ダウンロードしたフォルダを参照してあげればあとは自動的にドライバをインストールしてくれる。

PIOで更新をかけたらしっかり認識してくれた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1571966/cd21cb52-7788-6a54-2dca-d4f64588c33a.png)

もう一度アップロード。
しっかり機能した。
![S__326877186.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1571966/0abf1c3d-6e18-a3ea-a84d-eb69c3ee2391.jpeg)
お前、そんな色してたんか。。。

以上。