ESP32-C3のGPIOのUARTを使おうとしてはまったポイントがあるので紹介します。
M5Stack(ESP32-S3)などでも同様の使用になっていると思われますので参考にしてください。
結論
先に結論を書いてしまうと、ESP32C3は以下のような仕様になっています。
- CDC ON BOOTの設定によってUART通信の接続先が変わる
- Enableならマイコン内蔵USBコントローラーへ接続される
- DisableならGPIOのTXD/RXD端子に接続される
- つまり、同じスケッチでも書き込み時の設定で挙動が異なる
ちょっと特殊なESP32C3
ESP32-C3やESP32-S3は他のESP32シリーズマイコンと異なり、USBコントローラーが内蔵されているためPCとの接続にシリアル変換器が不要です。(GPIO18/19にUSBの±Dを直接接続できます)
デフォルトではこの内蔵USBコントローラー側にシリアル通信が流れます。ArduinoIDEなどでシリアルモニタを利用してデータをとる場合にはこちらの方が便利です。
一方、ESP32-WROOM-32EなどのESP32マイコンの場合はUSBコントローラーを内蔵していないため、プログラムの書き込みのためにはPCとの接続に別途USB-シリアル変換器が必要です。
ESP32に限らず、多くのArduino開発ボード(AVRマイコン)はマイコンの外にUSB-シリアル変換器を搭載している場合がほとんどです。
シリアル通信の接続先
シリアル通信(UART通信)の接続先は”USB CDC On Boot”というオプションで設定できます。
EnableであればUSBを通してUARTのデータが流れます。Disableに設定すればGPIOのTXD/RXD(12/13番ピン)にUARTのデータが流れます。
参考スケッチ
わざわざ書くほどでもありませんが一応参考スケッチです。
“test”という文字列を1秒ごとに送出するだけです。デフォルト(USB CDC On BootがEnable)の状態であれば、下記プログラムをESP32C3に書き込み、ArduinoIDEのシリアルモニタを開けば1秒ごとに”test”という文字列が受信できるはずです。
USB CDC On BootをDisableにすると、この信号は12番ピンのTXDから送出されるのでシリアルモニタでは受信できなくなります。この場合は別途USB-シリアル変換器などを利用する必要があります。
なお、USB CDC On BootをDisableにしてもプログラムの書き込みには影響ありませんので安心してください。(ESP32-C3に内蔵されているUSB-シリアル変換器の動作が止まるわけではありません)
void setup() { Serial.begin(9600); } void loop() { Serial.print("test"); delay(1000); }
設定方法
ArduinoIDEで[ツール]-[USB CDC On Boot]をポイントし、Enable/Disableを選択します。同じスケッチでもこの部分の設定を変えるとUART接続先が変わります。
コメント