🛠 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

Objectifs

Utiliser la Mega ADK comme un vrai hôte USB autonome, sans Android : la page officielle de la carte vante l'interfaçage « with keyboard, mouse and games controllers as Wiimote and PS3 », et des utilisateurs 2024 lisent des lecteurs de code-barres USB par le port intégré. Un clavier HID se branche directement sur le port USB-A ; la bibliothèque maintenue USB Host Shield 2.0 fournit les classes HID. C'est la seconde vie de la carte : un contrôleur AVR avec port USB host intégré, la seule de sa génération.

Matériel

Code complet

// 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);
      }
    }
  }
}

Vérification attendue

Après branchement du clavier sur le port USB-A, la bibliothèque énumère le périphérique (led NumLock du clavier souvent allumée par la réinitialisation HID) ; chaque frappe imprime les codes de touche sur la console série. Avec un lecteur de code-barres en émulation clavier, chaque scan produit la séquence de touches correspondant au code-barres suivi d'Entrée. Aucun téléphone n'est impliqué : la carte se suffit à elle-même.

Erreurs fréquentes

  1. Clavier sans fil à dongle propriétaire ou appareil « Bluetooth class » : non reconnu comme HID standard — le port host attend un HID filaire (ou un dongle se déclarant HID).
  2. Oublier Usb.Task dans loop : sans lui, aucun rapport HID n'est jamais reçu.
  3. Négliger le courant du périphérique : clavier rétroéclairé + téléphone sur la même carte en alimentation USB = plafond 500 mA dépassé, polyfuse qui saute.
  4. Compiler avec la mauvaise variante de carte : les broches MAX3421E de l'ADK diffèrent du shield standard (SS PB4 sur shield, autre chose sur ADK) — sélectionner BOARD_MEGA_ADK ou le menu adéquat.
  5. Attendre du texte ASCII : le rapport HID fournit des codes touche (usage table HID), pas des caractères — la traduction AZERTY/QWERTY est à votre charge.
  6. Mélanger avec d'autres périphériques SPI sur le bus : le MAX3421E y siège en permanence ; tout autre maître SPI doit le désélectionner proprement pendant ses transferts.

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels