Arduino som USB HID

Er det muligt at opbygge en HID-enhed (som et tastatur) ved hjælp af en Arduino uno?

På det tidspunkt Når jeg er, har jeg knapindgange på Arduino, der giver output på den serielle linje. Så hvordan kan jeg omdanne min nuværende firmware til noget, der kan opføre sig som et HID-tastatur?

  • Skal jeg skrive en ny enhedsdriver til et vindue?
  • Skal jeg oprette en software lag, der kunne tage mine serielle data og få windows til at læse dem som HID-input?
  • Er der nogen bedre måde at opnå dette på, hvis det overhovedet er muligt?

Kommentarer

  • Jeg kan tage fejl, men dette handler ikke rigtig om Arduino. Det handler om vindue ' s enhedsdriverudvikling.
  • Første svar på google: mitchtech.net/arduino -usb-hid-keyboard … men du specificerede ikke hvilken Arduino. På en Leonardo er den ' indbygget, og den relevante driver findes allerede (se arduino.cc/da/Reference/MouseKeyboard).
  • Jeg ' bruger en Uno, men jeg ' Jeg vil se på, hvad du har skrevet, fordi sidste gang vi overvejede DFU-opdateringen, men vi ' er lidt bange for murning af ting, da komponenterne ikke er ' t som let tilgængelige og billige i mit område som de fleste steder.
  • @AsheeshR Dette emne er på meta nu: meta.arduino.stackexchange.com/q/102/46
  • Nå, det ' er bestemt muligt, da Arduino Uno har en Atmega16u2 som USB-driverchip, kan brugeren bruge enten DFU eller ICSP blinkende til skub enheden på en firmware tæt på leonardo ', som får Arduino til at opføre sig som et HID-tastatur. Der er ' ingen Windows-udvikling involveret, ingen driver, der skal bygges som USB / HID-enheder, genkendes som standard. dvs. det spørgsmål skal åbnes igen.

Svar

Er det muligt at opbygge en HID-enhed (som et tastatur) ved hjælp af en Arduino uno?

ja det er det! Og der er en god vejledning i, hvordan man gør det over her

På Indtil videre har jeg knapindgange på Arduino, der giver output på den serielle linje. Så hvordan kan jeg omdanne min nuværende firmware til noget, der kan opføre sig som et HID-tastatur?

Som vejledningen viser dig, skal du omdanne din firmwarekode, så i stedet for at udskrive begivenhederne udløser du faktisk begivenheder. Hvad du skal gøre er at føje til din kode:

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); } 

Hvad du laver her, sendes fra dine vigtigste Arduino-mikrocontrollerhændelser over den serielle linje til den mindre mikrocontroller, der håndterer USB-kommunikation. Den mikrocontroller tager disse nøgle “buffere” og overfører dem, når USB HID-tastaturet trykkes over USB.

Pas på, at nøgletegnet (chr i koden her ), er faktisk en nøglekode, der sendes via USB, der fortolkes af din USB HID-driver, som derefter oversætter den til en ægte karakter ved hjælp af det aktuelle layout, du har konfigureret til dit tastatur.

mod tegn er en af de ændringstaster, du har på tastaturet (shift, kontrol, alt …), 0x00 er ingen modifikator.

  • Skal jeg skrive et nyt vindue enhedsdriver?

Nej, du behøver ikke! Med DFU-opgraderingen ses din arduino som et USB-tastatur af windows.

  • Skal jeg oprette et softwarelag, der kan tage min serie data og få windows til at læse det som HID-input?

Du behøver heller ikke gøre det, og det er faktisk en meget dårlig idé til mange grunde:

  • din løsning ville ikke være bærbar, og derfor skulle du hacke noget til enhver platform, du måtte bruge,
  • din løsning ville betyde en masse ny kode; jo mere kode man skriver, jo flere fejl vil der sandsynligvis være i dit system,
  • din løsning ville være virkelig hackish, da den ville opføre sig som en enhedsdriver (dvs. kernel land ) tager input fra et brugerprogram (dvs. brugerland ) og sandsynligvis ikke fungerer, vær helvede at debugge og udsat for sikkerhedsproblemer … Hvis det endda er muligt at gøre!

Jeg bruger en Uno, men jeg vil se på, hvad du skrev, for sidste gang vi overvejede DFU-opdateringen, men vi er lidt bange for murning af ting

Endelig har du bekymringer i en kommentar om murning af din arduino.Tro mig og forfatteren af artiklen , at du ikke kan mur din arduino ud med en firmwareblink:

BEMÆRK: Der er ingen chance for at murere enheden ved hjælp af denne metode. Arduino-bootloader-firmwaren kan altid opdateres ved hjælp af DFU-protokollen!

Hvis noget bliver virkelig dårligt forkert, og du får en bootloader-korruption i den lille AVR (atmega8u2), kan du stadig genskabe det ved hjælp af en anden arduino eller en atmel-programmerer ved hjælp af de 6 ben ved siden af USB-stikket.

I sidste ende skal du vide, at kun måde at mure en AVR på, og dermed også en Arduino , er at lege med sikringerne og nulstille programmeringssikringerne. Og selv da kan du bruge HVSP til at gemme din enhed, selvom det ofte er mindre besværligt at bare tage en ny chip.

Kommentarer

  • Tak for al den nyttige info, vi endte med at opnå dette.
  • Nå, den rigtige måde at mursten en AVR på er med overstrøm / Derefter ristes det …
  • Men så kaldes det ' ikke murning, men stegning eller som du siger ristning af det. Sæt 15ampe gennem MCUen, og jeg vedder på, at du ' ser det springe gennem rummet 😉
  • Hvordan frigøres en bestemt nøgle? Jeg vil efterligne en nøgle HOLD og slip derefter. Og også i linket går tegnet til array [2], mens her går til [1]. Hvorfor?
  • godt, som vist i mit eksempel, gør du det i to trin, først skal du trykke på tasten, så er der ' forsinkelsen, så frigiver du den. Nå, så skal du ' d forelæs dig selv om, hvordan hardware-tastaturet implementeres ntation fungerer, den ' er slags ikke naturlig, og hver værdi i arrayet har en betydning. Tilgiv mig for ikke at have et link til at dele pengeautomat, men når du finder noget, der søger på nettet, bedes du sende en ny kommentar ☺

Svar

Jeg oprettede et projekt, der fuldstændigt erstatter Arduino Bootloader. Du er i stand til at uploade skitser og bruge den som HID. Se Project HID på Github: https://github.com/NicoHood/HID

Kommentarer

  • Velkommen til Arduino SE! Kan du tilføje lidt om, hvordan du bruger dit bibliotek? Tak!
  • Læs readme og prøv eksemplerne? Det er alt der, ingen grund til at narre alt her. Alt på Github er opdateret 🙂
  • Undskyld fyr, det ligner et sejt bibliotek, men din dokumentation mangler skør. Der er ' ingen rigtige installationsinstruktioner, så vidt jeg kan fortælle, og hele emner i din wiki siger bare " TODO " (specifikt gamepad-emnet er helt tomt som dette). : – /
  • Faktisk er der behov for at præsentere en grundlæggende beskrivelse her: svar kræves for at være meningsfulde, selv uden det eksterne link, som kan dø. Og dette er det ikke.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *