Ist es möglich, ein HID-Gerät (wie eine Tastatur) mit einem Arduino Uno zu bauen?
ja ist es! Und es gibt ein großartiges Tutorial, wie man das hier macht
Zur Zeit habe ich Tasteneingänge auf dem Arduino, die Ausgänge auf der seriellen Leitung geben. Wie kann ich meine aktuelle Firmware in etwas verwandeln, das sich wie eine HID-Tastatur verhalten kann?
Wie das Tutorial zeigt, müssen Sie Ihren Firmware-Code umwandeln, damit Sie, anstatt die Ereignisse auszudrucken, tatsächlich Ereignisse auslösen. Was Sie tun müssen, ist zu Ihrem Code hinzuzufügen:
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);
}
Was Sie hier tun, ist das Senden von Ihren wichtigsten Arduino-Mikrocontroller-Ereignissen über die serielle Leitung an den kleineren Mikrocontroller, der die USB-Kommunikation verwaltet. Dieser Mikrocontroller nimmt diese "Schlüsselpuffer" und überträgt sie, wenn die Taste der USB-HID-Tastatur über USB gedrückt wird.
Beachten Sie, dass das Schlüsselzeichen ( chr
im Code hier) tatsächlich ein über USB gesendeter Schlüsselcode ist, der von Ihrem USB-HID-Treiber interpretiert wird und der ihn dann unter Verwendung des aktuellen Layouts, das Sie für Ihre Tastatur eingerichtet haben, in ein reales Zeichen umsetzt.
Das mod
Zeichen ist eine der Modifizierertasten auf der Tastatur (Umschalttaste, Steuerungstaste, Alttaste ...) und 0x00
kein Modifizierer.
- Soll ich einen neuen Windows-Gerätetreiber schreiben?
Nein, brauchst du nicht! Mit dem DFU-Upgrade wird Ihr Arduino von Windows als USB-Tastatur erkannt.
- Soll ich eine Softwareschicht erstellen, die meine seriellen Daten aufnehmen und von Windows als HID-Eingabe lesen lässt?
Das müssen Sie auch nicht tun, und das ist aus vielen Gründen eine sehr schlechte Idee:
- Ihre Lösung wäre nicht portabel und Sie müssten daher für jede Plattform, die Sie verwenden, etwas hacken.
- Ihre Lösung würde viel neuen Code beinhalten. Je mehr Code man schreibt, desto mehr Fehler sind wahrscheinlich in Ihrem System,
- Ihre Lösung wäre wirklich hackisch, da sie sich wie ein Gerätetreiber (dh Kernel Land ) verhält , der Eingaben von einem Benutzerprogramm (dh Benutzer Land ) entgegennimmt und wahrscheinlich nicht funktioniert, eine Hölle zum Debuggen ist und für Sicherheitsprobleme anfällig ist. ..Wenn das überhaupt geht!
Ich verwende ein Uno, aber ich werde sehen, was Sie geschrieben haben, weil wir das letzte Mal über das DFU-Update nachgedacht haben, aber wir haben ein bisschen Angst vor Ziegelei
Schließlich haben Sie in einem Kommentar Bedenken, Ihr Arduino zu ziegeln. Bitte glauben Sie mir und dem Autor des Artikels, dass Sie Ihr Arduino bei einem Firmware-Flash nicht ziegeln können:
HINWEIS: Es besteht keine Möglichkeit, das Gerät mit dieser Methode zu „mauern“. Die Arduino-Bootloader-Firmware kann immer mit dem DFU-Protokoll aktualisiert werden!
Falls etwas wirklich schlimmes schief geht und Sie eine Bootloader-Beschädigung im kleinen AVR (atmega8u2) feststellen, können Sie es mit einem anderen Arduino oder einem
Atmel-Programmierer mithilfe der 6 Pins neben dem USB-Stecker erneut flashen .
Am Ende wissen Sie, dass der einzige Weg, einen AVR, also auch einen Arduino, zu ziegeln, darin besteht, mit den Sicherungen zu spielen und die Programmiersicherungen zurückzusetzen. Und selbst dann können Sie
HVSP verwenden , um Ihr Gerät zu speichern, obwohl es oft einfacher ist , nur einen neuen Chip zu nehmen.