🛠 HID host : clavier, souris et scanner sur le port USB-A

Arduino Mega ADK (Rev3) · avance · Schéma : IMG-mega-adk-avance-2-mega-adk-hid-host.svg — Clavier USB et lecteur de code-barres branchés sur le port USB-A host de la Mega ADK, sortie sur la console série

Objetivos

Utilizar la Mega ADK como un verdadero host USB autónomo, sin Android: la página oficial de la placa destaca la interfaz « with keyboard, mouse and games controllers as Wiimote and PS3 », y usuarios de 2024 leen lectores de códigos de barras USB a través del puerto integrado. Un teclado HID se conecta directamente al puerto USB-A; la biblioteca mantenida USB Host Shield 2.0 proporciona las clases HID. Esta es la segunda vida de la placa: un controlador AVR con puerto USB host integrado, la única de su generación.

Material

Código completo

// mega-adk-hid-clavier.ino — Board: "Arduino Mega ADK"
// D'après l'exemple HIDKeyboard de USB Host Shield 2.0 (API à confirmer
// avec la version installée).
#include <Usb.h>
#include <hid.h>
#include <hidkeyboard.h>

USB Usb;
USBHID HID;
HIDKeyboard Keyboard(&HID);

void setup {
  Serial.begin(115200);
  if (Usb.Init == -1) { Serial.println(F("OSCOKIRQ failed to assert")); while (1); }
  if (HID.Init != 0)  { Serial.println(F("Init HID impossible"));        while (1); }
  if (Keyboard.Init(&HID) != 0) { Serial.println(F("Clavier non reconnu")); }
  Serial.println(F("Branchez/frappez sur le clavier USB-A..."));
}

void loop {
  Usb.Task;
  if (!Keyboard.isOK) return;

  uint8_t touche[6];
  // lit le rapport de touche HID (6 touches simultanées max)
  if (Keyboard.getReport == 0 && Keyboard.NakPoll) {
    Keyboard.getKeyReport(touche);
    for (int i = 0; i < 6; i++) {
      if (touche[i]) {
        Serial.print(F("code HID 0x"));
        Serial.println(touche[i], HEX);
      }
    }
  }
}

Verificación esperada

Después de conectar el teclado al puerto USB-A, la biblioteca enumera el dispositivo (el LED NumLock del teclado suele encenderse por la reinicialización HID); cada pulsación imprime los códigos de tecla en la consola serie. Con un lector de códigos de barras en emulación de teclado, cada escaneo produce la secuencia de teclas correspondiente al código de barras seguido de Intro. No interviene ningún teléfono: la placa funciona por sí sola.

Errores frecuentes

  1. Teclado inalámbrico con dongle propietario o dispositivo « Bluetooth class »: no reconocido como HID estándar — el puerto host espera un HID cableado (o un dongle que se declare como HID).
  2. Olvidar Usb.Task en loop: sin él, nunca se recibe ningún informe HID.
  3. Descuidar la corriente del dispositivo: teclado retroiluminado + teléfono en la misma placa alimentada por USB = se supera el límite de 500 mA, el polyfuse se dispara.
  4. Compilar con la variante de placa incorrecta: los pines MAX3421E de la ADK difieren del shield estándar (SS PB4 en shield, otra cosa en ADK) — seleccionar BOARD_MEGA_ADK o el menú adecuado.
  5. Esperar texto ASCII: el informe HID proporciona códigos de tecla (tabla de uso HID), no caracteres — la traducción AZERTY/QWERTY corre a su cargo.
  6. Mezclar con otros dispositivos SPI en el bus: el MAX3421E reside permanentemente en él; cualquier otro maestro SPI debe deseleccionarlo correctamente durante sus transferencias.

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales