Seeed XIAO ESP32C3 を試してみた

# はじめに

XIAOシリーズにESP32-C3(RISC-V CPU、無線機能(Wi-Fi、Bluetooth® Low Energy))が搭載された製品(Seeed XIAO ESP32C3)が発売されたので、ノラバッジ(MINI LED BADGE)を対応するため、さっそく試してみた。

- Seeeduino XIAO
- Seeed XIAO RP2040
- Seeed XIAO BLE nRF52840 (前回)
- Seeed XIAO BLE nRF52840 Sense

https://qiita.com/kitazaki/items/af9c952eb6b4f6e93507

- Seeed XIAO ESP32C3 (今回)

![2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/36732ef8-363b-11f9-f2ca-49e595ae9748.jpeg)

## 注意点

- アンテナが別 (付属しているアンテナをソケットに挿して使用する必要がある)
- ピンヘッダが付属しない (ブレッドボードに挿して使用する場合は、別にピンヘッダを用意してハンダ付けする必要がある)
- オンボードにLEDが付属しない (Lチカを試す場合は、別にLEDを用意する必要がある)

# XIAO BLEのArduino IDE環境

基本的にSeeed Wikiを参照して手順とおりに実施すれば環境構築は完了します。

https://wiki.seeedstudio.com/XIAO_ESP32C3_Getting_Started/

ボードマネージャのダウンロードサイズが大きく、かなり時間が掛かりました。
バージョンは2.0.4をインストールしました。(Wikiは2.0.3でした)

![スクリーンショット 2022-09-19 17.23.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/0b52a6f3-f638-6825-9ee4-3aaac033b485.png)

## USB接続で認識されるデバイス情報

```bash
$ system_profiler SPUSBDataType

USB:

    USB 3.0 Bus:

      Host Controller Driver: AppleUSBXHCISPTLP
      PCI Device ID: 0x9d2f 
      PCI Revision ID: 0x0021 
      PCI Vendor ID: 0x8086 

        USB JTAG/serial debug unit:

          Product ID: 0x1001
          Vendor ID: 0x303a
          Version: 1.01
          Serial Number: 10:91:A8:03:98:C0
          Speed: Up to 12 Mb/s
          Manufacturer: Espressif
          Location ID: 0x14300000 / 2
          Current Available (mA): 500
          Current Required (mA): 500
          Extra Operating Current (mA): 0

    USB 3.1 Bus:

      Host Controller Driver: AppleUSBXHCIAR
      PCI Device ID: 0x15d4 
      PCI Revision ID: 0x0002 
      PCI Vendor ID: 0x8086 
      Bus Number: 0x00
```

## ボードの選択

「ツール」→「ボード」→「ESP32 Arduino」→「XIAO_ESP32C3」の順に選択します。 

## シリアルポートの選択

ボードの選択はmacOS環境を例に説明されていましたが、シリアルポートの選択はWindows環境を例に説明されていますので、少し異なる部分がありました。

「ツール」→「シリアルポート」→「/dev/cu.usbmodem14301 (ESP32S3 Dev Module)」の順に選択します。
(環境によって、usbmodemXXXXXのXXXXXの数字は変わる可能性があります)

![100.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/eccc3bc4-0b5b-31b9-5e08-dc1f8992a1f4.jpeg)

# Lチカ

Seeed Wikiの手順通りです。

![3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/3213bf3b-ba60-fb2d-17de-d436482b2104.jpeg)

# BLEの動作確認

## ノラバッジ(MINI LED BADGE)の対応機種

- MDBT42Q (nRF52832)
- M5Stick-C、M5Atom Lite、M5Atom Matrix (ESP32)
- nRF52840 (前回)
- ESP32C3 (今回)

https://qiita.com/kitazaki/items/f748ba7c0739ec22e182

https://qiita.com/kitazaki/items/537e9b215e2089004bbc

nRF52840では新たなBLEライブラリ(ArduinoBLE) を使用する必要がありましたが、ESP32C3はESP32と同じライブラリ(ESP32 BLE Arduino)で問題ありませんでした。(ライブラリをインストールした訳ではなく、スケッチ例(サンプルコード)を見て判断しました)
I2Cの使用も問題ありませんでした。

| チップ | ライブラリ | バージョン |
|---|---|---|
| nRF52832 | Arduino BLEPeripheral | 0.4.0 |
| ESP32 / ESP32-PICO | ESP32 BLE Arduino | 1.0.1 |
| ESP32 / ESP32-PICO | NimBLE-Arduino | 1.0.1|
| nRF52840 | ArduinoBLE | 1.3.1 |
| ESP32C3 | ESP32 BLE Arduino | 不明 |

![101.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/74c6fa9e-e7e3-d8fd-6352-e5513629be0f.jpeg)

### 注意

ビルドした際にBLEPeripheral.hが見つからないエラーが出ました。コメントアウトすれば問題ありませんでした。

```c++:NoraPeri.h
// #include <BLEPeripheral.h>  // XIAO ESP32C3では不要
```

20220908_ESP32C3_HT16K33_788AS_01.inoは修正の必要はありませんでした。
ソースコードはGitHubに置きました。

https://github.com/kitazaki/nora_badge_3rd/tree/master/XIAO_ESP32C3

![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/fc4f3998-9489-4692-f927-2645f7601c2e.jpeg)

最初、MINI LED BADGEの表示速度が速すぎる問題が発生しました。
CPUがRISC-Vに変更されたことに伴い、処理速度が速くなったと理解しました。

https://youtube.com/shorts/Sf5R8JYvZUI?feature=share

sleepの長さを調整することで、通常の表示速度にできました。

https://youtube.com/shorts/uvsfJytlX24?feature=share

LEDBadgeアプリ(BLE)からの表示文字書き換えも問題ありませんでした。

https://youtube.com/shorts/guklu5t_iB0?feature=share