لوحة مفاتيح USB لاسلكية طويلة المدى في جزأين.
تقترح لوحة المفاتيح USB في المرسل. يجب أن يكون المرسل مضيف USB capabiiity للتواصل مع لوحة المفاتيح. يتم استخدام SAMD21 M0 لهذا المشروع. يقوم كل مطبخ وتصدر بإنشاء تقرير USB HID (واصف الواجهة البشرية). التقرير هو دعامة بيانات 8 بايت يتم إرسالها باستخدام راديو RFM69 إلى المتلقي.
يقوم جهاز الاستقبال بتوصيل الكمبيوتر عبر منفذ USB. لا يلزم أي مكونات أخرى لأن راديو RFM69HCW مدمج مع لوحة الريشة. يأخذ جهاز الاستقبال تقارير USB HID من راديو RFM69 ثم يرسل إلى الكمبيوتر عبر USB.
تأكد من اتباع البرامج التعليمية لـ Adafruit لكلا المجالس للتأكد من أن المجالس تعمل وتثبيت المكتبات.

915 MHz -> Feather 32u4 RFM69HCW -> USB cable -> Computer
يجوز للمستقبل استخدام نسخة ريشة M0 أو 32U4. تم استخدام 32U4 هنا دون أي سبب آخر غير متاح.
لا تحتاج الرؤوس إلى تثبيت على السبورة. هوائي مطلوب.
تحميل RFM69KBDRFM69RX.INO SKETCH. يقرأ هذا البرنامج تقارير USB HOP من راديو RFM69 ثم يرسلها إلى واجهة جهاز لوحة المفاتيح USB إلى الكمبيوتر. الريش مدعوم من الكمبيوتر.

المكونات من اليسار إلى اليمين هي:
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
تحذير: يجب على المرسل استخدام إصدار M0 لأنه يحتوي على قدرة مضيف USB. 32U4 لا.
تُستخدم الرؤوس واللوح للاتصال بالطاقة بلوحة الريش. هوائي مطلوب.
قم بتحميل رسم RFM69KBDRFM69TX.INO. يقرأ هذا البرنامج تقارير USB HID من لوحة مفاتيح USB ثم يرسل تقارير USB HID إلى راديو RFM69.
إن تشغيل الريشة أكثر صعوبة مقارنة بالمستقبل. عند التحميل ، يتم تشغيل الريشة من الكمبيوتر. يجب فصل مصدر الطاقة 5V الآخر (انظر أدناه).
تحذير: لا تربط أكثر من مصدر طاقة واحد بالريشة في نفس الوقت.
تحذير: عند استخدام وضع مضيف USB ، يجب الضغط على زر إعادة ضبط الريشة مرتين لوضع اللوحة في وضع التحميل. التحميل التلقائي لا يعمل.
Feather M0 RFM69HCW -> USB cable -> Computer
خيار آخر لتجنب تبديل الكابلات ، يتم تحميله من خلال لوحة CP2104 ومنفذ Serial1. يجب أن يتم النقر المزدوج على زر إعادة الضبط لبدء التحميل.
عند استخدام الريش في وضع مرسل لوحة المفاتيح ، يجب أن تكون الريشة مدعومة بمصدر طاقة 5V متصل بـ USB Pin. في هذه الحالة ، توفر اللوحة التسلسلية CP2104 USB القدرة 5V وكذلك التسلسل USB لإخراج التصحيح عبر PIN Serial1 UART TX.
عند اكتمال تصحيح الأخطاء ، ليست هناك حاجة إلى لوحة CP2104 ولكن لا يزال هناك حاجة إلى مصدر طاقة 5V.
خيار طاقة بطارية الريش غير مفيد هنا لأن بطاريات الليثيوم لا توفر 5 فولت.
يعمل زوج اللوحات كوحة المفاتيح. عندما يتم الضغط على مفتاح على لوحة المفاتيح ، يتم إرسال تقرير لجهاز واجهة USB (HID) إلى المرسل. التقرير هو بنية بيانات 8 بايت موضحة هنا أن مواصفات USB الرسمية متوفرة من منتدى المنفذين USB ولكن قد يكون من الصعب فهمها.
يرسل المرسل تقرير HID إلى راديو RFM69. عندما يتلقى المتلقي تقرير HID من راديو RFM69 ، فإنه يرسل تقرير HID إلى منفذ USB الأصلي.
معظم التعليمات البرمجية في USBKBDRFM69RX.ino هي من مثال من مكتبة Radiohead. توفر مكتبة لوحة مفاتيح Arduino USB مضاهاة لوحة المفاتيح USB على منفذ USB الأصلي. في الكود أدناه ، عند استلام تقرير USB HID من راديو RFM69 ، يتم إرساله إلى منفذ USB.
يتلقى البيان rf69_manager.recvfromAck(buf, &len, &from) كتلة من البايتات من الراديو. كتلة Bytes هي تقرير HID USB من المرسل.
يرسل العبارة HID().SendReport(2, buf, len) كتلة البايتات خارج منفذ USB. لم يتم توثيق هذه الوظيفة ولكنها مفيدة جدًا للمرور.
يلفت التصحيح المشروط تقرير HID و RSSI.
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" );
}معظم التعليمات البرمجية في USBKBDRFM69TX.ino هي من مثال من مكتبة Radiohead. توفر مكتبة Arduino USBHOST ميزة لوحة المفاتيح لمضيف USB عبر منفذ USB الأصلي. في الكود أدناه ، عند استلام تقرير USB HID من لوحة المفاتيح USB ، يتم إرساله إلى راديو RFM69.
ملاحظة: تشير Documention Arduino USBHOST فقط إلى المستحقات ، لكن USBHOST تعمل على لوحات الصفر و M0 و MKR (على الأقل تلك التي اختبرتها). تعمل لوحات Adafruit Arduino المتوافقة مع معالجات SAMD21 و SAMD51 أيضًا ، لكن لا يمكنني إلا أن أضمن المجالس التي اختبرتها شخصيًا.
يتم استدعاء وظيفة KeyboardRaw::Parse من قبل وظيفة USBHOST :: المهمة عند استلام تقرير HID من لوحة مفاتيح USB.
يرسل البيان rf69_manager.sendtoWait(buf, len, DEST_ADDRESS) تقرير HID عبر راديو RFM69 إلى المتلقي.
يتم إنشاء فئة لوحة المفاتيح لاعتراض تقرير USB HID من مكتبة لوحة المفاتيح USBHOST. البيان hostKeyboard.SetReportParser(0, this) هو كيف يعيد الفصل توجيه تقارير HID إلى نفسها.
#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 );