Eine drahtlose USB -Tastatur in zwei Teilen.
Die USB -Tastatur steckt in den Absender ein. Der Absender muss über USB -Host -Kapabien verfügen, um mit der Tastatur zu kommunizieren. Der SAMD21 M0 wird für dieses Projekt verwendet. Jede Taste -Presse erzeugt einen USB -HID -Bericht (Human Interface Descriptor). Der Bericht ist eine 8 -Byte -Datenstrute, die mit dem RFM69 -Radio an den Empfänger gesendet wird.
Der Empfänger steckt über einen USB -Anschluss an den Computer. Es sind keine weiteren Komponenten erforderlich, da das RFM69HCW -Radio in das Federplatine integriert ist. Der Empfänger nimmt USB HID -Berichte aus dem RFM69 -Radio an und sendet dann an den Computer über USB.
Befolgen Sie unbedingt die Tutorials von Adafruit für beide Boards, um sicherzustellen, dass die Boards funktionieren und die Bibliotheken installiert sind.

915 MHz -> Feather 32u4 RFM69HCW -> USB cable -> Computer
Der Empfänger kann die Federversion M0 oder 32U4 verwenden. Der 32U4 wurde hier aus keinem anderen Grund als verfügbar verwendet.
Header müssen nicht an der Tafel installiert werden. Eine Antenne ist erforderlich.
Laden Sie die RFM69KBDRFM69RX.ino -Skizze hoch. Dieses Programm liest USB HID -Berichte aus dem RFM69 -Radio und sendet sie dann die USB -Tastatur -Geräteschnittstelle an den Computer aus. Die Feder wird vom Computer angetrieben.

Die Komponenten von links nach rechts sind:
USB USB OTG Host
Keyboard -> cable/adapter -> Feather M0 RFM69HCW -> 915 MHz
GND USB Tx Rx
| ^ | ^
| | | |
| | v |
GND 5V RxD TxD
CP2104 USB to serial -> Computer or 5V
WARNUNG: Der Absender muss die M0 -Version verwenden, da er USB -Host -Funktionen verfügt. Der 32U4 nicht.
Header und Breadboard werden verwendet, um mit der Stromversorgung mit der Federbrett verbunden zu werden. Eine Antenne ist erforderlich.
Laden Sie die RFM69KBDRFM69TX.ino -Skizze hoch. Dieses Programm liest USB HID -Berichte von der USB -Tastatur und sendet dann die USB HID -Berichte an das RFM69 -Radio.
Das Stromversetzen der Feder ist schwieriger als der Empfänger. Beim Hochladen wird die Feder vom Computer angetrieben. Die andere 5 -V -Stromquelle (siehe unten) muss getrennt werden.
Warnung: Schließen Sie nicht mehr als eine Stromquelle mit der Feder gleichzeitig an.
Warnung: Bei Verwendung des USB -Hostmodus muss die Federreset -Taste zweimal gedrückt werden, um die Platine in den Upload -Modus zu setzen. Das automatische Upload funktioniert nicht.
Feather M0 RFM69HCW -> USB cable -> Computer
Eine weitere Option, um das Schalten von Kabeln zu vermeiden, ist das Hochladen über die CP2104 -Karte und den Serial1 -Port. Die Schaltfläche Reset muss noch doppelt geklickt werden, um das Upload zu starten.
Bei Verwendung der Feder im Tastatur -Absendermodus muss die Feder von einer 5 -V -Stromquelle angetrieben werden, die an ihren USB -Pin angeschlossen ist. In diesem Fall bietet eine CP2104 -USB -Serienplatine die 5 -V -Leistung sowie die USB -Serie für die Debug -Ausgabe über den Serial1 UART TX -Pin.
Beim Abschluss des Debuggens wird das CP2104 -Board nicht benötigt, aber noch eine 5 -V -Stromversorgung ist erforderlich.
Die Federbatterie -Stromversorgungsoption ist hier nicht nützlich, da Lithiumbatterien nicht 5 V bieten.
Das Boardpaar fungiert als Tastaturpass. Wenn eine Taste auf der Tastatur gedrückt wird, wird an den Absender ein USB -Bericht für menschliches Schnittstellengerät (HID) gesendet. Der Bericht ist eine 8 -Byte -Datenstruktur, die hier erläutert wird. Die offiziellen USB -Spezifikationen sind im USB -Implementierungsforum verfügbar, können jedoch schwer zu verstehen sein.
Der Absender sendet den HID -Bericht sein RFM69 -Radio. Wenn der Empfänger den HID -Bericht von seinem RFM69 -Radio erhält, sendet er den HID -Bericht seinen nativen USB -Anschluss aus.
Der größte Teil des Codes in USBKBDRFM69RX.ino stammt aus einem Beispiel aus der Radiohead -Bibliothek. Die Arduino USB -Tastaturbibliothek bietet die USB -Tastaturemulation über den nativen USB -Anschluss. In dem folgenden Code, wenn ein USB -HID -Bericht vom RFM69 -Radio empfangen wird, wird er den USB -Anschluss verschickt.
Die Anweisung rf69_manager.recvfromAck(buf, &len, &from) erhält einen Block von Bytes aus dem Radio. Der Block von Bytes ist ein USB -HID -Bericht vom Absender.
Die Erklärung HID().SendReport(2, buf, len) sendet den Block von Bytes den USB -Anschluss aus. Diese Funktion ist nicht dokumentiert, ist aber sehr nützlich für PASS -Durchlagen.
Das bedingte Debugg wird den HID -Bericht und den RSSI veröffentlicht.
if ( rf69_manager . recvfromAck ( buf , & len , & from )) {
if (! len ) return ;
HID (). SendReport ( 2 , buf , len );
#ifdef DEBUG_KEYBOARD_RAW
SERIAL_PORT_MONITOR . print ( "Received [" );
SERIAL_PORT_MONITOR . print ( len );
SERIAL_PORT_MONITOR . print ( "]: " );
for ( uint8_t i = 0 ; i < len ; i ++ ) {
SERIAL_PORT_MONITOR . print ( ' ' ); SERIAL_PORT_MONITOR . print ( buf [ i ], HEX );
}
SERIAL_PORT_MONITOR . println ();
SERIAL_PORT_MONITOR . print ( "RSSI: " );
SERIAL_PORT_MONITOR . println ( rf69 . lastRssi (), DEC );
#endif
} else {
SERIAL_PORT_MONITOR . println ( "Receive failed" );
}Der größte Teil des Codes in USBKBDRFM69TX.ino stammt aus einem Beispiel aus der Radiohead -Bibliothek. Die Arduino USBHost Library bietet die USB -Host -Tastaturfunktion über den nativen USB -Anschluss. In dem folgenden Code wird ein USB -HID -Bericht von der USB -Tastatur empfangen, er wird das RFM69 -Radio verschickt.
Hinweis: Der Arduino USBHOST -Dokument bezieht sich nur auf die fällige, aber USBHost funktioniert für Null-, M0- und MKR -Boards (zumindest die, die ich getestet habe). Die Adafruit Arduino-kompatiblen Boards mit SAMD21- und SAMD51-Prozessoren funktionieren ebenfalls, aber ich kann nur für die Boards bürgen, die ich persönlich getestet habe.
Die Anweisung KeyboardRaw::Parse -Funktion wird von der USBHost :: Task -Funktion aufgerufen, wenn ein HID -Bericht von der USB -Tastatur empfangen wird.
Die Anweisung rf69_manager.sendtoWait(buf, len, DEST_ADDRESS) sendet den HID -Bericht über das RFM69 -Radio an den Empfänger.
Die Keyboardraw -Klasse wurde erstellt, um den USB -HID -Bericht aus der USBHost -Tastaturbibliothek abzufangen. In der Anweisung hostKeyboard.SetReportParser(0, this) wird die Klasse die HID -Berichte für sich selbst umgeleitet.
#include <hidboot.h>
class KeyboardRaw : public KeyboardReportParser {
public:
KeyboardRaw ( USBHost & usb ) : hostKeyboard ( & usb ) {
hostKeyboard . SetReportParser ( 0 , this );
};
void Parse ( HID * hid , uint32_t is_rpt_id , uint32_t len , uint8_t * buf );
private:
HIDBoot < HID_PROTOCOL_KEYBOARD > hostKeyboard ;
};
void KeyboardRaw :: Parse ( HID * hid , uint32_t is_rpt_id , uint32_t len , uint8_t * buf )
{
#ifdef DEBUG_KEYBOARD_RAW
SERIAL_PORT_MONITOR . print ( "KeyboardRaw::Parse" );
// Show USB HID keyboard report
for ( uint8_t i = 0 ; i < len ; i ++ ) {
SERIAL_PORT_MONITOR . print ( ' ' ); SERIAL_PORT_MONITOR . print ( buf [ i ], HEX );
}
SERIAL_PORT_MONITOR . println ();
#endif
// Call parent/super method
KeyboardReportParser:: Parse ( hid , is_rpt_id , len , buf );
// On error - return
if ( buf [ 2 ] == 1 )
return ;
if ( len == 8 ) {
rf69_manager . sendtoWait ( buf , len , DEST_ADDRESS );
}
}
// Initialize USB Controller
USBHost usb ;
// Attach keyboard controller to USB
KeyboardRaw keyboard ( usb );