🛠 Console série sur l'USB natif (CDC) du S3
Objetivos
Dominar la consola serie en ESP32-S3 mediante USB nativo. A diferencia del ESP32 clásico, el S3 no necesita un chip puente USB-serie: por un lado, posee un controlador USB-OTG (pines GPIO19/GPIO20) y, por otro, un periférico USB-Serial/JTAG. Al activar «USB CDC On Boot: Enabled», el comando Serial.print sale directamente por el puerto USB de la placa. También aprenderás la diferencia con la antigua UART0 (GPIO43 TX / GPIO44 RX por defecto) y cómo recuperar el acceso si el puerto desaparece.
Material
- 1 placa ESP32-S3 con USB nativo cableado (DevKitC-1 v1.1, XIAO ESP32S3, Feather S3…)
- 1 cable USB de datos
- IDE Arduino 2.x con el core «esp32 by Espressif Systems» (v2.0.14 o más reciente)
Código completo
// Console sur USB natif : outils Arduino -> "USB CDC On Boot: Enabled"
// (sur certaines cartes : "USB Mode: Hardware CDC and JTAG")
unsigned long t0 = millis;
uint32_t n = 0;
void setup {
Serial.begin(115200); // flux CDC, pas d'UART materielle ici
while (!Serial && millis < 5000) {
// attend que le terminal hote soit branche (max 5 s)
delay(10);
}
Serial.println;
Serial.println("ESP32-S3 : console sur USB natif (CDC)");
Serial.printf("Chip: %s, %d coeur(s), %.0f MHz\n",
"ESP32-S3", portNUM_PROCESSORS,
(double)getCpuFreqMHz);
}
void loop {
Serial.printf("[%4.1f s] message n=%u\n", (millis - t0) / 1000.0, ++n);
if (Serial.available) { // echo de ce que l'hote envoie
char c = Serial.read;
Serial.print("Recu: ");
Serial.println(c);
}
delay(1000);
}
Verificación esperada
El monitor serie del IDE (o PuTTY/Arduino Serial Monitor a 115200) muestra la cabecera y luego una línea por segundo; los caracteres tecleados desde el ordenador se devuelven. Todo esto con un solo cable USB, sin puente serie externo. El monitor de sistema de Windows confirma la presencia de un dispositivo «USB Serial Device» cuando la placa es reconocida.
Errores frecuentes
- Dejar «USB CDC On Boot» en Disabled: el código se ejecuta pero Serial.print sale por la UART0 (GPIO43/44) y el monitor permanece desesperadamente vacío.
- Escribir demasiado pronto: en CDC, los primeros bytes emitidos antes de abrir el puerto se pierden; el bucle while (!Serial ...) anterior limita este fenómeno.
- Un TinyUSB/HID posterior reclama GPIO19/20: si se cambia al modo TinyUSB, el puerto CDC de hardware desaparece; todo se decide en el menú Herramientas.
- Bloqueado en un bucle de reinicio: mantener pulsado BOOT, pulsar RESET, soltar RESET y luego BOOT fuerza el modo de descarga (ROM) y permite volver a grabar el firmware.
- Tipo de placa incorrecto: elegir «ESP32S3 Dev Module» (o la placa exacta), no un modelo ESP32 o ESP32-C3.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht22.inoArduinooled-i2c.inoArduinoserveur-web.inoArduino