🛠 Utiliser la Due en hôte USB : lire un clavier sur le port Native
Objetivos
El puerto Native de la Due es controlado directamente por el SAM3X y es OTG: la placa puede convertirse en ANFITRIÓN USB — el tutorial oficial «Keyboard Controller» lo explota con la biblioteca USBHost. Vas a conectar un teclado USB estándar, interceptar las teclas y retranscribirlas por el puerto serie. Es la base para transformar la Due en un panel de control, un lector de dispositivos HID o un registrador de pulsaciones.
Material
- 1 Arduino Due
- 1 teclado USB (HID estándar, sin hub activo exótico)
- 1 adaptador USB-A hembra → micro-USB macho (cable «OTG») para conectar el teclado al puerto Native; un hub USB alimentado suele ser más práctico porque aporta los 5 V que el teclado necesita
- El puerto Programming queda libre para el monitor serie (o usar SerialUSB si el anfitrión está en otro lugar)
- Biblioteca: USBHost (Arduino), a instalar mediante el gestor de librerías
Código completo
// Hote USB : clavier HID -> moniteur serie (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 etat 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(" etat: ");
Serial.println(k.state == KEY_PRESSED ? "appuyee" : "relachee");
}
}
}
}
Verificación esperada
Conectar el teclado al puerto Native (mediante el adaptador/hub alimentado): el monitor del puerto Programming muestra cada tecla pulsada/suelta. Desconectar/reconectar el teclado se puede hacer en caliente, la máquina de estados Task gestiona la enumeración y la desconexión. La carga del programa sigue funcionando por el puerto Programming mientras el Native actúa como anfitrión.
Errores frecuentes
- Conectar el teclado al puerto Programming: este puerto es un dispositivo serie (puente 16U2), NO puede ser anfitrión; solo el puerto Native (OTG) lo es.
- Teclado que consume mucho sin hub alimentado: los 5 V disponibles mediante un simple adaptador pasivo son limitados; los teclados retroiluminados se niegan a enumerarse — de ahí la necesidad del hub alimentado.
- Confundir
SerialySerialUSBen este montaje: el Native está ocupado actuando como anfitrión, la depuración debe pasar porSerial(puerto Programming). - Olvidar
Keyboard.Tasken loop: sin esta llamada regular, ninguna enumeración USB avanza y el teclado permanece «no conectado». - Usar un teclado multimedia/HID propietario: la librería gestiona el teclado HID estándar; las teclas especiales pueden no responder.
- Esperar que el programa funcione sin un anfitrión USB alimentado: en configuración autónoma, prever los 5 V en el lado del hub, si no, el teclado no se enciende.
- Prestar atención a la ergonomía del conector micro-USB: los adaptadores USB-A hembra de baja calidad hacen falso contacto — probar con un teclado conocido.
- Reiniciar la placa rompe la enumeración en curso: reconectar el teclado después de un reset es normal.
Otros tutoriales para esta placa
- 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)
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinodac-onde.inoArduinoadc-12-bits.inoArduinopwm-12-bits.inoArduinogps-serial1.inoArduino