- आवश्यकताएँ:
- ब्लूटूथ संचार के लिए प्रोग्रामिंग PIC माइक्रोकंट्रोलर:
- सर्किट आरेख और हार्डवेयर सेटअप:
- ब्लूटूथ मोबाइल एप्लिकेशन का उपयोग करके एलईडी को नियंत्रित करना:
इस ट्यूटोरियल में हम सीखेंगे कि ब्लूटूथ मॉड्यूल (HC-06) को इंटरफेज करके PIC प्रोजेक्ट्स को वायरलेस कैसे बनाया जाए। हमारे पिछले ट्यूटोरियल में हमने पहले ही सीख लिया है कि हमारे PIC माइक्रोकंट्रोलर में USART मॉड्यूल का उपयोग कैसे करें और PIC और कंप्यूटर के बीच संचार स्थापित करें। यदि आप एक पूर्ण शुरुआत हैं, तो हमारे सभी PIC ट्यूटोरियल्स के लिए यहां देखें, जहां हमने स्क्रैच से शुरुआत की है, जैसे MPLAB और XC8 सीखना, एलईडी, एलसीडी को बदलना, टाइमर, एडीसी, पीडब्लूएम आदि का उपयोग करना।
यहां, हमने लोकप्रिय ब्लूटूथ मॉड्यूल HC-06 का उपयोग किया है । इस मॉड्यूल का उपयोग करके हम अपने PIC MCU से मोबाइल एप्लिकेशन या कंप्यूटर पर वायरलेस तरीके से सूचना प्राप्त कर सकते हैं और भेज सकते हैं। PIC माइक्रोकंट्रोलर में मौजूद USART मॉड्यूल का उपयोग करके PIC और HC-06 के बीच संचार स्थापित किया गया है। आप HC-05 का उपयोग भी कर सकते हैं। हम फिर से उसी एसिंक्रोनस 8-बिट मोड पर काम करते हैं, लेकिन इस बार हम अपने कोड को थोड़ा संशोधित करेंगे ताकि यह ब्लूटूथ मॉड्यूल के साथ काम करे। इसलिए UART के ट्यूटोरियल को पहले से सीखना इस प्रोजेक्ट के लिए अतिरिक्त लाभ है।
इस ट्यूटोरियल में, हम अपने स्मार्ट फोन से कमांड को चालू या बंद करके एक एलईडी चालू करेंगे । हम ब्लूटूथ टर्मिनल नामक एक एंड्रॉइड एप्लिकेशन का उपयोग करेंगे जो ब्लूटूथ पर डेटा भेज और प्राप्त कर सकते हैं। यदि हम ऐप से एक '1' भेजते हैं तो प्रकाश PIC बोर्ड में चालू हो जाएगा और हमें फोन पर एक पावती मिल जाएगी कि प्रकाश चालू हो गया है। इसी तरह हम इसे बंद करने के लिए फोन से '0' भेज सकते हैं। इस तरह हम UART के ट्यूटोरियल के समान, लेकिन अब वायरलेस तरीके से, अपने PIC बोर्ड पर LED लाइट को नियंत्रित कर सकते हैं। पूरा कार्यक्रम और विस्तृत वीडियो इस ट्यूटोरियल के अंत में दिया गया है।
सेटअप के लिए मूल ब्लॉक आरेख नीचे दिखाया गया है।
आवश्यकताएँ:
हार्डवेयर:
- PIC16F877A परफेक्ट बोर्ड
- HC-05 या HC-06 ब्लूटूथ मॉड्यूल
- कंप्यूटर (प्रोग्रामिंग के लिए)
- मोबाइल फोन
- PICkit 3 प्रोग्रामर
सॉफ्टवेयर:
- MPLABX
- ब्लूटूथ टर्मिनल (मोबाइल एप्लिकेशन)
ब्लूटूथ मॉड्यूल HC-06:
ब्लूटूथ निम्नलिखित दो मोड में काम कर सकता है:
- कमांड मोड
- ऑपरेटिंग मोड
में कमान मोड हम ब्लूटूथ सिग्नल के नाम की तरह ब्लूटूथ प्रॉपर्टी कॉन्फ़िगर करने में सक्षम हो जाएगा, उसका पासवर्ड, ऑपरेटिंग बॉड दर आदि ऑपरेटिंग मोड एक जिसमें हम भेजने में सक्षम हो सकता है और पीआईसी Microcontroller के बीच डेटा प्राप्त होगा और ब्लूटूथ मॉड्यूल। इसलिए इस ट्यूटोरियल में हम केवल ऑपरेटिंग मोड के साथ ही रहेंगे। कमांड मोड को डिफ़ॉल्ट सेटिंग्स पर छोड़ दिया जाएगा। डिवाइस का नाम HC-05 होगा (मैं HC-06 का उपयोग कर रहा हूं) और पासवर्ड 0000 या 1234 होगा और सबसे महत्वपूर्ण बात यह है कि सभी ब्लूटूथ मॉड्यूल के लिए डिफ़ॉल्ट बॉड दर 9600 होगी।
मॉड्यूल 5V आपूर्ति पर काम करता है और संकेत पिन 3.3V पर काम करता है, इसलिए 3.3V नियामक मॉड्यूल में ही मौजूद है। इसलिए हमें इसकी चिंता करने की जरूरत नहीं है। छह पिनों में से केवल चार का उपयोग ऑपरेटिंग मोड में किया जाएगा। पिन कनेक्शन तालिका नीचे दिखाई गई है
एस.एन.ओ. |
HC-05 / HC-06 पर पिन करें |
MCU पर पिन नाम |
पीआईसी में पिन नंबर |
1 |
Vcc |
Vdd |
31 सेंट पिन |
२ |
Vcc |
गाण्ड |
32 एन डी पिन |
३ |
टेक्सास |
आरसी 6 / टीएक्स / सीके |
25 वें पिन |
४ |
आरएक्स |
आरसी 7 / आरएक्स / डीटी |
26 वें पिन |
५ |
राज्य |
एनसी |
एनसी |
६ |
एन (सक्षम करें) |
एनसी |
एनसी |
अन्य माइक्रोकंट्रोलर्स के साथ ब्लूटूथ मॉड्यूल HC-05 के बारे में अधिक जानने के लिए हमारी अन्य परियोजनाओं की जाँच करें:
- Arduino का उपयोग कर ब्लूटूथ नियंत्रित खिलौना कार
- 8051 का उपयोग कर ब्लूटूथ नियंत्रित होम ऑटोमेशन सिस्टम
- रास्पबेरी पाई का उपयोग करके आवाज नियंत्रित रोशनी
- स्मार्ट फोन Arduino और प्रसंस्करण का उपयोग कर एफएम रेडियो नियंत्रित
- G-Sensor और Arduino का उपयोग करके मोबाइल फ़ोन नियंत्रित रोबोट कार
ब्लूटूथ संचार के लिए प्रोग्रामिंग PIC माइक्रोकंट्रोलर:
सभी मॉड्यूल (ADC, टाइमर, PWM) की तरह हमें भी अपने ब्लूटूथ मॉड्यूल को इनिशियलाइज़ करना चाहिए। आरंभीकरण UART के आरंभीकरण के समान होगा लेकिन हमें अपने PIC16F877A MCU के साथ ब्लूटूथ को दोषपूर्ण तरीके से काम करने के लिए कुछ बदलाव करने की आवश्यकता है । चलो कॉन्फ़िगरेशन बिट्स को परिभाषित करते हैं और ब्लूटूथ आरंभीकरण फ़ंक्शन के साथ शुरू करते हैं।
आरंभिक ब्लूटूथ:
बाजार में लगभग सभी ब्लूटूथ मॉड्यूल 9600 की बॉड दर पर काम करते हैं, यह आपके बॉड रेट को सेट करने के लिए बहुत ही महत्वपूर्ण है, क्योंकि ब्लूटूथ मॉड्यूल बॉड रेट को संचालित करते हैं, यहाँ हम SPBRG = 129 सेट करते हैं क्योंकि हम 20Mhz आवृत्ति के साथ काम कर रहे हैं 9600 बॉड दर के रूप में। इसलिए उपरोक्त आरंभिकता केवल 9600 बॉड दर पर काम करने वाले ब्लूटूथ मॉड्यूल के लिए काम करेगी। उच्च गति बॉड दर बिट BRGH सक्षम होना भी अनिवार्य है। यह एक सटीक बॉड दर निर्धारित करने में मदद करेगा।
// ****** USART का उपयोग करके ब्लूटूथ को प्रारंभ करें ******** // शून्य प्रारंभ करें_Bluaxy () {// RX और TX के पिन सेट करें // TRISC6 = 1; TRISC7 = 1; // डेटशीट (pg114) में तालिका का उपयोग करके बॉड दर निर्धारित करें (BRGH = 1); // हमेशा ब्लूटूथ के साथ उच्च गति बॉड दर का उपयोग करें अन्यथा यह एसपीबीआरजी = 129 पर काम नहीं करेगा; // Asyc चालू करें। सीरियल पोर्ट // SYNC = 0; एसपीएन = 1; // सेट 8-बिट रिसेप्शन और ट्रांसमिशन RX9 = 0; TX9 = 0; // ट्रांसमिशन और रिसेप्शन सक्षम करें // TXEN = 1; CREN = 1; // वैश्विक और ph सक्षम करें। व्यवधान // GIE = 1; PEIE = 1; // Tx के लिए इंटरप्ट को सक्षम करें। और Rx.// RCIE = 1; TXIE = 1; } // ___________ बीटी आरंभीकृत _____________ //
यदि आपके पास एक बीटी मॉड्यूल है जो एक अलग बॉड दर पर संचालित होता है, तो आप एसपीबीआरजी के लिए अपने मूल्य का पता लगाने के लिए नीचे दी गई तालिका देख सकते हैं।
ब्लूटूथ में डेटा लोड हो रहा है:
एक बार फ़ंक्शन आरंभ होने के बाद, ब्लूटूथ से डेटा भेजने और प्राप्त करने के लिए हमारे कार्यक्रम में तीन कार्य होते हैं। UART के विपरीत, डेटा को प्रसारित करने या प्राप्त करने से पहले हमारे पास यहाँ पर कुछ चीजें हैं। ब्लूटूथ मॉड्यूल में इसके अंदर एक ट्रांसमिट और रिसीव बफर होता है, इसे भेजे गए डेटा को टीएक्स बफर में संग्रहीत किया जाएगा। इस डेटा को तब तक प्रसारित नहीं किया जाएगा (जब तक कि इसे हवा में न भेजा जाए) जब तक कि गाड़ी को मॉड्यूल पर नहीं भेजा जाता है। इसलिए डेटा ट्रांसमिट करने के लिए हमें बीटी के आरएक्स बफर को लोड करना होगा और फिर कैरेज रिटर्न का उपयोग करके इसे प्रसारित करना होगा।
उपरोक्त कार्यों का उपयोग करके उपरोक्त कार्य आसानी से प्राप्त किया जा सकता है। नीचे दिए गए फ़ंक्शन का उपयोग तब किया जा सकता है जब हमें Rx बफर में केवल एक वर्ण लोड करना होगा । हम डेटा को TXREG रजिस्टर में लोड करते हैं और तब तक प्रतीक्षा करते हैं जब तक कि यह लूप्स का उपयोग करके ध्वज TXIF और TRMT पर चेक द्वारा संसाधित न हो जाए।
// ब्लूटूथ आरएक्स को लोड करने का कार्य। एक char.// void के साथ बफर BT_load_char (चार बाइट) {TXREG = बाइट; जबकि (TXIF); जबकि (TRMT); } // समारोह का अंत //
नीचे फ़ंक्शन का उपयोग ब्लूटूथ मॉड्यूल के आरएक्स बफर में एक स्ट्रिंग को लोड करने के लिए किया जाता है । स्ट्रिंग को वर्णों में विभाजित किया गया है और प्रत्येक वर्ण को BT_load_char () फ़ंक्शन पर भेजा गया है ।
// ब्लूटूथ आरएक्स लोड करने का कार्य। स्ट्रिंग के साथ बफर // शून्य BT_load_string (चार * स्ट्रिंग) {जबकि (* स्ट्रिंग) BT_load_char (* स्ट्रिंग स्ट्रिंग); } // समारोह का अंत /
ब्लूटूथ पर प्रसारण डेटा:
अब तक हमने HC-05 मॉड्यूल के Rx बफर में सिर्फ सूचना प्रसारित की है। अब हमें इस फ़ंक्शन का उपयोग करके डेटा को हवा में प्रसारित करने का निर्देश देना चाहिए।
// आरएक्स से डेटा प्रसारित करने का कार्य। बफर // शून्य प्रसारण_टी () {TXREG = 13; __delay_ms (500); } // समारोह का अंत //
इस फ़ंक्शन में हम TXREG रजिस्टर में एक मान 13 भेजते हैं। यह मान 13 कुछ भी नहीं है लेकिन गाड़ी के लिए दशमलव बराबर है (ASCII चार्ट देखें)। फिर ब्रॉडकास्टर को शुरू करने के लिए एक छोटी सी देरी बनाई जाती है।
ब्लूटूथ से डेटा पढ़ना:
UART के समान, ब्लूटूथ से डेटा पढ़ने के लिए नीचे फ़ंक्शन का उपयोग किया जाता है
// बीटी के Rx.buffer से चार्ट प्राप्त करने के लिए फ़ंक्शन // char BT_get_char (शून्य) {if (OERR) // ओवर रन त्रुटि की जांच करें {CREN = 0; CREN = 1; // रीसेट CREN} यदि (RCIF == 1) // यदि उपयोगकर्ता ने एक चार-चार (ASCII मूल्य) चार-बार रिटर्न भेजा है, जबकि (आरसीआईएफ); RCREG वापस; } और // अगर उपयोगकर्ता ने कोई संदेश नहीं भेजा है 0 रिटर्न 0; } // समारोह का अंत /
यदि उपयोगकर्ता ने एक डेटा भेजा है, तो यह फ़ंक्शन उस विशेष डेटा को लौटा देगा जिसे एक चर में बचाया जा सकता है और संसाधित किया जा सकता है। यदि उपयोगकर्ता ने कुछ भी नहीं भेजा है, तो फ़ंक्शन शून्य वापस आ जाएगा।
मुख्य कार्य:
हमने ऊपर या मुख्य फ़ंक्शन के सभी ऊपर वर्णित कार्यों का उपयोग किया है। हम कुछ परिचयात्मक संदेश भेजते हैं और फिर उपयोगकर्ता को कुछ मान भेजने के लिए प्रतीक्षा करते हैं जिसके आधार पर हम अपने परफ़ेक्ट बोर्ड पर आरबी 3 पिन से जुड़ी लाल एलईडी लाइट को टॉगल करते हैं।
शून्य मुख्य (शून्य) {// स्कोप वैरिएबल घोषणाएं // int get_value; // चर घोषणा का अंत // // I / O घोषणाएं // TRISB3 = 0; // I / O घोषणा का अंत // Initialize_Bluaxy (); // हमारे ब्लूटूथ को एक्शन के लिए तैयार करने देता है // पावर अप पर एक बार कुछ परिचयात्मक संदेश दिखाएं // BT_load_string ("ब्लूटूथ इनिशियलाइज़्ड एंड रेडी"); प्रसारण_बीटी (); BT_load_string ("एलईडी चालू करने के लिए 1 दबाएं"); प्रसारण_बीटी (); BT_load_string ("एलईडी बंद करने के लिए 0 दबाएं"); प्रसारण_बीटी (); // संदेश का अंत // जबकि (1) // अनंत लोप {get_value = BT_get_char (); // चार पढ़ें। बीटी के माध्यम से प्राप्त // अगर हम एक '0' // प्राप्त करते हैं, तो (get_value == '0') {RB3 = 0; BT_load_string ("एलईडी बंद हो गया"); प्रसारण_बीटी (); } // अगर हमें '1' // मिलता है, तो (get_value == '1') {RB3 = 1; BT_load_string ("एलईडी चालू"); प्रसारण_बीटी ();}}}
नीचे दिए गए कोड अनुभाग में पूर्ण कार्यक्रम की जाँच करें ।
सर्किट आरेख और हार्डवेयर सेटअप:
इस परियोजना के लिए सर्किट कनेक्शन बहुत सरल है, हम बस ब्लूटूथ मॉड्यूल को सत्ता में है और टीएक्स 26 से कनेक्ट वें से 25 पीआईसी और Rx की पिन वें के रूप में नीचे सर्किट चित्र में दिखाया गया पीआईसी की पिन:
अब हम हार्डवेयर पर आगे बढ़ते हैं। एक बार कनेक्शन हो जाने के बाद इसे कुछ इस तरह देखना चाहिए।
ब्लूटूथ मोबाइल एप्लिकेशन का उपयोग करके एलईडी को नियंत्रित करना:
अब हम अपने Android एप्लिकेशन को तैयार करते हैं। एप्लिकेशन स्टोर से ब्लूटूथ टर्मिनल नामक एप्लिकेशन डाउनलोड करें या इस लिंक का उपयोग करें। एक बार एप्लिकेशन डाउनलोड और इंस्टॉल हो जाने के बाद, अपने PIC perf बोर्ड को चालू करें जिसे हम शुरुआत से इस्तेमाल कर रहे हैं। आपके ब्लूटूथ मॉड्यूल पर छोटी एलईडी लाइट यह इंगित करने के लिए चमकती होनी चाहिए कि यह चालू है और कनेक्शन स्थापित करने के लिए सक्रिय रूप से फोन की तलाश कर रही है।
अब अपने फोन की ब्लूटूथ सेटिंग्स में जाएं और नए ब्लूटूथ डिवाइस की खोज करें जो आपको अपने मॉड्यूल के आधार पर HC-05 या HC-06 नाम देखने में सक्षम होना चाहिए। मैं HC-06 का उपयोग कर रहा हूं इसलिए मेरा फोन निम्नलिखित डिस्प्ले दिखाता है। फिर इसके साथ पारिंग की कोशिश करें और यह पासवर्ड मांगेगा। पासवर्ड 1234 के रूप में दर्ज करें (कुछ के लिए यह 0000 हो सकता है) और नीचे दिखाए गए अनुसार ठीक पर क्लिक करें।
पैरिंग सफल होने के बाद, ब्लूटूथ टर्मिनल एप्लिकेशन खोलें जिसे हमने अभी स्थापित किया है। सेटिंग विकल्प में जाएं और नीचे दिखाए गए अनुसार "डिवाइस कनेक्ट करें - सिक्योर" चुनें । यह एक पॉप बॉक्स खोलेगा जहां हमारे सभी युग्मित उपकरण नीचे दिखाए गए अनुसार सूचीबद्ध होंगे। HC-05 या HC-06 मॉड्यूल का चयन करें।
एक बार कनेक्शन स्थापित हो जाने के बाद, ब्लूटूथ मॉड्यूल पर प्रकाश जो अब तक चमक रहा था, यह इंगित करने के लिए स्थिर हो गया होगा कि यह आपके मोबाइल से सफलतापूर्वक जुड़ा हुआ है। और हमें अपने प्रोग्राम से परिचयात्मक संदेश प्राप्त करना चाहिए जैसे नीचे दिखाया गया है।
अब एलईडी लाइट चालू करने के लिए '1' दबाएं और प्रकाश बंद करने के लिए '0' दबाएं। पूरा काम वीडियो में दिखाया जाएगा । आपकी मोबाइल स्क्रीन कुछ इस तरह दिखेगी जैसा कि नीचे दिखाया गया है।
तो यह है कि दोस्तों, हमने सीखा है कि कैसे हमारे PIC माइक्रोकंट्रोलर को ब्लूटूथ मॉड्यूल को इंटरफ़ेस करना है, अब इसकी मदद से हम वायरलेस प्रोजेक्ट की कोशिश कर सकते हैं। बहुत सारी परियोजनाएं हैं जो ब्लूटूथ का उपयोग करती हैं, आप उन्हें आज़मा सकते हैं या अपने स्वयं के आइडिया के साथ आ सकते हैं और उन्हें टिप्पणी अनुभाग में साझा कर सकते हैं। इसके अलावा ब्लूटूथ टर्मिनल ऐप और HC-05 जैसे स्मार्ट फोन नियंत्रित होम ऑटोमेशन का उपयोग करके Arduino और Arduino का उपयोग करके स्मार्ट फोन नियंत्रित डिजिटल कोड लॉक के साथ हमारे पिछले प्रोजेक्ट की जांच करें।
आशा है, इस ट्यूटोरियल ने आपकी मदद की! यदि आप कहीं फंस गए हैं, तो कृपया टिप्पणी अनुभाग का उपयोग करें।