- ब्लूटूथ संचार के लिए आवश्यक संकुल स्थापित करना:
- ब्लूटूथ पर रास्पबेरी पाई के साथ युग्मन उपकरण:
- खिलौना कार का चयन:
- सर्किट आरेख और स्पष्टीकरण:
- एंड्रॉइड ऐप BlueTerm के साथ रिमोट से कार को नियंत्रित करना:
- पायथन प्रोग्रामिंग:
रास्पबेरी पाई IoT परियोजनाओं के लिए बहुत लोकप्रिय है क्योंकि इसकी इंटरनेट पर वायरलेस संचार की सहज क्षमता है। रास्पबेरी पाई 3 में इनबिल्ट वाई-फाई और ब्लूटूथ है, और ब्लूटूथ एक बहुत लोकप्रिय वायरलेस संचार प्रोटोकॉल है। आज हम रास्पबेरी पाई 3 और ब्लूटूथ का उपयोग करके एक रिमोट कंट्रोल्ड कार बनाने जा रहे हैं , यहां हम कार को नियंत्रित करने के लिए रिमोट के रूप में स्मार्ट फोन का उपयोग करेंगे । हमने पहले Arduino का उपयोग करके इस RC कार को बनाया है।
यहां हम रास्पबेरी पाई 3 का उपयोग कर रहे हैं, जिसमें इनबिल्ट ब्लूटूथ है, इसलिए हमें किसी भी बाहरी यूएसबी ब्लूटूथ डोंगल का उपयोग करने की आवश्यकता नहीं है। यहां हम वायरलेस संचार के लिए RFCOMM ब्लूटूथ प्रोटोकॉल का उपयोग कर रहे हैं।
पायथन में ब्लूटूथ के लिए प्रोग्रामिंग सॉकेट प्रोग्रामिंग मॉडल का अनुसरण करता है और ब्लूटूथ उपकरणों के बीच संचार RFCOMM सॉकेट के माध्यम से किया जाता है। RFCOMM (रेडियो फ्रिक्वेंसी कम्युनिकेशन) एक ब्लूटूथ प्रोटोकॉल है जो कि RS-232 सीरियल पोर्ट प्रदान करता है और इसे सीरियल पोर्ट एमुलेशन भी कहा जाता है। ब्लूटूथ सीरियल पोर्ट प्रोफाइल इस प्रोटोकॉल पर आधारित है। RFCOMM अपने व्यापक समर्थन और publically उपलब्ध API के कारण ब्लूटूथ अनुप्रयोगों में बहुत लोकप्रिय है। यह L2CAP प्रोटोकॉल के लिए बाध्य है।
यदि आपके पास रास्पबेरी पाई 2 है, तो आपको या तो बाहरी ब्लूटूथ डोंगल या ब्लूटूथ मॉड्यूल एचसी -06 का उपयोग करना होगा। इन बाहरी ब्लूटूथ डिवाइसों का उपयोग करने के लिए हमारी पिछली परियोजनाओं की जांच करें: ब्लूटूथ पर एंड्रॉइड ऐप का उपयोग करके रास्पबेरी पाई जीपीआईओ को नियंत्रित करना और रास्पबेरी पाई को अन्य घरेलू उपकरणों को नियंत्रित करना।
ब्लूटूथ संचार के लिए आवश्यक संकुल स्थापित करना:
शुरू करने से पहले, हमें रास्पबेरी पाई में ब्लूटूथ संचार स्थापित करने के लिए कुछ सॉफ़्टवेयर स्थापित करने की आवश्यकता है । आपके पास रास्पबेरी पाई के साथ एक रास्पियन जेसी स्थापित मेमोरी कार्ड होना चाहिए। रास्पबियन ओएस को स्थापित करने के लिए इस लेख को देखें और रास्पबेरी पाई के साथ शुरुआत करें। तो अब हमें सबसे पहले नीचे दिए गए आदेशों का उपयोग करके रास्पियन को अपडेट करना होगा:
sudo apt-get update sudo apt-get उन्नयन
फिर हमें कुछ ब्लूटूथ से संबंधित पैकेजों को स्थापित करने की आवश्यकता है:
sudo apt-get install ब्लूटूथ ब्लूटूथ ब्लूज़
फिर रास्पबेरी पाई को रिबूट करें:
सूद रिबूट
ब्लूज़ एक ओपन सोर्स प्रोजेक्ट और आधिकारिक लिनक्स ब्लूटूथ प्रोटोकॉल स्टैक है। यह सभी कोर ब्लूटूथ प्रोटोकॉल का समर्थन करता है और अब आधिकारिक लिनक्स कर्नेल का हिस्सा बन गया है।
ब्लूमैन ब्लूटूथ डिवाइस को प्रबंधित और नियंत्रित करने के लिए डेस्कटॉप इंटरफ़ेस प्रदान करता है।
अंत में हमें ब्लूटूथ संचार के लिए अजगर लाइब्रेरी की आवश्यकता है ताकि हम पायथन भाषा का उपयोग करके RFCOMM के माध्यम से डेटा भेज और प्राप्त कर सकें:
sudo apt-get install अजगर-ब्लूटूथ
रास्पबेरी पाई के लिए GPIO समर्थन लाइब्रेरी भी स्थापित करें:
sudo apt-get Install python-rpi.gpio
अब हम रास्पबेरी पाई में ब्लूटूथ संचार के लिए आवश्यक पैकेज स्थापित करने के साथ किया जाता है।
ब्लूटूथ पर रास्पबेरी पाई के साथ युग्मन उपकरण:
रास्पबेरी पाई के साथ, मोबाइल फोन की तरह, ब्लूटूथ डिवाइस को बाँधना बहुत आसान है। यहाँ हमने अपना Android Smart Phone रास्पबेरी पाई के साथ जोड़ा है । हमने पहले Pi में BlueZ स्थापित किया है, जो हमारे ब्लूटूथ डिवाइस को प्रबंधित करने के लिए "bluetoothctl" नामक एक कमांड लाइन उपयोगिता प्रदान करता है।
अब नीचे दिए गए आदेश द्वारा bluetoothctl उपयोगिता खोलें:
सुडो ब्लूटूथ
आप 'हेल्प' लिखकर bluetoothctl यूटिलिटी के सभी कमांड चेक कर सकते हैं । अभी के लिए हमें दिए गए क्रम में नीचे कमांड दर्ज करने की आवश्यकता है:
# पावर ऑन # एजेंट ऑन # सर्चेबल ऑन # पेराईबल ऑन # स्कैन
अंतिम कमांड "स्कैन ऑन" के बाद, आपको सूची में अपना ब्लूटूथ डिवाइस (मोबाइल फोन) दिखाई देगा। सुनिश्चित करें कि आपका मोबाइल ब्लूटूथ चालू है और पास के उपकरणों द्वारा दिखाई दे रहा है। फिर आप डिवाइस के मैक पते को कॉपी करें और दिए गए कमांड का उपयोग करके इसे जोड़े:
जोड़ा
फिर आपको अपने टर्मिनल कंसोल में पासकोड या पिन के लिए संकेत दिया जाएगा और फिर वहां पासकोड टाइप करें और एंटर दबाएं। जब संकेत दिया जाए तो अपने मोबाइल फोन में उसी पासकोड को टाइप करें और अब आपको रास्पबेरी पाई के साथ सफलतापूर्वक जोड़ा जाएगा। हमने इस पूरी प्रक्रिया को पिछले GPIO कंट्रोलिंग ट्यूटोरियल में दिए गए वीडियो में भी समझाया है। यहाँ सीधा YouTube लिंक दिया गया है।
जैसा कि पहले बताया गया है, आप मोबाइल फोन को पेयर करने के लिए डेस्कटॉप इंटरफेस का भी उपयोग कर सकते हैं । ब्लूमैन को स्थापित करने के बाद, आपको नीचे दिखाए गए अनुसार रास्पबेरी पाई डेस्कटॉप के दाईं ओर एक ब्लूटूथ आइकन दिखाई देगा, जिसका उपयोग करके आप आसानी से युग्मन कर सकते हैं।
खिलौना कार का चयन:
इस रास्पबेरी पाई नियंत्रित कार परियोजना में हमने प्रदर्शन के लिए एक खिलौना कार का उपयोग किया है। यहां हमने एक आरएफ टॉय कार को लेफ्ट-राइट स्टीयरिंग फीचर के साथ चुना है। इस कार को खरीदने के बाद हमने इसके आरएफ सर्किट को हमारे रास्पबेरी सर्किट से बदल दिया है। इस कार में दो डीसी मोटर हैं, एक को दो फ्रंट व्हील को घुमाने के लिए और दूसरे को दो रियर व्हील को घुमाने के लिए है। फ्रंट साइड मोटर का उपयोग कार को दिशा देने के लिए किया जाता है जिसका अर्थ है बाईं या दाईं ओर मुड़ना (जैसे वास्तविक कार स्टीयरिंग सुविधा)। और आगे और पीछे की दिशा में कार चलाने के लिए रियर साइड मोटर का उपयोग किया जाता है। रास्पबेरी के एक ब्लूटूथ का उपयोग कार को नियंत्रित करने के लिए एंड्रॉइड फोन से वायरलेस तरीके से कमांड प्राप्त करने के लिए किया जाता है।
आप किसी भी टॉय कार का इस्तेमाल कर सकते हैं जिसमें फ्रंट और रियर व्हील को घुमाने के लिए दो डीसी मोटर्स हैं।
सर्किट आरेख और स्पष्टीकरण:
इस रिमोट कंट्रोल्ड कार में, हमें केवल L293D मॉड्यूल का उपयोग करके रास्पबेरी पाई को दो मोटर्स से जोड़ने की आवश्यकता है । रास्पबेरी पाई और कार को पावर देने के लिए हमने एक मोबाइल पावर बैंक का इस्तेमाल किया है। मोबाइल पावर बैंक रास्पबेरी पाई और कार की मोटरों को पावर देने के लिए पर्याप्त है लेकिन जब हम कार पर पावर बैंक लगाते हैं तो मोबाइल पावर बैंक के भारी वजन के कारण यह ठीक से नहीं चल पाएगा। इसलिए हम सिस्टम को पावर देने के लिए लो वेट पावर सप्लाई या लिथियम बैटरी का इस्तेमाल करने की सलाह देते हैं। सभी कनेक्शन नीचे दिए गए सर्किट आरेख में दिखाए गए हैं। विभिन्न तकनीकों के साथ मोटर्स को नियंत्रित करने के बारे में अधिक जानने के लिए हमारे रोबोटिक्स अनुभाग की भी जांच करें।
नोट: रास्पबेरी पाई को 5v से अधिक न डालें।
इस प्रोजेक्ट के लिए परफेक्ट बोर्ड पर यह सर्किट बनाया गया है, ताकि गाड़ी पर कम भार पड़े।
एंड्रॉइड ऐप BlueTerm के साथ रिमोट से कार को नियंत्रित करना:
अब सभी चीजों को सेट करने और सफलतापूर्वक ब्लूटूथ पर स्मार्ट फोन को पार करने की कोशिश करने के बाद, हमें एक ब्लूटूथ सीरियल एडेप्टर का उपयोग करके रास्पबेरी पाई के साथ संचार करने के लिए एक एंड्रॉइड ऐप स्थापित करने की आवश्यकता है , ताकि हम रास्पबेरी पाई के जीपीओ पिन को नियंत्रित कर सकें। जैसा कि पहले बताया गया था कि RFCOMM / SPP प्रोटोकॉल ब्लूटूथ पर धारावाहिक संचार का अनुकरण करता है, इसलिए हमने यहाँ BlueTerm App स्थापित किया जो इस प्रोटोकॉल का समर्थन करता है।
आप किसी अन्य ब्लूटूथ टर्मिनल ऐप का भी उपयोग कर सकते हैं जो RFCOMM सॉकेट के माध्यम से संचार का समर्थन करता है।
BlueTerm App को डाउनलोड करने और इंस्टॉल करने के बाद, टर्मिनल से नीचे दिए गए पायथन प्रोग्राम को चलाएं और उसी समय BlueTerm App से युग्मित रास्पबेरी डिवाइस को कनेक्ट करें ।
सफल कनेक्शन के बाद आप कनेक्टेड दिखाई देंगे : ऐप के शीर्ष दाएं कोने पर raspberrypi जैसा कि नीचे दिखाया गया है:
अब आप बस वांछित दिशा में कार को आगे बढ़ाने के लिए ब्लूटर्म ऐप से निम्न कमांड दर्ज कर सकते हैं । प्रोग्राम से बाहर निकलने के लिए 'q' दबाएं। आप अपनी आवाज़ का उपयोग करके इस कार को नियंत्रित करने के लिए Google वॉइस टाइपिंग कीबोर्ड का उपयोग कर सकते हैं। अंत में दिए गए वीडियो में पूरा डेमो देखें ।
आदेश:
एफ - आगे बढ़ना
बी - बैकवर्ड मूव
एस - बंद करो
एल - फॉरवर्ड लेफ्ट मूव
आर - फॉरवर्ड राइट मूव
ए - बैकवर्ड लेफ्ट मूव
पी - बैकवर्ड राइट मूव
क्यू - छोड़ो
पायथन प्रोग्रामिंग:
एंड्रॉइड ऐप के साथ रास्पबेरी पाई GPIO को नियंत्रित करने के लिए पायथन कार्यक्रम बहुत सरल और आत्म-व्याख्यात्मक है। केवल हमें ब्लूटूथ RFCOMM संचार से संबंधित कोड के बारे में थोड़ा जानने की जरूरत है। वरना इसके समान ही किसी भी रोबोट या कार को मोटर के पिन को उच्च या निम्न बनाकर नियंत्रित करना। पूरा कार्यक्रम नीचे कोड अनुभाग में दिया गया है।
सबसे पहले, हमें ब्लूटूथ सॉकेट लाइब्रेरी को आयात करने की आवश्यकता है जो हमें पायथन भाषा के साथ ब्लूटूथ को नियंत्रित करने में सक्षम बनाती है; हमने पिछले अनुभाग में उसी के लिए पुस्तकालय स्थापित किया है।
आयात ब्लूटूथ
फिर हमने कुछ और हेडर फाइलें शामिल कीं और मोटरों के लिए पिन को परिभाषित करते हुए उन्हें डिफ़ॉल्ट रूप से कम रखा।
आयात ब्लूटूथ आयात समय आयात RPI.GPIO GPIO m11 = 18 m12 = 23 m21 = 24 m22 = 25 GPIO.setwarnings (गलत) GPIO.setmode (GPIO.BCM) GPIO.setup (m11, GPIO.OUT) GPIO.setup () GP GPIO.output (m22, 0)
नीचे ब्लूटूथ संचार के लिए जिम्मेदार कोड है:
server_socket = bluetooth.BluaxySocket (bluetooth.RFCOMM) port = 1 server_socket.bind (("", port)) server_socket.listen (1) client_socket, पता = server_socket.accept () प्रिंट "से स्वीकार किए गए कनेक्शन", पता।
यहाँ हम उन्हें लाइन से समझ सकते हैं:
server_socket = bluetooth.BluaxySocket (bluetooth.RFCOMM): ब्लूटूथ RFCOMET संचार के लिए सॉकेट बनाना।
server_socket.bind (("", port): - सर्वर होस्ट '' को स्क्रिप्ट को पोर्ट में बांधता है।
server_socket.listen (1): सर्वर एक समय में एक कनेक्शन स्वीकार करने के लिए सुनता है।
client_socket, पता = server_socket.accept (): सर्वर क्लाइंट के कनेक्शन अनुरोध को स्वीकार करता है और मैक पते को चर पते पर असाइन करता है, client_socket क्लाइंट का सॉकेट है
इसके बाद हमने कुछ कार्य बनाए हैं जो वांछित दिशा में चलती कार के लिए ज़िम्मेदार हैं: def_side_forward (), def right_side_forward (), def आगे (), def left_side_reverse (), def right_side_reverse (), def रिवर्स () def रोकें () को रोकें।) का है। जब हम L, R, F, A, P, B, S को मोबाइल ब्लूटर्म ऐप से दबाएंगे तो ये फंक्शन क्रमशः कहलाएँगे और कार उसी के अनुसार आगे बढ़ेगी।
डेटा = "" जबकि 1: डेटा = client_socket.recv (1024) प्रिंट "प्राप्त:% s"% डेटा यदि (डेटा == "एफ"): फॉरवर्ड () एलिफ (डेटा == "एल"): लेफ्ट-साइड_फोवर्ड () elif (data == "R"): right_side_forward () elif (data == "B"): रिवर्स () elif (data == "A"): left_side_reverse () elif (data == "P"): right_side_reverse () एलीफ डेटा == "एस": स्टॉप () एलिफ (डेटा == "क्यू"): प्रिंट ("छोड़ो") क्लाइंट_सोकेट.क्लास () server_socket.close () को तोड़ें
data = client_socket.recv (1024): क्लाइंट सॉकेट client_socket के माध्यम से डेटा प्राप्त करें और इसे चर डेटा पर असाइन करें। एक बार में अधिकतम 1024 वर्ण प्राप्त किए जा सकते हैं।
अंत में, सभी प्रोग्रामिंग के बाद, नीचे दिए गए कोड का उपयोग करके क्लाइंट और सर्वर कनेक्शन को बंद करें:
client_socket.close () server_socket.close ()