Arduino come USB HID

È possibile costruire un dispositivo HID (come una tastiera) utilizzando un Arduino uno?

Al momento essendo, ho ingressi di pulsanti su Arduino che danno uscite sulla linea seriale. Quindi, come posso trasformare il mio firmware attuale in qualcosa che possa comportarsi come una tastiera HID?

  • Devo scrivere un nuovo driver di dispositivo per finestre?
  • Devo creare un software livello che potrebbe prendere i miei dati seriali e fare in modo che Windows li legga come input HID?
  • Esiste un modo migliore per ottenere questo risultato, se possibile?

Commenti

  • Potrei sbagliarmi, ma non si tratta di Arduino. Si tratta dello sviluppo del driver di dispositivo laterale di Window '.
  • Prima risposta su Google: mitchtech.net/arduino -usb-hid-keyboard … ma non hai specificato quale Arduino. Su un Leonardo è ' integrato e il driver appropriato esiste già (vedi arduino.cc/en/Reference/MouseKeyboard).
  • ' utilizzo Uno, ma ' guarderò cosa hai pubblicato perché lultima volta abbiamo considerato laggiornamento DFU, ma ' abbiamo un po paura del bricking perché i componenti non sono ' così prontamente disponibili ed economici in la mia area come nella maggior parte dei posti.
  • @AsheeshR Questo problema è su meta ora: meta.arduino.stackexchange.com/q/102/46
  • Bene, questo ' è sicuramente possibile, poiché Arduino Uno dispone di un Atmega16u2 come chip driver USB, lutente può utilizzare DFU o ICSP lampeggiante per spingere sul dispositivo un firmware vicino al leonardo ' che farà comportare lArduino come una tastiera HID. ' non è coinvolto alcuno sviluppo di Windows, nessun driver da creare poiché i dispositivi USB / HID vengono riconosciuti per impostazione predefinita. vale a dire che la domanda dovrebbe essere riaperta.

Risposta

È possibile costruire un dispositivo HID (come una tastiera) usando un Arduino uno?

sì, lo è! E cè “un ottimo tutorial su come farlo su qui

Al al momento, ho input di pulsanti su Arduino che danno output sulla linea seriale. Quindi, come posso trasformare il mio firmware attuale in qualcosa che possa comportarsi come una tastiera HID?

Come ti mostra il tutorial, devi trasformare il codice del firmware in modo che invece di stampare gli eventi, in realtà attivi 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 dagli eventi del tuo microcontrollore Arduino principale attraverso la linea seriale al microcontrollore più piccolo che gestisce la comunicazione USB. Quel microcontrollore prenderà quei “buffer” dei tasti e li trasferirà quando il tasto della tastiera HID USB viene premuto tramite USB.

Fai attenzione che il carattere chiave (chr nel codice qui ), è in realtà un codice chiave inviato tramite USB che viene interpretato dal tuo driver USB HID, che poi lo traduce in un carattere reale utilizzando il layout corrente che hai impostato per la tua tastiera.

Il mod è uno dei tasti di modifica che hai sulla tastiera (MAIUSC, CTRL, ALT …), 0x00 non è un modificatore.

  • Devo scrivere un nuovo driver di dispositivo per finestre?

No, non ti serve! Con laggiornamento DFU, il tuo arduino sarà visto come una tastiera USB da Windows.

  • Devo creare un livello software che possa prendere il mio seriale dati e Windows lo leggono come input HID?

Non è necessario che tu lo faccia, e in realtà è una pessima idea per molte ragioni:

  • la tua soluzione non sarebbe portabile, e quindi avresti bisogno di hackerare qualcosa per ogni piattaforma che potresti usare,
  • la tua soluzione implicherebbe molte nuovo codice; più codice si scrive, più è probabile che ci siano bug nel sistema,
  • la soluzione sarebbe davvero hacker, poiché si comporterebbe come un driver di dispositivo (cioè kernel land ) prendendo input da un programma utente (cioè user land ) e probabilmente non funzionerà, sarà un inferno per il debug e incline a problemi di sicurezza … Se è possibile farlo!

Sto usando uno, ma guarderò cosa hai pubblicato perché lultima volta abbiamo considerato laggiornamento DFU ma ci siamo un po spaventato dal bricking

Infine, in un commento, hai dei dubbi sul bricking del tuo arduino.Per favore credimi e allautore dell articolo che tu non puoi brickare il tuo arduino eseguendo un flash del firmware:

NOTA: non cè alcuna possibilità di “brickare” il dispositivo usando questo metodo. Il firmware del bootloader di Arduino può sempre essere aggiornato utilizzando il protocollo DFU!

Nel caso in cui qualcosa vada davvero storto e si ottiene un danneggiamento del bootloader nel piccolo AVR (atmega8u2), è comunque possibile eseguire il reflash utilizzando un altro arduino o un programmatore atmel utilizzando i 6 pin accanto alla presa USB.

Alla fine, sappi che il solo modo per brickare un AVR, quindi anche un Arduino , è giocare con i fusibili e ripristinare i fusibili di programmazione. E anche in questo caso, puoi utilizzare HVSP per salvare il tuo dispositivo, anche se spesso è meno difficile prendere un nuovo chip.

Commenti

  • Grazie per tutte le informazioni utili, abbiamo finito per raggiungere questo obiettivo.
  • Bene, il modo corretto per brickare un AVR è con over current / sovratensione. Poi verrà tostato …
  • Ma poi ' non si chiama bricking, ma frittura o, come dici tu, tostatura. Metti 15 ampere attraverso lMCU e scommetto che ' lo vedrai saltare attraverso la stanza 😉
  • Come rilasciare un tasto specifico? Voglio emulare un tasto TIENI premuto quindi rilascia. E anche nel link, il carattere va allarray [2] mentre qui va a [1]. Perché?
  • bene, come mostrato nel mio esempio, lo fai in due passaggi, prima premi il tasto, poi ' è il ritardo, poi lo rilasci. Bene, allora ' devi insegnare a te stesso come implementare la tastiera hardware Lazione funziona, ' non è naturale e ogni valore dellarray ha un significato. Scusatemi se non ho un link per condividere atm, ma ogni volta che trovi qualcosa che cerca sul web, pubblica un nuovo commento ☺

Risposta

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

Commenti

  • Benvenuto in Arduino SE! Puoi aggiungere qualcosa su come usare la tua libreria? Grazie!
  • Leggere il file readme e provare gli esempi? È tutto lì, non cè bisogno di ingannare tutto qui. Tutto su Github è aggiornato 🙂
  • Mi dispiace amico, sembra una bella libreria, ma la tua documentazione è assurda. ' non ci sono vere istruzioni di installazione per quanto ne so, e interi argomenti nel tuo wiki dicono semplicemente " TODO " (in particolare largomento del gamepad è completamente vuoto in questo modo). : – /
  • In realtà è necessario presentare qui una descrizione di base: le risposte devono essere significative anche senza il collegamento esterno, che potrebbe morire. E questo non lo è.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *