🛠 Clavier USB HID via l'USB-OTG natif (TinyUSB)

ESP32-S3 · avance · Schéma : IMG-esp32-s3-avance-1-esp32-s3-usb-otg-hid-clavier.svg — ESP32-S3 connecté par GPIO19/GPIO20 (USB-OTG) à un ordinateur et se faisant reconnaître comme clavier USB, avec un bouton physique sur GPIO1 déclenchant une frappe.

Objectifs

Transformer l'ESP32-S3 en périphérique USB HID (clavier) grâce à son contrôleur USB-OTG natif sur GPIO19 (D-) et GPIO20 (D+), via la pile TinyUSB intégrée au core Arduino. C'est l'un des grands écarts avec l'ESP32 classique : aucune puce additionnelle n'est nécessaire. Vous découvrirez aussi la contrainte majeure du double USB du S3 : le mode « TinyUSB (OTG) » et le mode « Hardware CDC and JTAG » se disputent les mêmes broches ; on ne peut pas tout faire en même temps sans un second connecteur physique.

Matériel

Code complet

// Clavier HID sur USB-OTG natif (GPIO19/20) via TinyUSB
// Outils Arduino : USB Mode = "TinyUSB Device" (ou "OTG"), USB CDC = Disabled
#include "Arduino.h"
#include "USB.h"
#include "USBHIDKeyboard.h"

USBHIDKeyboard Keyboard;
const uint8_t BTN = 1;
uint8_t etatPrecedent = HIGH;
unsigned long dernierBord = 0;

void setup {
  pinMode(BTN, INPUT_PULLUP);
  Keyboard.begin;
  if (!USB.begin) {
    // pas de hot-plug possible ici : le host verra le HID au prochain branchement
  }
}

void loop {
  uint8_t état = digitalRead(BTN);
  if (état == LOW && etatPrecedent == HIGH && millis - dernierBord > 120) {
    dernierBord = millis;
    Keyboard.begin;                 // s'assure que le HID est pret
    Keyboard.print("ESP32-S3 dit bonjour ");
    Keyboard.write(KEY_RETURN);
    Keyboard.end;
  }
  etatPrecedent = état;
  delay(10);
}

Vérification attendue

Après téléversement et rebranchement du câble, l'ordinateur détecte un nouveau périphérique « USB Keyboard » (hidusb) sans pilote. Un appui sur le bouton saisit la ligne « ESP32-S3 dit bonjour » suivie d'Entrée dans n'importe quel champ de texte actif. L'énumération USB passe par les broches GPIO19/20, les seules reliées au contrôleur OTG du S3.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels