Är det möjligt att bygga en HID-enhet (som ett tangentbord) med en Arduino-uno?
Vid den tiden eftersom jag har knappingångar på Arduino som ger utgångar på serien. Så, hur kan jag förvandla min nuvarande firmware till något som kan fungera som ett HID-tangentbord?
- Ska jag skriva ett nytt fönster enhetsdrivrutin?
- Ska jag skapa en programvara lager som kan ta mina seriella data och få windows att läsa den som HID-ingång?
- Finns det något bättre sätt att uppnå detta om det alls är möjligt?
Kommentarer
- Jag kan ha fel, men det här handlar inte egentligen om Arduino. Det handlar om fönster ' s utveckling av enhetsdrivrutiner.
- Första svaret på google: mitchtech.net/arduino -usb-hid-keyboard … men du angav inte vilken Arduino. På en Leonardo är den ' inbyggd, och rätt drivrutin finns redan (se arduino.cc/en/Reference/MouseKeyboard).
- Jag ' Jag använder en Uno, men jag ' Jag tittar på vad du skrev för att förra gången vi ansåg DFU-uppdateringen men vi ' är ganska rädda för murning eftersom komponenterna inte är ' t som lättillgängliga och billiga i mitt område som på de flesta platser.
- @AsheeshR Det här problemet är på meta nu: meta.arduino.stackexchange.com/q/102/46
- Tja, att ' är definitivt möjligt, eftersom Arduino Uno har ett Atmega16u2 som USB-drivrutinschip, kan användaren använda antingen DFU eller ICSP blinkande för att tryck på enheten en firmware nära leonardo ' som gör att Arduino beter sig som ett HID-tangentbord. Det finns ' ingen Windows-utveckling, ingen drivrutin som ska byggas som USB / HID-enheter känns igen som standard. den frågan ska öppnas igen.
Svar
Är det möjligt att bygga en HID-enhet (som ett tangentbord) med en Arduino uno?
ja det är det! Och det finns en bra handledning om hur man gör det över här
På för tillfället har jag knappingångar på Arduino som ger utgångar på serieraden. Så hur kan jag förvandla min nuvarande firmware till något som kan fungera som ett HID-tangentbord?
Som självstudien visar, måste du förvandla din firmwarekod så istället för att skriva ut händelserna, så utlöser du faktiskt händelser. Vad du behöver göra är att lägga till din kod:
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); }
Vad du gör här skickar du från dina huvudsakliga Arduino-mikrokontrollerhändelser över serielinjen till den mindre mikrokontrollern som hanterar USB-kommunikation. Den mikrokontrollern kommer att ta dessa nyckel ”buffertar” och överföra dem när USB HID-tangentbordet trycker på USB.
Se upp att nyckeltecknet (chr
i koden här ), är faktiskt en nyckelkod som skickas över USB som tolkas av din USB HID-drivrutin, som sedan översätter den till en riktig karaktär med den aktuella layouten du har konfigurerat för ditt tangentbord.
mod
karaktär är en av de modifierande tangenterna du har på tangentbordet (shift, control, alt …), 0x00
är ingen modifierare.
- Ska jag skriva en ny enhetsdrivrutin för fönster?
Nej, du behöver inte! Med DFU-uppgraderingen kommer din arduino att ses som ett USB-tangentbord av windows.
- Skal jag skapa ett programvarulager som kan ta min serie data och har windows läst det som HID-ingång?
Du behöver inte göra det, och det är faktiskt en mycket dålig idé för många anledningar:
- din lösning skulle inte vara bärbar, och därför skulle du behöva hacka något för varje plattform du kan använda,
- din lösning skulle innebära en hel del ny kod; ju mer kod man skriver desto fler buggar finns det sannolikt i ditt system,
- din lösning skulle vara riktigt hackig, eftersom den skulle fungera som en enhetsdrivrutin (dvs. kärnland ) tar inmatning från ett användarprogram (dvs. användarland ) och kommer sannolikt inte att fungera, var ett helvete att felsöka och utsatt för säkerhetsproblem … Om det ens är möjligt!
Jag använder en Uno, men jag kommer att titta på vad du skrev för förra gången vi övervägde DFU-uppdateringen men vi är ganska rädd för tegelstenar
Äntligen har du frågor i en kommentar om att tegla din arduino.Tro mig och författaren till artikel att du inte kan brick din arduino med en firmware-blixt:
OBS! Det finns ingen chans att ”bricka” enheten med den här metoden. Arduino bootloader-firmware kan alltid uppdateras med DFU-protokollet!
Om något blir riktigt fel och du får en bootloader-korruption i den lilla AVR (atmega8u2), kan du fortfarande återflöda den med en annan arduino eller en atmel-programmerare med de 6 stiften bredvid USB-kontakten.
I slutändan, vet att bara sätt att tegla en AVR, alltså en Arduino också , är att leka med säkringarna och återställa programmeringssäkringarna. Och även då kan du använda HVSP för att spara din enhet, men det är ofta mindre problem att bara ta ett nytt chip.
Kommentarer
- Tack för all användbar information, vi slutade med att uppnå detta.
- Tja, det rätta sättet att tegla en AVR är med överström / överspänning. Då rostas det …
- Men då ' kallas det inte för murning utan för stekning eller som du säger för att rosta det. Sätt 15ampar genom MCU, och jag slår vad om att du ' ser att den hoppar genom rummet 😉
- Hur man släpper en specifik nyckel? Jag vill efterlikna en nyckel HOLD släpp sedan. Och även i länken går tecknet till array [2] medan här går till [1]. Varför?
- ja, som visas i mitt exempel gör du det i två steg, först trycker du på tangenten och sedan ' är förseningen, sedan släpper du den. Tja, då behöver du ' föreläsa dig själv om hur hårdvarutangentbordet implementeras ntation fungerar, det ' är typ av inte naturligt, och varje värde i matrisen har en mening. Ursäkta mig för att jag inte har en länk för att dela minibank, men när du hittar något som söker på nätet, vänligen lägg upp en ny kommentar ☺
Svar
Jag skapade ett projekt som helt ersätter Arduino Bootloader. Du kan ladda upp skisser och använda den som HID. Se Project HID på Github: https://github.com/NicoHood/HID
Kommentarer
- Välkommen till Arduino SE! Kan du lägga till lite om hur du använder ditt bibliotek? Tack!
- Läs readme och prova exemplen? Det är allt där, ingen anledning att lura allt här. Allt på Github är uppdaterat 🙂
- Tyvärr kille, det ser ut som ett coolt bibliotek, men din dokumentation saknas galet. Det finns ' inga riktiga installationsinstruktioner så vitt jag kan säga, och hela ämnen i din wiki säger bara " TODO " (specifikt är gamepad-ämnet helt tomt så här). : – /
- Egentligen finns det ett behov av att presentera en grundläggande beskrivning här: svar krävs för att vara meningsfulla även utan den externa länken, som kan dö. Och den här är inte.