ESP32-C3-WROOM-02の開発環境を構築する

# はじめに
今回はESP32-C3-WROOM-02をArduino開発環境で扱う方法について調べてみました。型番が似ていることからも推測できるように有名なESP-WROOM-02と形状は全く同じですが、Wi-Fiに加えてBLEも内蔵し、USB機能が追加されている点は大きな特徴だと思います。他のESP32に比べると省略されている機能も多いですが、RISC-Vを採用したCPUに変更されたことで低消費電力、低価格を実現しています。また、技適も取得しているため、安心して使えます。
![chip.jpg](https://akizukidenshi.com/img/goods/L/117493.jpg)
# 開発環境
* Windows 11 Home 22H2
* Arduino IDE 2.3.0
* Arduino Core for the ESP32 2.0.4
# ESP32-C3-WROOM-02
ここではESP32-C3-WROOM-02を従来からも広く使用されているESP-WROOM-32と比較してみます。
| | ESP-WROOM-32 | ESP32-C3-WROOM-02 |
|:-:|:-:|:-:|
| CPU | Xtensa LX6 | RISC-V |
| コア数 | 2 | 1 |
| ビット数 | 32ビット | 32ビット |
| クロック周波数 | 240MHz | 160MHz |
| ROM | 4MB | 4MB |
| RAM | 520kB | 400kB |
| GPIO | 32 | 15 |
| ADC | 16 | 6 |
| DAC | 2 | - |
| UART | 3 | 1 |
| SPI | 4 | 1 |
| IIC | 2 | 1 |
| Wi-Fi | 2.4GHz | 2.4GHz |
| Bluetooth | 4.2 | 5.0 |
| USB | - | 1 |
| 発売日 | 2017年2月1日 | 2022年12月8日 |
| 価格 | 550円 | 310円 |

注意としては対応するBluetoothの規格がBLEのみである点です。磁気センサやタッチセンサも省略されています。このように見ると機能は控え目ですが、手軽にBLEが利用できるという点では活躍しそうです。

:::note info
以下のURLよりデータシートをダウンロードできます。
https://akizukidenshi.com/goodsaffix/esp32-c3-wroom-02_datasheet_en.pdf
:::
# 回路構成
確認用のLEDをGPIO20に接続しました。ENは常にプルアップしておく必要があります。GPIO2とGPIO8もプルアップすることが推奨されていますが、未接続でも動作しました。
![picture.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2951963/ee756e03-b67e-cdb8-1b61-4474a6fbe761.jpeg)
USBから供給される5Vは3端子レギュレータで3.3Vに変換しています。入力側と出力側に0.1uFのコンデンサを接続しました。

:::note info
以下のURLよりデータシートをダウンロードできます。
https://akizukidenshi.com/goodsaffix/NJU7223_j.pdf
:::
# 部品表
主に使用した部品は以下の通りです。全て秋月電子通商より購入できます。今回は何となく手元にあったmicro-B端子を使用していますが、代わりにType-A端子やType-C端子を使用しても構いません。
| 販売コード | 部品名 | 単価 |
|:-:|:-:|:-:|
| 117493 | ESP32-C3-WROOM-02-N4 | 310円 |
| 100432 | NJU7223F33 | 50円 |
| 106656 | AE-USB-MICRO-B-D | 200円 |
| 100317 | EIC-364 | 600円 |

ESP32-C3-WROOM-02は従来からも広く使用されているESP-WROOM-02と形状が全く同じです。そのため、秋月電子通商のピッチ変換基板を使用できそうですが、肝心のピン配置が異なるので実際には無理でした。そこで、自作のピッチ変換基板を使用しました。送料を含めても1枚当たり約85円なので格安です。

https://qiita.com/ricelectric/items/3a3d29f45651f7c7f38b

# ドライバ
まだ何も書き込まれていない状態のESP32-C3-WROOM-02をUSB経由でPCに接続した場合、接続や切断が頻繁に繰り返されているような状態となります。そのため、以下のコマンドをPowerShellに貼り付けて実行し、専用のドライバをインストールしておく必要があります。
```
Invoke-WebRequest 'https://dl.espressif.com/dl/idf-env/idf-env.exe' -OutFile .\idf-env.exe; .\idf-env.exe driver install --espressif
```
# 書き込み
書き込み方法としてはUART経由、USB経由の2種類から選べますが、今回は目玉であるUSB機能を利用してみたいと思います。USBシリアル変換ICなどは不要です。USBの信号線と直結するだけなので非常に簡単です。
| USB | ESP32-C3-WROOM-02 |
|:-:|:-:|
| D+ | GPIO19 |
| D- | GPIO18 |
| GND | GND |

Arduino開発環境で扱うため、設定画面を開き、ESP32のボードマネージャを追加します。

:::note info
以下のURLを所定欄に貼り付けます。
https://espressif.github.io/arduino-esp32/package_esp32_index.json
:::

その後、ボードマネージャからESP32と検索し、インストールします。
![screenshot-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2951963/90780fd4-2626-45e8-b5a6-80572aaa3512.png)
ボードの種類としては`ESP32C3 Dev Module`を選択します。なお、USB経由でシリアルモニタを利用するためには`USB CDC on Boot`を有効化しておく必要があります。
![screenshot-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2951963/bccc9f08-cc70-df1e-e22b-3080add4f05d.png)
ESP32-C3-WROOM-02が接続されているCOMポートを選択し、書き込みます。起動モードを切り替える必要はなく、そのまま動作中でも書き込み可能でした。
# プログラム
例の如くLEDの点滅を試してみました。
```cpp:blink.ino
#define LED_PIN 20

void setup() {
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_PIN, HIGH);
  delay(100);
  digitalWrite(LED_PIN, LOW);
  delay(500);
}
```
# おわりに
これで開発環境が構築できました。ESP32-C3-WROOM-02を搭載した開発ボードも自作している最中なので完成したら公開します。