🛠 Utiliser la Due en hôte USB : lire un clavier sur le port Native
Objectifs
Le port Native de la Due est piloté directement par le SAM3X et il est OTG : la carte peut devenir HÔTE USB — le tutoriel officiel « Keyboard Controller » l'exploite avec la bibliothèque USBHost. Vous allez brancher un clavier USB standard, intercepter les touches et les retranscrire sur le port série. C'est la base pour transformer la Due en panneau de contrôle, lecteur de périphériques HID ou enregistreur de frappe.
Matériel
- 1 Arduino Due
- 1 clavier USB (HID standard, sans hub actif exotique)
- 1 adaptateur USB-A femelle → micro-USB mâle (câble « OTG ») pour relier le clavier au port Native ; un hub USB alimenté est souvent plus pratique car il apporte le 5 V dont le clavier a besoin
- Le port Programming reste libre pour le moniteur série (ou utiliser SerialUSB si l'hôte est ailleurs)
- Bibliothèque : USBHost (Arduino), à installer via le gestionnaire de libraries
Code complet
// Hote USB : clavier HID -> moniteur série (inspiré du tuto officiel
// docs.arduino.cc/tutorials/due/keyboard-controller)
#include <Keyboard.h>
USBKeyboard Keyboard;
uint8_t addr = 0;
void setup {
Serial.begin(9600); // via le port Programming (16U2)
while (!Serial) { }
Keyboard.begin; // la Due devient hote USB sur le port Native
}
void loop {
Keyboard.Task; // machine a état de l'hote USB
if (Keyboard.getConnected(addr)) {
while (Keyboard.keyAvailable) {
Keyboard.key_t k;
if (Keyboard.getKey(k)) {
Serial.print("touche: ");
Serial.print(k.key);
Serial.print(" état: ");
Serial.println(k.state == KEY_PRESSED ? "appuyee" : "relachee");
}
}
}
}
Vérification attendue
Brancher le clavier sur le port Native (via l'adaptateur/le hub alimenté) : le moniteur du port Programming affiche chaque touche appuyée/relâchée. Débrancher/rebrancher le clavier se fait à chaud, la machine à état Task gère énumération et déconnexion. Le téléversement continue de fonctionner par le port Programming pendant que le Native joue l'hôte.
Erreurs fréquentes
- Brancher le clavier sur le port Programming : ce port est un périphérie série (pont 16U2), il ne peut PAS être hôte ; seul le port Native (OTG) l'est.
- Clavier gourmand sans hub alimenté : le 5 V disponible via un simple adaptateur passif est limité ; les claviers rétroéclairés/refusent de s'énumérer — d'où le hub alimenté.
- Confondre
SerialetSerialUSBdans ce montage : le Native est occupé à être hôte, le debug doit passer parSerial(port Programming). - Oublier
Keyboard.Taskdans loop : sans cet appel régulier, aucune énumération USB n'avance et le clavier reste « non connecté ». - Utiliser un clavier multimédia/HID propriétaire : la lib gère le HID clavier standard ; les touches spéciales peuvent être muettes.
- S'attendre à ce que le programme tourne sans hôte USB alimenté : en configuration autonome, prévoir le 5 V du côté du hub, sinon le clavier ne s'allume pas.
- Attention à l'ergonomie du connecteur micro-USB : les adaptateurs USB-A femelle bas de gamme font faux contact — tester avec un clavier connu.
- Réinitialiser la carte casse l'énumération en cours : rebrancher le clavier après un reset est normal.
Autres tutoriels pour cette carte
- Faire clignoter la LED de l'Arduino Due et apprivoiser ses deux ports USB
- Lire un potentiomètre avec le vrai ADC 12 bits de la Due
- Allumer une LED externe en respectant les broches 3,3 V et 9 mA de la Due
- Générer une vraie tension analogique avec les DAC 12 bits (broches 66 et 67)
- Dialoguer avec un GPS (ou tout module TTL) sur Serial1 sans bloquer la boucle
- Scanner les deux bus I2C de la Due (Wire sur 20/21, Wire1 sur 70/71)
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinodac-onde.inoArduinoadc-12-bits.inoArduinopwm-12-bits.inoArduinogps-serial1.inoArduino