Arduino come USB HID


25

È possibile creare un dispositivo HID (come una tastiera) utilizzando un Arduino Uno?

Al momento, ho gli ingressi dei pulsanti su Arduino che forniscono output sulla linea seriale. Quindi, come posso trasformare il mio attuale firmware in qualcosa che può comportarsi come una tastiera HID?

  • Devo scrivere un nuovo driver di dispositivo per Windows?
  • Devo creare un livello software che possa prendere i miei dati seriali e fare in modo che Windows lo legga come input HID?
  • Esiste un modo migliore per raggiungere questo obiettivo, se possibile?

1
Potrei sbagliarmi, ma questo non riguarda Arduino. Riguarda lo sviluppo del driver di dispositivo laterale di Windows.
asheeshr,

1
Prima risposta su Google: mitchtech.net/arduino-usb-hid- tastiera ... ma non hai specificato quale Arduino. Su un Leonardo è incorporato ed esiste già il driver appropriato (vedi arduino.cc/en/Reference/MouseKeyboard ).
FredP,

Sto usando uno, ma guarderò quello che hai pubblicato perché l'ultima volta che abbiamo considerato l'aggiornamento DFU ma abbiamo un po 'paura delle cose di bricking poiché i componenti non sono così facilmente disponibili ed economici nella mia zona come nella maggior parte posti.
Anomalia,

3
@AsheeshR Questo numero è su meta adesso: meta.arduino.stackexchange.com/q/102/46
Ricardo

1
Bene, questo è sicuramente possibile, poiché Arduino Uno presenta un chip driver USB Atmega16u2, l'utente può utilizzare il flashing DFU o ICSP per spingere sul dispositivo un firmware vicino a quello di leonardo che farà sì che Arduino si comporti come una tastiera HID. Non è necessario lo sviluppo di Windows, nessun driver da costruire poiché i dispositivi USB / HID sono riconosciuti per impostazione predefinita. cioè quella domanda dovrebbe essere riaperta.
zmo

Risposte:


14

È possibile creare un dispositivo HID (come una tastiera) utilizzando un Arduino Uno?

sì! E c'è un ottimo tutorial su come farlo qui

Al momento, ho gli ingressi dei pulsanti su Arduino che forniscono output sulla linea seriale. Quindi, come posso trasformare il mio attuale firmware in qualcosa che può comportarsi come una tastiera HID?

Come mostra il tutorial, è necessario trasformare il codice del firmware, quindi invece di stampare gli eventi, in realtà si attivano gli eventi. Quello che devi fare è aggiungere al tuo codice:

void triggerKey(uint8_t mod, uint8_t chr) {
    uint8_t buf[8] = {mod, chr, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
    // press key
    Serial.write(buf, 8);
    // emulate key press delay
    delay(10);
    buf[1] = 0x00;
    // release key
    Serial.write(buf, 8);
}

Quello che stai facendo qui, è inviare dai principali eventi del microcontrollore Arduino sulla linea seriale al microcontrollore più piccolo che gestisce la comunicazione USB. Quel microcontrollore prenderà quei "buffer" chiave e li trasferirà mentre il tasto della tastiera HID USB preme su USB.

Ricorda che il carattere chiave ( chrnel codice qui) è in realtà un codice chiave inviato tramite USB che viene interpretato dal tuo driver USB HID, che lo traduce in un personaggio reale usando il layout corrente che hai impostato per la tua tastiera.

Il modpersonaggio è uno dei tasti modificatori che hai sulla tastiera (shift, control, alt ...), 0x00non essendo un modificatore.

  • Devo scrivere un nuovo driver di dispositivo per Windows?

No, non è necessario! Con l'aggiornamento DFU, il tuo arduino sarà visto come una tastiera USB da Windows.

  • Devo creare un livello software che possa prendere i miei dati seriali e fare in modo che Windows lo legga come input HID?

Né è necessario farlo, ed è in realtà una pessima idea per molte ragioni:

  • la tua soluzione non sarebbe portatile e quindi dovrai hackerare qualcosa per ogni piattaforma che potresti utilizzare,
  • la tua soluzione implicherebbe molto nuovo codice; più codice si scrive, più è probabile che si verifichino bug nel sistema,
  • la tua soluzione sarebbe davvero hacker, in quanto si comporterebbe come un driver di dispositivo (ovvero kernel land ) che riceve input da un programma utente (ovvero user land ) e probabilmente non funzionerà, sarebbe un inferno da debug e soggetto a problemi di sicurezza. .. Se è persino possibile farlo!

Sto usando uno, ma guarderò cosa hai pubblicato perché l'ultima volta che abbiamo considerato l'aggiornamento DFU ma abbiamo un po 'paura delle cose di bricking

Infine, stai avendo delle preoccupazioni, in un commento, sul bricking del tuo arduino. Per favore, credi a me e all'autore dell'articolo che non puoi bloccare il tuo arduino facendo un flash del firmware:

NOTA: non è possibile "murare" il dispositivo con questo metodo. Il firmware del bootloader di Arduino può sempre essere aggiornato utilizzando il protocollo DFU!

Nel caso in cui qualcosa si verifichi davvero male e si verifichi una corruzione del bootloader nel piccolo AVR (atmega8u2), è ancora possibile eseguirne il riflash usando un altro arduino o un programmatore atmel usando i 6 pin accanto alla presa USB.

Alla fine, sappi che l' unico modo per collegare un AVR, quindi anche un Arduino, è giocare con i fusibili e ripristinare i fusibili di programmazione. E anche allora, puoi usare HVSP per salvare il tuo dispositivo, anche se spesso è meno problematico prendere un nuovo chip.


1
Grazie per tutte le informazioni utili, abbiamo finito per raggiungere questo obiettivo.
Anomalia,

Bene, il modo corretto di collegare un AVR è con sovracorrente / sovratensione. Quindi verrà tostato ...
user2973

Ma poi, non si chiama bricking, ma friggendolo, o come dici di tostarlo. Metti 15 amps attraverso l'MCU e scommetto che lo vedrai saltare attraverso la stanza ;-)
zmo

Come rilasciare una chiave specifica? Voglio emulare un tasto HOLD quindi rilasciarlo. E anche nel collegamento, il personaggio va in array [2] mentre qui va in [1]. Perché?
5

bene, come mostrato nel mio esempio, lo fai in due passaggi, prima premi il tasto, poi c'è il ritardo, poi lo rilasci. Bene, allora dovresti insegnarti come funziona l'implementazione della tastiera hardware, è un po 'non naturale e ogni valore dell'array ha un significato. Scusami per non avere un link per condividere atm, ma ogni volta che trovi qualcosa che cerca nel web, per favore pubblica un nuovo commento ☺
zmo

6

Ho creato un progetto che sostituisce completamente Arduino Bootloader. Puoi caricare schizzi e usarlo come HID. Vedi Project HID su Github: https://github.com/NicoHood/HID


4
Benvenuti in Arduino SE! Puoi aggiungere qualcosa su come usare la tua libreria? Grazie!
Pinguino anonimo il

2
Leggi il readme e prova gli esempi? È tutto lì, non c'è bisogno di ingannare tutto qui. Tutto su Github è aggiornato :)

Mi dispiace amico, sembra una bella biblioteca, ma la tua documentazione è pazzesca. Non ci sono vere istruzioni di installazione per quanto posso dire, e interi argomenti nella tua wiki dicono semplicemente "TODO" (in particolare l'argomento del gamepad è completamente vuoto come questo). : - /
BrainSlugs83

1
In realtà è necessario presentare una descrizione di base qui: le risposte devono essere significative anche senza il collegamento esterno, che potrebbe morire. E questo non lo è.
Chris Stratton,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.