🛠 Périphérique composite CDC + HID et bootloader Caterina
Objetivos
Construir un dispositivo USB compuesto: la Leonardo expone simultáneamente un puerto serie CDC (depuración) y un teclado HID (tipo de ejecución), gracias a la clase HID abierta del núcleo de Arduino (HID.cpp en ArduinoCore-avr). A continuación, dominarás el bootloader Caterina: protocolo AVR109 sobre USB CDC, detección mediante "touch" a 1200 baudios, ventana de 8 s y la recuperación de un sketch que monopoliza el bus USB en cada arranque (runaway).
Material
- 1 Arduino Leonardo + cable micro-USB
- Un segundo puerto USB o un hub útil para la recuperación en caso de sketch runaway
Código completo
// Peripherique composite : CDC (Serial) + clavier HID simultanes
#include <Keyboard.h>
void setup {
Serial.begin(9600); // interface CDC : le port serie visible par le PC
Keyboard.begin; // interface HID : la carte devient clavier
delay(3000); // garde-foc : laisser le temps de placer le curseur
Serial.println(F("Tapez une ligne : elle sera frappee au clavier."));
}
void loop {
if (Serial.available > 0) {
String ligne = Serial.readStringUntil('\n');
ligne.trim;
if (ligne.length > 0) {
Keyboard.print(ligne); // sortie HID vers l'hote
Keyboard.releaseAll;
Serial.println(F("Frappe terminee.")); // echo CDC
}
}
}
Verificación esperada
Tras la carga, el ordenador ve a la vez un dispositivo de teclado y un puerto serie. Coloca el cursor en un editor, escribe una línea en el monitor serie: la Leonardo la "vuelve a teclear" en la aplicación enfocada. El descriptor compuesto es elegido automáticamente por el núcleo en cuanto se incluye una biblioteca USB (Keyboard/Mouse) además de Serial.
Errores frecuentes
- Upload runaway: un sketch que falla o se bloquea al arrancar puede volver a apoderarse del bus USB en cada reconexión e impedir cualquier nueva carga. Recuperación: pulsa el botón reset y lanza la carga dentro de la ventana de ~8 s del bootloader, o mantén pulsado el reset mientras conectas el cable. El sketch anterior sigue ejecutándose al reconectar porque el bootloader se omite al encender.
- Activar el bootloader manualmente: abrir el puerto a 1200 baudios (el "touch") fuerza el modo Caterina (PID 0x0036, frente a 0x8036 en funcionamiento normal); el IDE lo hace automáticamente, un monitor serie clásico no.
- Fuses modificados: los valores originales son low 0xFF, high 0xD8, extended 0xCB; borrarlos elimina Caterina — habrá que reprogramar por ICSP.
- Secuencia de enumeración ignorada: el puerto COM desaparece y reaparece durante la carga; es necesario programar una reconexión en la automatización.
- Runaway HID: nunca inundar el host con pulsaciones sin condición; mantén el CDC abierto para poder cortar a distancia.
Otros tutoriales para esta placa
- Faire clignoter la LED intégrée (broche 13)
- Bouton et console série : Serial (USB) vs Serial1 (broches 0/1)
- Lire un capteur analogique : potentiomètre et ADC 10 bits
- Clavier USB : taper du texte avec la bibliothèque Keyboard
- Souris USB : déplacer le curseur avec la bibliothèque Mouse
- Asservir un servo moteur avec un potentiomètre (PWM)
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinoclavier-auto-tape.inoArduinosouris-cercle.inoArduinotelecommande-media.inoArduinobouton-clic-souris.inoArduino