Arduino som USB HID (Norsk)

Er det mulig å bygge en HID-enhet (som et tastatur) ved hjelp av en Arduino uno?

På den tiden å være, jeg har knappinnganger på Arduino som gir utganger på seriellinjen. Så hvordan kan jeg transformere den nåværende firmwareen min til noe som kan oppføre seg som et HID-tastatur?

  • Skal jeg skrive en ny enhetsdriver for vindu?
  • Skal jeg lage en programvare lag som kan ta seriedataene mine og få windows til å lese dem som HID-inngang?
  • Er det noen bedre måte å oppnå dette hvis det i det hele tatt er mulig?

Kommentarer

  • Jeg kan ta feil, men dette handler egentlig ikke om Arduino. Det handler om vindu ' s utvikling av enhetsdriver på siden.
  • Første svaret på google: mitchtech.net/arduino -usb-hid-keyboard … men du spesifiserte ikke hvilken Arduino. På en Leonardo er den ' innebygd, og riktig driver eksisterer allerede (se arduino.cc/en/Reference/MouseKeyboard).
  • Jeg ' bruker en Uno, men jeg ' Jeg vil se på hva du postet fordi sist gang vi vurderte DFU-oppdateringen, men vi ' er ganske redde for muring, da komponentene ikke er ' t som lett tilgjengelig og billig i mitt område som de fleste steder.
  • @AsheeshR Dette problemet er på meta nå: meta.arduino.stackexchange.com/q/102/46
  • Vel, det ' er definitivt mulig, ettersom Arduino Uno har en Atmega16u2 som USB-driverbrikke, kan brukeren bruke enten DFU eller ICSP blinkende til skyv på enheten en firmware nær leonardo ' som vil få Arduino til å oppføre seg som et HID-tastatur. Det er ' ingen Windows-utvikling involvert, ingen driver som skal bygges som USB / HID-enheter gjenkjennes som standard. dvs. at spørsmålet bør åpnes på nytt.

Svar

Er det mulig å bygge en HID-enhet (som et tastatur) ved hjelp av en Arduino uno?

ja det er det! Og det er en flott opplæring om hvordan du gjør det over her

På foreløpig har jeg knappinnganger på Arduino som gir utganger på seriellinjen. Så, hvordan kan jeg forvandle den nåværende firmwareen min til noe som kan oppføre seg som et HID-tastatur?

Som veiledningen viser deg, må du transformere firmwarekoden din, så i stedet for å skrive ut hendelsene, utløser du faktisk hendelser. Det du trenger å gjøre, er å legge til koden din:

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

Det du gjør her, sendes fra de viktigste Arduino-mikrokontrollerhendelsene over serielinjen til den mindre mikrokontrolleren som håndterer USB-kommunikasjon. Den mikrokontrolleren vil ta disse nøkkelbufferne og overføre dem når USB HID-tastaturtrykk trykkes over USB.

Vær oppmerksom på at nøkkeltegnet (chr i koden her ), er faktisk en nøkkelkode sendt over USB som blir tolket av USB HID-driveren din, som deretter oversetter den til en ekte karakter ved hjelp av gjeldende layout du har konfigurert for tastaturet.

mod -tegnet er en av modifikasjonstastene du har på tastaturet (shift, control, alt …), 0x00 er ingen modifikator.

  • Skal jeg skrive en ny enhetsdriver for vindu?

Nei, du trenger ikke! Med DFU-oppgraderingen blir din arduino sett på som et USB-tastatur av windows.

  • Skal jeg lage et programvarelag som kan ta serien min data og har windows lese det som HID-inngang?

Du trenger ikke gjøre det, og det er faktisk en veldig dårlig idé for mange grunner:

  • løsningen din ville ikke være bærbar, og dermed ville du trenge å hacke noe for hver plattform du måtte bruke,
  • løsningen din ville innebære mye ny kode; jo mer kode man skriver, jo flere feil vil det sannsynligvis være i systemet ditt,
  • løsningen din ville være veldig hackish, da den ville oppføre seg som en enhetsdriver (dvs. kernel land ) å ta innspill fra et brukerprogram (dvs. brukerland ) og sannsynligvis ikke vil fungere, vær et helvete å feilsøke, og utsatt for sikkerhetsproblemer … Hvis det til og med er mulig å gjøre!

Jeg bruker en Uno, men jeg vil se på hva du la ut fordi sist vi vurderte DFU-oppdateringen, men vi ganske redd for muring ting

Endelig har du bekymringer om å mure din arduino i en kommentar.Tro meg og forfatteren av artikkelen at du ikke kan murstein din arduino ved å gjøre en firmwareblink:

MERK: Det er ingen sjanse for å «murere» enheten ved hjelp av denne metoden. Arduino bootloader-firmware kan alltid oppdateres ved hjelp av DFU-protokollen!

Hvis noe blir veldig galt, og du får en bootloader-korrupsjon i den lille AVR (atmega8u2), kan du fremdeles reflektere den ved hjelp av en annen arduino eller en atmel-programmerer ved hjelp av de 6 pinnene ved siden av USB-pluggen.

Til slutt, vet at bare måten å murstein en AVR, og dermed også en Arduino , er å leke med sikringene og tilbakestille programmeringssikringene. Og selv da kan du bruke HVSP for å lagre enheten, selv om det ofte er mindre problemer å bare ta en ny brikke.

Kommentarer

  • Takk for all nyttig informasjon, vi endte opp med å oppnå dette.
  • Vel, den riktige måten å murstein en AVR er med overstrøm / Da blir det ristet …
  • Men så kalles det ikke ', men steker det, eller som du sier å riste det. Sett 15ampe gjennom MCU, og jeg vedder på at du ' ser at den hopper gjennom rommet 😉
  • Hvordan slipper jeg en spesifikk nøkkel? Jeg vil etterligne en nøkkel HOLD og slipp deretter. Og også i lenken, tegnet går til array [2] mens her går til [1]. Hvorfor?
  • vel, som vist i mitt eksempel, gjør du det i to trinn, først trykker du på tasten, så er ' forsinkelsen, så slipper du den. Vel, så trenger du ' foreles deg selv om hvordan maskinvaretastaturet implementeres ntasjonen fungerer, den er ' som ikke naturlig, og hver verdi i matrisen har en betydning. Tilgi meg for ikke å ha en lenke til å dele minibank, men når du finner noe som søker på nettet, kan du legge ut en ny kommentar ☺

Svar

Jeg opprettet et prosjekt som erstatter Arduino Bootloader. Du er i stand til å laste opp skisser og bruke den som HID. Se Project HID på Github: https://github.com/NicoHood/HID

Kommentarer

  • Velkommen til Arduino SE! Kan du legge til litt om hvordan du bruker biblioteket ditt? Takk!
  • Les readme og prøv eksemplene? Det er der, du trenger ikke å lure alt her. Alt på Github er oppdatert 🙂
  • Beklager fyr, det ser ut som et kult bibliotek, men dokumentasjonen din mangler gal. Det er ' ingen reelle installasjonsinstruksjoner så vidt jeg kan fortelle, og hele emner i wiki-en din sier bare " TODO " (spesielt gamepad-emnet er helt tomt som dette). : – /
  • Det er faktisk behov for å presentere en grunnleggende beskrivelse her: svar kreves for å være meningsfylte selv uten den eksterne lenken, som kan dø. Og denne er ikke det.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *