🛠 Périphérique composite CDC + HID et bootloader Caterina
Objectifs
Construire un périphérique USB composite : la Leonardo expose simultanément un port série CDC (débogage) et un clavier HID (sorte d'exécution), grâce à la classe HID ouverte du cœur Arduino (HID.cpp dans ArduinoCore-avr). Vous maîtriserez ensuite le bootloader Caterina : protocole AVR109 sur USB CDC, détection par « touch » à 1200 bauds, fenêtre de 8 s, et la récupération d'un sketch qui monopolise le bus USB à chaque démarrage (runaway).
Matériel
- 1 Arduino Leonardo + câble micro-USB
- Un second port USB ou un hub utile pour la récupération en cas de sketch runaway
Code complet
// Peripherique composite : CDC (Serial) + clavier HID simultanes
#include <Keyboard.h>
void setup {
Serial.begin(9600); // interface CDC : le port série 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
}
}
}
Vérification attendue
Après téléversement, l'ordinateur voit à la fois un périphérique clavier et un port série. Placez le curseur dans un éditeur, tapez une ligne dans le moniteur série : la Leonardo la « retape » dans l'application focalisée. Le descripteur composite est choisi automatiquement par le cœur dès qu'une bibliothèque USB (Keyboard/Mouse) est incluse en plus de Serial.
Erreurs fréquentes
- Upload runaway : un sketch qui plante ou s'accroche au démarrage peut se réemparer du bus USB à chaque reconnexion et empêcher tout nouveau téléversement. Récupération : appuyez sur le bouton reset puis lancez le téléversement dans la fenêtre de ~8 s du bootloader, ou maintenez le reset en branchant le câble. Le sketch précédent continue de tourner à la reconnexion car le bootloader est sauté à la mise sous tension.
- Déclencher le bootloader à la main : ouvrir le port à 1200 bauds (le « touch ») force le mode Caterina (PID 0x0036, contre 0x8036 en fonctionnement normal) ; l'IDE le fait automatiquement, un moniteur série classique non.
- Fuses modifiées : les valeurs d'origine sont low 0xFF, high 0xD8, extended 0xCB ; les effacer supprime Caterina — il faudra reprogrammer par ICSP.
- Séquence d'énumération ignorée : le port COM disparaît/reparaît au téléversement ; scripter une reconnexion est nécessaire en automatisation.
- Runaway HID : ne jamais inonder l'hôte de frappes sans condition ; gardez le CDC ouvert pour couper à distance.
Autres tutoriels pour cette carte
- 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)
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinoclavier-auto-tape.inoArduinosouris-cercle.inoArduinotelecommande-media.inoArduinobouton-clic-souris.inoArduino