Vraag:
Arduino als USB HID
Anomaly
2014-02-27 20:37:49 UTC
view on stackexchange narkive permalink

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

Op dit moment heb ik 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?
Ik heb het misschien mis, maar dit gaat niet echt over Arduino. Het gaat over de ontwikkeling van Windows-apparaatstuurprogramma's.
Eerste antwoord in google: http://mitchtech.net/arduino-usb-hid-keyboard/ ... maar je hebt niet aangegeven welke Arduino. Op een Leonardo is het ingebouwd, en de juiste driver bestaat al (zie http://arduino.cc/en/Reference/MouseKeyboard).
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, omdat de componenten in mijn omgeving niet zo gemakkelijk verkrijgbaar en goedkoop zijn als in de meeste plaatsen.
@AsheeshR Nu heb je meer informatie toegevoegd om je claim te staven, maar het is maar een link. Dus waarom heb je geen uitgebreidere versie van die opmerking als antwoord gepost (niet om als een linkantwoord te worden beschouwd) en op de upvotes gewacht? Dat zou veel constructiever zijn geweest dan stemmen voor sluiting ervan.
@AsheeshR Dit probleem is nu in meta: http://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-flashing gebruiken om op het apparaat een firmware in de buurt van de Leonardo's te pushen, waardoor de Arduino zich gedraagt ​​als een HID-toetsenbord. Er is geen Windows-ontwikkeling bij betrokken, er hoeft geen stuurprogramma te worden gebouwd, aangezien USB / HID-apparaten standaard worden herkend. dat wil zeggen dat die vraag moet worden heropend.
Twee antwoorden:
#1
+16
zmo
2014-03-01 22:15:12 UTC
view on stackexchange narkive permalink

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

Op dit moment 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 je je firmwarecode transformeren, zodat je in plaats van de gebeurtenissen af ​​te drukken feitelijk gebeurtenissen triggeren. 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}; // druk op de toets Serial.write (buf, 8); // emuleren toetsaanslag vertraging vertraging (10); buf [1] = 0x00; // release key Serial.write (buf, 8);}  

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

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

Het mod -teken is er een van de modificatietoetsen die je op het toetsenbord hebt (shift, control, alt ...), 0x00 zijn geen modificator.

  • Zal ik een nieuw venster schrijven apparaatstuurprogramma?

Nee, je hebt het 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 kan opnemen en Windows deze als HID-invoer laten lezen?

Dat hoef je ook niet te doen, en het is eigenlijk om vele redenen een heel slecht idee:

  • je oplossing zou niet draagbaar zijn, en dus zou je iets moeten hacken voor elk platform dat je gebruikt,
  • je oplossing zou veel nieuwe code inhouden; 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 je niet je arduinodosering van een firmwareflitser niet kunt blokkeren:

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

Voor het geval er iets heel erg mis gaat, en je een bootloader-corruptie krijgt in de kleine AVR (atmega8u2), kun je het nog steeds reflashen 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, dus ook een Arduino, te blokkeren, is door 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.

Bedankt voor alle nuttige info, we hebben dit uiteindelijk bereikt.
Welnu, de juiste manier om een ​​AVR te blokkeren, is met overstroom / overspanning. Dan wordt het geroosterd ...
Maar dan heet het niet metselen, maar bakken, of zoals je zegt: roosteren. Steek 15amps door de MCU, en ik wed dat je hem door de kamer zult zien springen ;-)
Hoe een specifieke sleutel vrijgeven? Ik wil een toets HOLD emuleren en dan loslaten. En ook in de link gaat het karakter naar array [2] terwijl hier naar [1] gaat. Waarom?
Nou, zoals in mijn voorbeeld te zien is, doe je het in twee stappen, eerst druk je op de toets, dan is er de vertraging, dan laat je hem los. Nou, dan zou je jezelf moeten uitleggen hoe hardware-toetsenbordimplementatie 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 ☺
Gewoon om duidelijk te zijn. Dit vermogen is afhankelijk van de Atmega16u2, dus b.v. dit is niet mogelijk met Arduino nano?
#2
+8
user3486
2014-08-07 07:13:24 UTC
view on stackexchange narkive permalink

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

Welkom bij Arduino SE! Kun je iets toevoegen over het gebruik van je bibliotheek? Bedankt!
Lees de readme 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 zijn geen echte installatie-instructies voor zover ik weet, 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 het niet.


Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 3.0-licentie waaronder het wordt gedistribueerd.
Loading...