विषयसूची:
- चरण 1: ब्लूटूथ कम ऊर्जा (बीएलई) के बारे में थोड़ा
- चरण 2: स्कैनिंग और कनेक्शन संकेतक
- चरण 3: जॉयस्टिक और बटन घटनाओं को समझना।
- चरण 4: वीआर बॉक्स ऑपरेशन: जॉयस्टिक
- चरण 5: वीआर बॉक्स ऑपरेशन: ट्रिगर बटन
- चरण 6: वीआर बॉक्स ऑपरेशन: ए / बी बटन
- चरण 7: वीआर बॉक्स ऑपरेशन: सी / डी बटन
- चरण 8: निष्कर्ष
वीडियो: ESP32 ब्लूटूथ BLE रिमोट कंट्रोल: 8 कदम
2024 लेखक: John Day | [email protected]. अंतिम बार संशोधित: 2024-01-30 09:22
यह प्रोजेक्ट इस बात का उदाहरण है कि किसी सस्ते ब्लूटूथ BLE जॉयस्टिक को ESP32 से कैसे जोड़ा जाए। कोड को ESP32 एडऑन के साथ Arduino IDE Ver 1.8.5 का उपयोग करके लिखा गया था। उपयोग किया गया BLE जॉयस्टिक एक वाणिज्यिक उपकरण है जिसे आप इंटरनेट पर $20.00 से कम में या अपने स्थानीय पांचBELoW स्टोर से $5.00 में खरीद सकते हैं।
इस परियोजना के लिए मैंने जिस जॉयस्टिक का उपयोग किया है वह एक स्पेक्ट्रम वीआर कंट्रोल ब्लूटूथ रिमोट कंट्रोलर है। इसे एंड्रॉइड और आईओएस टैबलेट के साथ वीआर हेडसेट के साथ उपयोग के लिए जॉयस्टिक/माउस के रूप में काम करने के रूप में विपणन किया जा रहा है।
VR कंट्रोल ब्लूटूथ रिमोट कंट्रोलर में X और Y अक्ष के साथ सिंगल जॉयस्टिक, सामने दो ट्रिगर बटन और हैंडल पर छह बटन होते हैं। दो बटन पावर ऑन/ऑफ और मोड कंट्रोल के लिए हैं। अन्य चार बटन जो आप चाहते हैं उसके लिए उपयोग किए जा सकते हैं। यह प्रोजेक्ट एक कंकाल या ढांचा है जो सभी ब्लूटूथ इंटरफेसिंग और बटन और जॉयस्टिक के डिकोडिंग को संभालता है। आपको बस इतना करना है कि आप बटन और जॉयस्टिक को क्या करना चाहते हैं, इसे संभालने के लिए फ़ंक्शन कॉल जोड़ें। इस ढांचे का उपयोग करने के लिए आपको ब्लूटूथ के बारे में कुछ भी जानने की आवश्यकता नहीं है।
Arduino IDE और ESP32 एडऑन को स्थापित करने के लिए विस्तृत निर्देशों के साथ कई वेब साइट हैं। मैं यहां उस जानकारी को दोहराने का प्रयास नहीं करने जा रहा हूं। इसे Google करें और निर्देशों का पालन करें।
फ्रेमवर्क IoT शेयरिंग द्वारा प्रकाशित BLE क्लाइंट उदाहरण का एक अनुकूलन है। आप इसे यहां देख सकते हैं। BLE कैसे काम करता है, इसका अंदाजा लगाने के लिए आप इस कोड का अध्ययन कर सकते हैं। Expressif के पास GATT BLE क्लाइंट के लिए एक पूरा उदाहरण है और ऑपरेशन को विस्तार से बताता है (Arduino IDE के लिए नहीं लिखा गया)। आप इसे यहां पा सकते हैं।
यह एक BLE ट्यूटोरियल नहीं है। मैं यह नहीं बताऊंगा कि कोड विस्तार से कैसे काम करता है। मैं जॉयस्टिक की कुछ विशेषताओं का वर्णन करने के लिए BLE शब्दावली का उपयोग करूंगा। कोड का वह भाग जिसे आपको अपनी परियोजना के लिए संशोधित करने की आवश्यकता है, उसे संशोधित करने में आपकी सहायता करने के लिए विस्तार से समझाया जाएगा। इस निर्देश को छोटा रखने और जॉयस्टिक के उपयोग पर ध्यान केंद्रित करने की गुंजाइश सीमित है।
चरण 1: ब्लूटूथ कम ऊर्जा (बीएलई) के बारे में थोड़ा
यह BLE पर एक ट्यूटोरियल बनने का इरादा नहीं है। जब मैंने यह प्रोजेक्ट शुरू किया था, तब मुझे BLE और क्लासिक ब्लूटूथ में अंतर नहीं पता था। मैं सिर्फ यह देखना चाहता था कि क्या मुझे ESP32 के साथ काम करने के लिए खरीदी गई जॉयस्टिक मिल सकती है। निम्नलिखित पाठ में मैं बीएलई शब्दावली का उपयोग कर रहा हूं ताकि बीएलई कैसे काम करता है इसका एक सरल अवलोकन दिया जा सके।
BLE क्लाइंट/सर्वर आर्किटेक्चर का उपयोग करता है। एक डिवाइस एक सर्वर है जो सेवाएं प्रदान करता है। अन्य डिवाइस एक क्लाइंट है जो सेवाओं का उपभोग करता है। बिजली की आवश्यकताओं को कम रखने के लिए, बीएलई परिवर्तन होने पर केवल सूचना के छोटे पैकेट प्रसारित करता है। जॉयस्टिक के मामले में, जॉयस्टिक डिवाइस एक सर्वर है। एक सर्वर के रूप में, यह खुद को विज्ञापित करता है और पूछे जाने पर यह प्रदान की जाने वाली सेवाओं की एक सूची प्रसारित करेगा। जॉयस्टिक डिवाइस पांच सेवाओं का विज्ञापन करता है। एकमात्र सेवा जिसमें हम रुचि रखते हैं वह है BLE HID (ह्यूमन इंटरफेस डिवाइस) सेवा। एक बीएलई सेवा में इसके साथ जुड़े विशेषताओं के रूप में जाना जाता है। एक विशेषता आमतौर पर डेटा का एक स्रोत है। जॉयस्टिक की HID सेवा में दस विशेषताएँ होती हैं। कुछ विशेषताएँ डुप्लीकेट हैं और उन्हें नज़रअंदाज़ कर दिया जाता है। हम केवल BLE रिपोर्ट विशेषताओं में रुचि रखते हैं जिनमें पढ़ने और सूचित करने की क्षमता है। तीन विशेषताएँ इन आवश्यकताओं को पूरा करती हैं और जॉयस्टिक की स्थिति और बटनों की स्थिति के बारे में डेटा प्रदान करती हैं। जब अधिसूचना सक्षम होती है, तो संबंधित विशेषता में परिवर्तन का पता चलने पर सर्वर डेटा पैकेट भेजेगा।
फ्रेमवर्क सत्यापित करता है कि उसे जो सर्वर मिला है उसमें BLE HID सेवा है और फिर जॉयस्टिक और बटन स्थिति की जानकारी प्रदान करने वाली तीन रिपोर्ट विशेषताओं पर सूचनाएं सक्षम करेगा। फिर, जब कोई बटन दबाया या छोड़ा जाता है या जॉयस्टिक को स्थानांतरित किया जाता है, तो ESP32 डेटा का एक पैकेट प्राप्त करता है जो बताता है कि नई जॉयस्टिक स्थिति क्या है और/या कुछ बटनों की स्थिति क्या है।
चरण 2: स्कैनिंग और कनेक्शन संकेतक
फ्रेमवर्क दो LEDS, GREENLED और BLUELED को परिभाषित करता है और उन्हें ESP32 के GPIO पिन में से दो को असाइन करता है। जब ESP32 BLE जॉयस्टिक की खोज कर रहा होता है, तो GREENLED जगमगा उठता है। जब जॉयस्टिक मिल जाता है तो ग्रीनलेड को बंद कर दिया जाता है और नीले रंग को यह इंगित करने के लिए जलाया जाता है कि कनेक्शन स्थापित हो गया है और आप जाने के लिए तैयार हैं। यदि कनेक्शन खो जाता है, तो BLUELED बंद हो जाता है, ESP32 रीसेट हो जाता है, GREENLED जल जाता है और स्कैनिंग फिर से शुरू हो जाती है। यदि तीस सेकंड के भीतर जॉयस्टिक नहीं मिलता है तो स्कैनिंग बंद हो जाती है और ग्रीनलेड बंद हो जाता है। पांच सेकंड के बाद, स्कैनिंग फिर से शुरू हो जाती है और ग्रीनलेड चालू हो जाता है।
अंतिम परिणाम यह है कि ESP32 जॉयस्टिक के लिए तब तक स्कैन करना जारी रखेगा जब तक कि वह इसे नहीं ढूंढ लेता। एक बार कनेक्शन बन जाने के बाद, यदि यह खो जाता है, तो ESP32 अपने आप रीसेट हो जाएगा और फिर से स्कैन करना शुरू कर देगा। ESP32 रीसेट किया गया है क्योंकि स्कैनिंग को पुनरारंभ करने के लिए ब्लूटूथ स्टैक को रीसेट करने के लिए कोई ESP32 SDK फ़ंक्शन नहीं है।
चरण 3: जॉयस्टिक और बटन घटनाओं को समझना।
ESP32 पर एक कॉलबैक इवेंट सर्वर से तीन अलग-अलग डेटा पैकेट प्राप्त करता है जो तीन विशेषताओं के लिए सेट किए गए थे जो अधिसूचनाएं प्रदान करने के लिए सेट किए गए थे। एक पैकेट चार बाइट लंबा होता है। तीन बाइट्स में X अक्ष स्थिति, Y अक्ष स्थिति और ट्रिगर बटन होते हैं, जो बाइट में बिट मैप किए जाते हैं। अन्य दो पैकेट प्रत्येक में दो बाइट्स होते हैं और एक बाइट होता है जिसमें बिट मैप्ड बटन स्थिति होती है। प्राप्त पैकेट को डीकोड किया जाता है और मेमोरी में बाइट सरणी में कॉपी किया जाता है। जॉयस्टिक अक्ष डेटा एक्स और वाई डेटा बाइट्स में जाता है और तीन बिट मैप किए गए बटन बाइट्स में से प्रत्येक को उन बटनों के लिए उपयुक्त बाइट में निर्देशित किया जाता है।
सूचनाओं द्वारा प्राप्त डेटा को संभालने के लिए एक फ्रीआरटीओएस कार्य बनाया गया है। जॉयस्टिक और ट्रिगर बटन के लिए एक कार्य, ए और बी बटन के लिए एक कार्य और सी और डी बटन के लिए एक कार्य। इन कार्यों में से प्रत्येक में स्पष्ट रूप से चिह्नित क्षेत्र हैं जहां आपको ईवेंट के साथ जो करना है उसे करने के लिए आपको अपना ऐड कोड करना चाहिए। कार्य के मुख्य भाग में "//===== अपना कोड यहां जोड़ें =====" टिप्पणी देखें और इसके बाद अपना कोड जोड़ें। प्रत्येक कार्य में एक टिप्पणी होती है जो दर्शाती है कि इसका उपयोग किस लिए किया जाता है और होने वाली घटना के बारे में एक संदेश मुद्रित करने के लिए Serial.println() का उपयोग करता है।
यहाँ A/B बटन कार्य से एक उदाहरण दिया गया है;
शून्य कार्यबटनएबी (शून्य * पैरामीटर) {uint8_t बटन;
//===== यदि कार्य को किसी एक बार आरंभीकरण की आवश्यकता है, तो इसे यहां रखें =====
जबकि (सच) {// सीपीयू छोड़ दें, नए डेटा की प्रतीक्षा करें vTaskSuspend(NULL); // हम अभी-अभी उठे, नया डेटा उपलब्ध है बटन = VrBoxData [VB_BTNAB]; Serial.printf ("ए / बी बटन:% 02X / n", बटन); अगर (बटन और VB_BUTTON_A) {// बटन A दबाया गया है या नीचे रखा जा रहा है Serial.println ("बटन A"); //===== यहां अपना कोड जोड़ें ===== }
अगर (बटन और VB_BUTTON_B)
{// बटन बी दबाया गया या नीचे रखा जा रहा है Serial.println ("बटन बी");
//===== यहां अपना कोड जोड़ें =====
} } // के लिए } // टास्कबटनAB
चरण 4: वीआर बॉक्स ऑपरेशन: जॉयस्टिक
यदि जॉयस्टिक को बीच की स्थिति में छोड़ दिया जाता है, तो कोई जॉयस्टिक सूचना नहीं भेजी जाती है। एक बार जब जॉयस्टिक को केंद्र से हटा दिया जाता है, तो जॉयस्टिक डेटा और ट्रिगर बटन डेटा के साथ हर 15mS के बारे में एक सूचना संदेश भेजा जाता है। जब जॉयस्टिक को वापस केंद्र में ले जाया जाता है, तो यह सूचना नहीं भेजी जाती है कि इसे केंद्र में ले जाया गया है। दूसरे शब्दों में, यह आपको बताता है कि जॉयस्टिक केंद्र से हट गया है, लेकिन ऐसा नहीं है कि यह केंद्र में चला गया है। अंतिम परिणाम यह है कि आपको संदेश प्राप्त होते हैं जो इंगित करते हैं कि जॉयस्टिक केंद्र की ओर बढ़ रहा है, लेकिन ऐसा नहीं है कि यह केंद्र तक पहुंच गया है। बहुत कष्टप्रद। जॉयस्टिक डेटा के साथ दो ट्रिगर बटन शामिल हैं। जॉयस्टिक को केंद्र में लौटाने के बाद किसी एक ट्रिगर बटन को दबाने से जॉयस्टिक की स्थिति शून्य हो जाएगी। फ्रेमवर्क में एक टाइमआउट टाइमर बिल्ट-इन होता है जो सभी जॉयस्टिक/ट्रिगर बटन अधिसूचना संदेशों के आने के कुछ ही समय बाद स्वचालित रूप से एक जॉयस्टिक अधिसूचना संदेश का अनुकरण करता है। टाइमर जॉयस्टिक को शून्य पर सेट करता है। जॉयस्टिक की प्रत्येक धुरी पर लगभग +/- 25 की सीमा होती है।
चरण 5: वीआर बॉक्स ऑपरेशन: ट्रिगर बटन
ट्रिगर बटन एक बार दबाए जाने पर और जारी होने पर फिर से एक सूचना संदेश भेजेगा। दबाया गया अधिसूचना संदेश उस बटन को इंगित करेगा जिसे दबाया गया था। रिलीज अधिसूचना संदेश इंगित करता है कि दोनों बटन जारी किए गए हैं।
निचला ट्रिगर बटन दबाए रखने से सर्वर को यह पता लगाने से रोका जा सकेगा कि ऊपरी ट्रिगर बटन दबाया गया है। ऊपरी ट्रिगर बटन को दबाए रखने और निचले ट्रिगर बटन को दबाने से सर्वर एक सूचना संदेश भेजता है कि निचला ट्रिगर बटन दबाया गया है (ऊपरी ट्रिगर बटन शून्य होगा!) निचला ट्रिगर बटन जारी करने से सर्वर एक सूचना भेजेगा कि ऊपरी ट्रिगर बटन दबाया गया है और निचला ट्रिगर जारी किया गया है।
दूसरे शब्दों में, निचला ट्रिगर बटन ऊपरी ट्रिगर बटन पर हावी होता है और दोनों को दबाने पर इसे ओवरराइड कर देगा। आपको यह निर्धारित करना होगा कि दोनों बटनों को दबाए जाने के मामले को कैसे संभालना है।
चरण 6: वीआर बॉक्स ऑपरेशन: ए / बी बटन
ए और बी बटन जॉयस्टिक की तरह काम करते हैं और दबाए जाने पर लगातार सूचना संदेश भेजते हैं। बटन जारी होने पर संदेश बंद हो जाते हैं। ए और बी बटन ट्रिगर बटन के समान काम करते हैं जिसमें ए बटन बी बटन पर हावी होता है जैसे निचला ट्रिगर बटन ऊपरी ट्रिगर बटन पर हावी होता है।
चरण 7: वीआर बॉक्स ऑपरेशन: सी / डी बटन
C और D बटन एक बार दबाए जाने पर और फिर रिलीज़ होने पर एक सूचना संदेश भेजते हैं। यदि दबाए रखा जाता है, तो उनके जारी होने तक कोई और संदेश नहीं भेजे जाते हैं। सी या डी बटनों में से किसी एक को दबाए रखने से सर्वर दूसरे बटन पर गतिविधि का पता लगाने से रोकेगा।
चरण 8: निष्कर्ष
बटनों का संचालन मेरी राय में थोड़ा विस्की है। जब कोई बटन दबाया जाता है तो फ्रेमवर्क आपके कोड को कार्य करने के लिए स्थान प्रदान करता है। यदि आपको बटन रिलीज का पता लगाने की भी आवश्यकता है, तो यह पता लगाने के लिए कि कैसे करना है, यह आपके लिए छोड़ दिया गया है।
यह पूरी तरह से आप पर निर्भर है कि आप प्रत्येक बटन को क्या करना चाहते हैं और जॉयस्टिक को क्या करना चाहिए। आप ट्रिगर, ए और बी और सी एंड डी बटन में अंतर को कैसे संभालते हैं, यह आप पर निर्भर है।
के लिए कोड में देखें; टास्कजॉयस्टिक (), टास्कबटनएबी (), टास्कबटनसीडी () काम करता है और "//===== अपना कोड यहां जोड़ें =====" टिप्पणी के बाद अपना कोड जोड़ें।
जॉयस्टिक (आगे, पीछे, दाएं और बाएं) को संभालने के लिए आपको चार कार्यों की आवश्यकता होगी और विभिन्न बटनों को संभालने के लिए छह कार्यों तक की आवश्यकता होगी। उन सभी को लागू करें या बस आपको जो चाहिए। चुनना आपको है।
यदि आप इस ढांचे का उपयोग करते हैं। मुझे इस बारे में चिल्लाना अच्छा लगेगा कि आपने इसका क्या उपयोग किया और यदि आपको इसका उपयोग करना आसान लगता है।
यदि आपके कोई प्रश्न हैं कि यह कैसे काम करता है या इसे काम करने में मदद चाहिए, तो मुझसे संपर्क करें।
कोड यहाँ GitHub पर उपलब्ध है।
आनंद लेना।
सिफारिश की:
रिमोट कंट्रोल ब्लूटूथ लाइट स्विच: 4 कदम (चित्रों के साथ)
रिमोट कंट्रोल ब्लूटूथ लाइट स्विच: यह एक श्रृंखला में पहला प्रोजेक्ट होगा जिसका शीर्षक है: "ऑप्टिमाइज्ड आलस्य: ओवर इंजीनियर्ड सॉल्यूशंस टू रिमार्कली ट्रिविअल प्रॉब्लम्स"कभी देर रात बिस्तर पर लेटे रहे या अपने लैपटॉप पर नेटफ्लिक्स देख रहे हों? बेशक सबसे बुरा हिस्सा है
IRduino: Arduino रिमोट कंट्रोल - खोए हुए रिमोट की नकल करें: 6 कदम
IRduino: Arduino Remote Control - एक खोए हुए रिमोट की नकल करें: यदि आपने कभी अपने टीवी या डीवीडी प्लेयर के लिए रिमोट कंट्रोल खो दिया है, तो आप जानते हैं कि डिवाइस पर ही बटनों तक चलना, ढूंढना और उनका उपयोग करना कितना निराशाजनक है। कभी-कभी, ये बटन रिमोट के समान कार्यक्षमता भी प्रदान नहीं करते हैं। प्राप्त करें
ESP32 ब्लूटूथ ट्यूटोरियल - ESP32 के इनबिल्ट ब्लूटूथ का उपयोग कैसे करें: 5 कदम
ESP32 ब्लूटूथ ट्यूटोरियल | ESP32 के इनबिल्ट ब्लूटूथ का उपयोग कैसे करें: नमस्कार दोस्तों चूंकि ESP32 बोर्ड वाईफाई और amp के साथ आता है; ब्लूटूथ दोनों लेकिन हमारे ज्यादातर प्रोजेक्ट्स के लिए हम आमतौर पर केवल वाईफाई का उपयोग करते हैं, हम ब्लूटूथ का उपयोग नहीं करते हैं। इसलिए इस निर्देश में मैं दिखाऊंगा कि ESP32 के ब्लूटूथ का उपयोग करना कितना आसान है & आपकी मूल परियोजनाओं के लिए
साधारण रिमोट कंट्रोल किट चार-चैनल आरसी टॉय रिमोट कंट्रोल में तब्दील: 4 कदम
साधारण रिमोट कंट्रोल किट चार-चैनल आरसी खिलौना रिमोट कंट्रोल में परिवर्तित: 如何将通用遥控器套件转换为玩具模型中使用的四通道遥控器。遥控器套件非常便宜。它采用2262和2272芯片和433个模块构建。 मैं
रिमोट रिमोट कंट्रोल: 11 कदम (चित्रों के साथ)
रिमोट रिमोट कंट्रोल: मेरा एक नवजात बच्चा है और वह नहीं सोचता कि उसे मेरी पत्नी के रूप में काफी देर तक सोना चाहिए और मैं भी उसे चाह सकता हूं। एक चीज जो उसे अपने पालने में खुश रखती है वह है मोबाइल जो उसके ऊपर लटकता है। तो जब वह जागता है अगर हमें एक और 25 मिनट या उससे अधिक की आवश्यकता होती है