Arduino als USB HID

Is het mogelijk om een HID-apparaat (zoals een toetsenbord) te bouwen met een Arduino-uno?

Destijds zijnde, ik heb knopingangen op de Arduino die uitgangen op de seriële lijn geven. Dus, hoe kan ik mijn huidige firmware omzetten in iets dat zich kan gedragen als een HID-toetsenbord?

  • Zal ik een nieuw apparaatstuurprogramma voor Windows schrijven?
  • Zal ik een software maken laag die mijn seriële gegevens kan opnemen en Windows kan laten lezen als HID-invoer?
  • Is er een betere manier om dit te bereiken, als het überhaupt mogelijk is?

Opmerkingen

  • Misschien heb ik het mis, maar dit gaat niet echt over Arduino. Het gaat over Window ' ontwikkeling van stuurprogrammas aan de zijkant.
  • Eerste antwoord in google: mitchtech.net/arduino -usb-hid-keyboard … maar je hebt niet gespecificeerd welke Arduino. Op een Leonardo is het ' ingebouwd, en de juiste driver bestaat al (zie arduino.cc/en/Reference/MouseKeyboard).
  • Ik ' m gebruik een Uno, maar ik ' zal kijken naar wat je hebt gepost omdat de vorige keer hebben we de DFU-update overwogen, maar we ' zijn een beetje bang om dingen met stenen te maken, aangezien de componenten ' niet zo gemakkelijk verkrijgbaar en goedkoop zijn in mijn gebied zoals op de meeste plaatsen.
  • @AsheeshR Dit probleem is nu in meta: meta.arduino.stackexchange.com/q/102/46
  • Nou, dat ' is zeker mogelijk, aangezien de Arduino Uno een Atmega16u2 als USB-driverchip heeft, kan de gebruiker DFU of ICSP gebruiken om druk op het apparaat een firmware dicht bij de leonardo ' s waardoor de Arduino zich gedraagt als een HID-toetsenbord. Er is ' s geen Windows-ontwikkeling bij betrokken, geen stuurprogramma om te bouwen als USB / HID-apparaten worden standaard herkend. dat wil zeggen dat die vraag opnieuw moet worden geopend.

Antwoord

Is het mogelijk om een HID-apparaat (zoals een toetsenbord) te bouwen met een Arduino-uno?

ja dat is het! En er is “een geweldige tutorial over hoe je dat moet doen in hier

Bij de tijd heb ik knopingangen op de Arduino die uitgangen geven op de seriële lijn. Dus, hoe kan ik mijn huidige firmware transformeren in iets dat zich kan gedragen als een HID-toetsenbord?

Zoals de tutorial laat zien, moet u uw firmwarecode transformeren, zodat u in plaats van de gebeurtenissen af te drukken, gebeurtenissen daadwerkelijk triggert. Wat u moet doen, is aan uw code toevoegen:

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

Wat u hier doet, is het verzenden van uw belangrijkste Arduino-microcontrollergebeurtenissen via de seriële lijn naar de kleinere microcontroller die de USB-communicatie afhandelt. Die microcontroller neemt die sleutel “buffers” en zet ze over als USB HID-toetsenbordtoets wordt ingedrukt via USB.

Pas op dat het sleutelteken (chr in de code hier ), is eigenlijk een sleutelcode die via USB wordt verzonden en wordt geïnterpreteerd door uw USB HID-stuurprogramma, dat het vervolgens vertaalt in een echt teken met behulp van de huidige indeling die u voor uw toetsenbord hebt ingesteld.

De mod -teken is een van de wijzigingstoetsen die u op het toetsenbord heeft (shift, control, alt …), 0x00 is geen wijzigingstoets.

  • Zal ik een apparaatstuurprogramma voor een nieuw venster schrijven?

Nee, dat heb je niet nodig! Met de DFU-upgrade wordt je arduino door Windows gezien als een USB-toetsenbord.

  • Zal ik een softwarelaag maken die mijn seriële gegevens en laat Windows het lezen als HID-invoer?

U hoeft dat ook niet te doen, en het is eigenlijk een heel slecht idee voor vele redenen:

  • uw oplossing zou niet draagbaar zijn, en daarom zou u “iets moeten hacken voor elk platform dat u gebruikt,
  • uw oplossing zou veel nieuwe code ; hoe meer code je schrijft, hoe meer bugs er waarschijnlijk in je systeem zitten,
  • je oplossing zou echt hackachtig zijn, omdat het zich zou gedragen als een apparaatstuurprogramma (dwz kernelland ) invoer van een gebruikersprogramma (dwz user land ) en zal waarschijnlijk niet werken, een hel zijn om te debuggen, en vatbaar voor beveiligingsproblemen … Als dat zelfs mogelijk is om te doen!

Ik gebruik een Uno, maar ik zal kijken naar wat je hebt gepost, want de vorige keer hebben we de DFU-update overwogen, maar we zijn een beetje bang om dingen met stenen te maken

Eindelijk maak je je zorgen, in een opmerking, over het metselen van je arduino.Geloof me en de auteur van het artikel dat u niet brick je arduino door een firmware flash te doen:

OPMERKING: er is geen kans om het apparaat met deze methode te bricken. De Arduino-bootloader-firmware kan altijd worden bijgewerkt met behulp van het DFU-protocol!

Mocht er iets heel erg mis gaan en je krijgt een bootloader-corruptie in de kleine AVR (atmega8u2), dan kun je nog steeds reflashen het met een andere arduino of een atmel-programmeur met behulp van de 6 pinnen naast de USB-stekker.

Weet uiteindelijk dat de enige manier om een AVR te blokkeren, dus ook een Arduino , is om met de zekeringen te spelen en de programmeerzekeringen te resetten. En zelfs dan kunt u HVSP gebruiken om uw apparaat op te slaan, hoewel het vaak minder moeite kost om gewoon een nieuwe chip te nemen.

Opmerkingen

  • Bedankt voor alle nuttige informatie, we hebben dit uiteindelijk bereikt.
  • Nou, de juiste manier om een AVR met stenen te verbinden is met overstroom / overspanning. Dan wordt het geroosterd …
  • Maar dan, ' heet het niet metselen, maar bakken, of, zoals je zegt, roosteren. Zet 15amps door de MCU, en ik wed dat je ' het door de kamer zal zien springen 😉
  • Hoe een specifieke sleutel loslaten? Ik wil emuleren een toets HOLD dan loslaten. En ook in de link gaat het karakter naar array [2] terwijl hier naar [1] gaat. Waarom?
  • nou, zoals in mijn voorbeeld, doe je het in twee stappen, druk je eerst op de toets, dan is er ' de vertraging, dan laat je deze los. Nou, dan moet je ' leer jezelf over hoe het hardware-toetsenbord werkt ntation werkt, het ' is een beetje niet natuurlijk, en elke waarde van de array heeft een betekenis. Excuseer me dat ik geen link heb om pinautomaten te delen, maar als je iets vindt dat op internet zoekt, plaats dan een nieuwe opmerking ☺

Antwoord

Ik heb een project gemaakt dat de Arduino Bootloader volledig vervangt. U kunt schetsen uploaden en deze als HID gebruiken. Zie Project HID op Github: https://github.com/NicoHood/HID

Reacties

  • Welkom bij Arduino SE! Kun je iets toevoegen over het gebruik van je bibliotheek? Bedankt!
  • Lees het leesmij-bestand en probeer de voorbeelden? Het is er allemaal, het is niet nodig om alles hier te misleiden. Alles op Github is up-to-date 🙂
  • Sorry kerel, het ziet eruit als een coole bibliotheek, maar je documentatie ontbreekt belachelijk. Er ' s geen echte installatie-instructies voor zover ik kan nagaan, en volledige onderwerpen in je wiki zeg gewoon " TODO " (specifiek het gamepad-onderwerp is op deze manier helemaal leeg). : – /
  • Eigenlijk is het nodig om hier een basisbeschrijving te geven: antwoorden moeten zinvol zijn, zelfs zonder de externe link, die zou kunnen sterven. En deze is dat niet.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *