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