È 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 ( chr
nel 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 mod
personaggio è uno dei tasti modificatori che hai sulla tastiera (shift, control, alt ...), 0x00
non 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.