Arduino USB HID के रूप में


25

क्या Arduino uno का उपयोग करके एक HID डिवाइस (कीबोर्ड की तरह) बनाना संभव है?

इस समय, मेरे पास सीरियल लाइन पर आउटपुट देने वाले Arduino पर बटन इनपुट हैं। तो, मैं अपने वर्तमान फर्मवेयर को किसी ऐसी चीज में कैसे बदल सकता हूं जो एक छिपाई कीबोर्ड की तरह व्यवहार कर सकती है?

  • क्या मैं एक नया विंडो डिवाइस ड्राइवर लिखूंगा?
  • क्या मैं एक सॉफ़्टवेयर परत बना सकता हूँ जो मेरे धारावाहिक डेटा को ले सकती है और विंडोज़ ने इसे HID इनपुट के रूप में पढ़ा है?
  • क्या इसे हासिल करने का कोई बेहतर तरीका है, अगर यह संभव है?

1
मैं गलत हो सकता हूं, लेकिन यह वास्तव में Arduino के बारे में नहीं है। इसकी विंडो साइड डिवाइस ड्राइवर के विकास के बारे में है।
आशीष्र

1
Google में पहला उत्तर: mitchtech.net/arduino-usb-hid-keyboard ... लेकिन आपने यह नहीं बताया कि कौन सा Arduino है। एक लियोनार्डो पर यह बिल्टिन है, और उपयुक्त ड्राइवर पहले से मौजूद है (देखें arduino.cc/en/Reference/MouseKeyboard )।
फ्रेड पीपी 27'14

मैं एक यूनो का उपयोग कर रहा हूं, लेकिन मैं देखूंगा कि आपने क्या पोस्ट किया था क्योंकि पिछली बार हमने डीएफयू अपडेट पर विचार किया था लेकिन हम ईंट बनाने के सामान से डरते हैं क्योंकि घटक मेरे क्षेत्र में सबसे आसानी से उपलब्ध और सस्ते नहीं हैं। स्थानों।
विसंगति

3
@AsheeshR यह मुद्दा अभी मेटा पर है: meta.arduino.stackexchange.com/q/102/46
रिकार्डो

1
ठीक है, यह निश्चित रूप से संभव है, क्योंकि Arduino Uno में USB ड्राइवर चिप के रूप में Atmega16u2 की सुविधा है, उपयोगकर्ता डिवाइस पर पुश करने के लिए DFU या ICSP या तो उपयोग कर सकते हैं, जो लियोनार्डो के पास एक फ़र्मवेयर को बंद कर देगा जिससे Arduino एक HID कीबोर्ड के रूप में व्यवहार करेगा। इसमें कोई विंडोज़ डेवलपमेंट शामिल नहीं है, कोई ड्राइवर नहीं बनाया जाना चाहिए क्योंकि USB / HID डिवाइस को डिफ़ॉल्ट रूप से पहचाना जाता है। यानी उस सवाल को फिर से खोलना चाहिए।
zmo

जवाबों:


14

क्या Arduino uno का उपयोग करके एक HID डिवाइस (कीबोर्ड की तरह) बनाना संभव है?

हाँ यही है! और यहाँ पर कैसे करना है पर एक महान ट्यूटोरियल है

इस समय, मेरे पास सीरियल लाइन पर आउटपुट देने वाले Arduino पर बटन इनपुट हैं। तो, मैं अपने वर्तमान फर्मवेयर को किसी ऐसी चीज में कैसे बदल सकता हूं जो एक छिपाई कीबोर्ड की तरह व्यवहार कर सकती है?

जैसा कि ट्यूटोरियल आपको दिखाता है, आपको घटनाओं को प्रिंट करने के बजाय अपने फर्मवेयर कोड को बदलने की आवश्यकता है, आप वास्तव में घटनाओं को ट्रिगर करते हैं। आपको क्या करना है, अपने कोड में जोड़ें:

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

आप यहां क्या कर रहे हैं, आपके मुख्य Arduino माइक्रोकंट्रोलर से सीरियल लाइन पर छोटे संचारक को भेजा जाता है जो USB संचार को संभालता है। वह माइक्रोकंट्रोलर उन प्रमुख "बफ़र्स" को ले जाएगा और उन्हें USB के रूप में USB HID कीबोर्ड कुंजी दबाएगा।

खबरदार कि प्रमुख चरित्र ( chrयहाँ कोड में), वास्तव में USB पर भेजा गया एक कीकोड है जो आपके USB HID ड्राइवर द्वारा व्याख्या किया जाता है, जो तब आपके कीबोर्ड के लिए सेटअप किए गए वर्तमान लेआउट का उपयोग करके इसे एक वास्तविक चरित्र में बदल देता है।

modचरित्र संशोधक कुंजियों आप कीबोर्ड (पाली, नियंत्रण, ऑल्ट ...) पर है में से एक है 0x00कोई संशोधक जा रहा है।

  • क्या मैं एक नया विंडो डिवाइस ड्राइवर लिखूंगा?

नहीं, आपको ज़रूरत नहीं है! DFU अपग्रेड के साथ, आपके arduino को विंडोज़ द्वारा USB कीबोर्ड के रूप में देखा जाएगा।

  • क्या मैं एक सॉफ़्टवेयर परत बना सकता हूँ जो मेरे धारावाहिक डेटा को ले सकती है और विंडोज़ ने इसे HID इनपुट के रूप में पढ़ा है?

आपको न तो ऐसा करने की आवश्यकता है, और यह वास्तव में कई कारणों से बहुत बुरा विचार है:

  • आपका समाधान पोर्टेबल नहीं होगा, और इस प्रकार आपको प्रत्येक प्लेटफ़ॉर्म के लिए कुछ हैक करने की आवश्यकता होगी, जिसका आप उपयोग कर सकते हैं;
  • आपका समाधान बहुत कुछ नया कोड देगा; अधिक कोड एक लिखें, अधिक कीड़े आपके सिस्टम में होने की संभावना है,
  • आपका समाधान वास्तव में हैकिंग होगा, क्योंकि यह एक डिवाइस ड्राइवर (यानी कर्नेल भूमि ) के रूप में एक उपयोगकर्ता प्रोग्राम (यानी उपयोगकर्ता भूमि ) से इनपुट लेगा और काम नहीं करने की संभावना है, डिबग करने के लिए एक नरक हो सकता है, और सुरक्षा मुद्दों के लिए प्रवण होगा। .. अगर यह भी संभव है!

मैं एक यूनो का उपयोग कर रहा हूं, लेकिन मैं देखूंगा कि आपने क्या पोस्ट किया था क्योंकि पिछली बार हमने डीएफयू अपडेट पर विचार किया था लेकिन हम ईंट के सामान से डर गए थे

अंत में, आपको अपने arduino को ईंट बनाने के बारे में, एक टिप्पणी में चिंता हो रही है। कृपया मुझ पर और लेख के लेखक पर विश्वास करें कि आप एक फर्मवेयर फ़्लैश कर अपने arduino को ईंट नहीं कर सकते हैं :

नोट: इस पद्धति का उपयोग करके डिवाइस को 'ब्रिक करने' का कोई मौका नहीं है। Arduino बूटलोडर फर्मवेयर को हमेशा DFU प्रोटोकॉल का उपयोग करके अपडेट किया जा सकता है!

यदि कोई चीज़ वास्तव में बुरी तरह से गलत हो जाती है, और आपको थोड़ा AVR (atmega8u2) में बूटलोडर भ्रष्टाचार मिलता है, तो आप अभी भी USB प्लग के बगल में 6 पिन का उपयोग करके किसी अन्य arduino या एक atmel प्रोग्रामर का उपयोग करके इसे फिर से मिटा सकते हैं।

अंत में, पता है कि एक AVR को ईंट करने का एकमात्र तरीका, इस प्रकार एक Arduino भी फ़्यूज़ के साथ खेलना है और प्रोग्रामिंग फ़्यूज़ को रीसेट करना है। और फिर भी, आप अपने डिवाइस को बचाने के लिए एचवीएसपी का उपयोग कर सकते हैं , हालांकि यह सिर्फ एक नई चिप लेने के लिए अक्सर कम परेशानी है।


1
सभी उपयोगी जानकारी के लिए धन्यवाद, हमने इसे प्राप्त किया।
विसंगति

खैर, एवीआर को ईंट करने का उचित तरीका चालू / अधिक वोल्टेज के साथ है। फिर इसे टोस्ट किया जाएगा ...
user2973

लेकिन फिर, इसे ब्रिकिंग नहीं कहा जाता है, लेकिन इसे फ्राई करना, या जैसा कि आप इसे टोस्टिंग कहते हैं। एमसीयू के माध्यम से 15amps रखो, और मुझे यकीन है कि आप इसे कमरे ;-) के माध्यम से कूद देखेंगे
ZMO

विशिष्ट कुंजी कैसे जारी करें? मैं एक प्रमुख होल्ड का विमोचन करना चाहता हूं। और लिंक में भी, वर्ण सरणी [2] में जाता है जबकि यहाँ पर [1] जाता है। क्यूं कर?
5argon

ठीक है, जैसा कि मेरे उदाहरण में दिखाया गया है, आप इसे दो चरणों में करते हैं, पहले आप कुंजी दबाते हैं, फिर देरी होती है, फिर आप इसे जारी करते हैं। ठीक है, तो आपको अपने आप को व्याख्यान देना होगा कि हार्डवेयर कीबोर्ड कार्यान्वयन कैसे काम करता है, यह स्वाभाविक नहीं है, और सरणी के प्रत्येक मूल्य का एक अर्थ है। मुझे atm साझा करने के लिए लिंक न होने के लिए क्षमा करें, लेकिन जब भी आप वेब पर कुछ खोजते हैं, तो कृपया एक नई टिप्पणी पोस्ट करें '
zmo

6

मैंने एक ऐसी परियोजना बनाई जो Arduino Bootloader को पूरी तरह से बदल देती है। आप स्केच अपलोड करने और इसे HID के रूप में उपयोग करने में सक्षम हैं। Github पर प्रोजेक्ट HID देखें: https://github.com/NicoHood/HID


4
Arduino SE में आपका स्वागत है! क्या आप अपने पुस्तकालय का उपयोग करने के बारे में थोड़ा सा जोड़ सकते हैं? धन्यवाद!
अनाम पेंगुइन

2
रीडमी पढ़ें और उदाहरणों की कोशिश करें? यह सब वहाँ, सब कुछ यहाँ धोखा करने की कोई जरूरत नहीं है। Github पर सब कुछ आज तक है :)

क्षमा करें दोस्त, यह एक शांत पुस्तकालय की तरह दिखता है, लेकिन आपके प्रलेखन में कमी है। जहां तक ​​मैं बता सकता हूं, वहां कोई वास्तविक इंस्टॉलेशन निर्देश नहीं है, और आपके विकी में पूरे विषय केवल "TODO" कहते हैं (विशेषकर गेमपैड विषय इस तरह पूरी तरह से खाली है)। : - /
BrainSlugs83

1
वास्तव में यहां एक मूल विवरण प्रस्तुत करने की आवश्यकता है: बाहरी लिंक के बिना भी सार्थक होने के लिए उत्तरों की आवश्यकता होती है, जो मर सकते थे। और यह एक नहीं है।
क्रिस स्ट्रैटन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.