- NRF24L01 RF मॉड्यूल
- सर्किट आरेख
- रास्पबेरी पाई प्रोग्रामिंग करने के लिए nRF24l01 का उपयोग कर संदेश भेजें
- प्रोग्रामिंग Arduino UNO को nRF24l01 का उपयोग करके संदेश प्राप्त करने के लिए
डिजाइनर ब्लूटूथ कम ऊर्जा (BLE 4.0), Zigbee, ESP8266 वाई-फाई मॉड्यूल, 433 मेगाहर्ट्ज आरएफ मॉड्यूल, लोरा, nRF आदि जैसे कई वायरलेस संचार प्रणालियों का उपयोग करते हैं और माध्यम का चयन उस अनुप्रयोग के प्रकार पर निर्भर करता है जिसमें इसका उपयोग किया जा रहा है। सभी, स्थानीय नेटवर्क संचार के लिए एक लोकप्रिय वायरलेस माध्यम nRF24L01 है । ये मॉड्यूल 250GHz से 2Mbps तक बॉड दर के साथ 2.4GHz (ISM बैंड) पर काम करते हैं जो कई देशों में कानूनी है और इसका उपयोग औद्योगिक और चिकित्सा अनुप्रयोगों में किया जा सकता है। यह भी दावा किया जाता है कि उचित एंटेना के साथ ये मॉड्यूल अपने बीच 100 मीटर की दूरी तक सिग्नल संचारित और प्राप्त कर सकते हैं। हमने पहले सर्वो मोटर को नियंत्रित करने और एक चैट रूम बनाने के लिए Arduino के साथ nRF24L01 का उपयोग किया था।
यहां हम उनके बीच एक वायरलेस संचार स्थापित करने के लिए Arduino UNO और रास्पबेरी पाई के साथ nRF24L01 - 2.4GHz RF ट्रांसीवर मॉड्यूल का उपयोग करेंगे । रास्पबेरी पाई एक ट्रांसमीटर के रूप में कार्य करेगी और Arduino Uno रास्पबेरी पाई को सुनेगा और 16x2 LCD पर nRF24L01 का उपयोग करके रास्पबेरी पाई द्वारा भेजे गए संदेश को प्रिंट करेगा। nRF24L01 में इनबिल्ट BLE क्षमताएं भी हैं और यह BLE का उपयोग करके वायरलेस तरीके से संचार भी कर सकता है।
ट्यूटोरियल को दो खंडों में विभाजित किया गया है। पहले खंड में रिसीवर के रूप में कार्य करने के लिए Arduino के साथ nRF24L01 के इंटरफेसिंग को शामिल किया जाएगा और दूसरे खंड में ट्रांसपेंटर के रूप में कार्य करने के लिए रास्पबेरी पाई के साथ nRF24L01 के इंटरफेस को शामिल किया जाएगा । इस ट्यूटोरियल के अंत में वर्किंग वीडियो के साथ दोनों सेक्शन का पूरा कोड संलग्न किया जाएगा।
NRF24L01 RF मॉड्यूल
NRF24L01 मॉड्यूल हैं ट्रांसीवर मॉड्यूल, प्रत्येक मॉड्यूल अर्थ कर सकते हैं दोनों भेजने और डेटा प्राप्त लेकिन जब से वे कर रहे हैं आधा-डुप्लेक्स वे या तो भेज सकते हैं या एक समय में डेटा प्राप्त कर सकते हैं। मॉड्यूल में नॉर्डिक अर्ध-कंडक्टरों से जेनेरिक nRF24L01 आईसी है जो डेटा के प्रसारण और स्वागत के लिए जिम्मेदार है। आईसी एसपीआई प्रोटोकॉल का उपयोग करके संचार करता है और इसलिए किसी भी माइक्रोकंट्रोलर के साथ आसानी से हस्तक्षेप किया जा सकता है। यह Arduino के साथ बहुत आसान हो जाता है क्योंकि पुस्तकालय आसानी से उपलब्ध हैं। एक मानक nRF24L01 मॉड्यूल के pinouts नीचे दिखाया गया है
मॉड्यूल में ऑपरेटिंग वोल्टेज 1.9 वी से 3.6 वी (आमतौर पर 3.3 वी) है और सामान्य ऑपरेशन के दौरान केवल 12mA की बहुत कम वर्तमान खपत करता है जो इसे बैटरी कुशल बनाता है और इसलिए सिक्का कोशिकाओं पर भी चल सकता है। भले ही ऑपरेटिंग वोल्टेज 3.3V है अधिकांश पिन 5V सहिष्णु हैं और इसलिए Arduino जैसे 5V माइक्रोकंट्रोलर्स के साथ सीधे हस्तक्षेप किया जा सकता है। इन मॉड्यूल का उपयोग करने का एक और लाभ यह है कि, प्रत्येक मॉड्यूल में 6 पाइपलाइन हैं। मतलब, प्रत्येक मॉड्यूल डेटा संचारित या प्राप्त करने के लिए 6 अन्य मॉड्यूल के साथ संवाद कर सकता है। यह मॉड्यूल को IoT अनुप्रयोगों में स्टार या मेष नेटवर्क बनाने के लिए उपयुक्त बनाता है। इसके अलावा, उनके पास 125 विशिष्ट आईडी की एक विस्तृत पता सीमा है, इसलिए एक बंद क्षेत्र में हम एक दूसरे के साथ हस्तक्षेप किए बिना इनमें से 125 मॉड्यूल का उपयोग कर सकते हैं।
सर्किट आरेख
Arduino के साथ nRF24L01:
Arduino के साथ nRF24L01 को जोड़ने के लिए सर्किट आरेख आसान है और इसमें बहुत अधिक घटक नहीं हैं। NRF24L01 एसपीआई इंटरफ़ेस द्वारा जोड़ा जाएगा और 16x2 एलसीडी जो केवल दो तारों का उपयोग करता I2C प्रोटोकॉल के साथ interfaced है।
रास्पबेरी पाई के साथ nRF24L01:
रास्पबेरी पाई के साथ nRF24L01 को जोड़ने के लिए सर्किट आरेख भी बहुत सरल है और केवल रास्पबेरी पाई और nRF24l01 को जोड़ने के लिए SPI इंटरफ़ेस का उपयोग किया जाता है।
रास्पबेरी पाई प्रोग्रामिंग करने के लिए nRF24l01 का उपयोग कर संदेश भेजें
रास्पबेरी पाई का प्रोग्रामिंग पायथन 3 का उपयोग करके किया जाएगा। आप Arduino के रूप में C / C ++ का भी उपयोग कर सकते हैं। लेकिन पहले से ही pRthon में nRF24l01 के लिए एक पुस्तकालय उपलब्ध है जिसे github पेज से डाउनलोड किया जा सकता है। ध्यान दें कि पायथन प्रोग्राम और लाइब्रेरी एक ही फ़ोल्डर में होनी चाहिए या अजगर प्रोग्राम लाइब्रेरी को खोजने में सक्षम नहीं होगा। लाइब्रेरी को डाउनलोड करने के बाद सिर्फ एक्सट्रेक्ट करें और एक फोल्डर बनाएं जहां सभी प्रोग्राम और लाइब्रेरी फाइल्स स्टोर होंगी। जब पुस्तकालय की स्थापना हो जाती है, तो बस प्रोग्राम लिखना शुरू करें। कार्यक्रम पुस्तकालयों को शामिल करने के साथ शुरू होता है जो रास्पबेरी पाई GPIO तक पहुंचने और आयात समय के लिए आयात GPIO पुस्तकालय जैसे कोड में उपयोग किया जाएगा समय संबंधित कार्यों तक पहुँचने के लिए। यदि आप रास्पबेरी पाई के लिए नए हैं तो रास्पबेरी पाई के साथ शुरुआत करने के लिए वापस जाएं।
आयात RPi.GPIO GPIO के रूप में आयात समय lib_nrf24 आयात NRF24 से spidev आयात करता है
जीपीआईओ मोड को " ब्रॉडकॉम एसओसी चैनल" में सेट करें । इसका मतलब है कि आप "ब्रॉडकॉम एसओसी चैनल" नंबर द्वारा पिन का उल्लेख कर रहे हैं, ये "जीपीआईओ" (उदाहरण के लिए जीपीआईओ 01, जीपीआईओ 02)… के बाद के नंबर हैं। ये बोर्ड नंबर नहीं हैं।
GPIO.setmode (GPIO.BCM)
आगे हम इसे पाइप एड्रेस सेट करेंगे । Arduino रिसीवर के साथ संवाद करने के लिए यह पता महत्वपूर्ण है। इसका पता हेक्स कोड में होगा।
पाइप =]
GPIO08 का उपयोग CE और GPIO25 के रूप में CSN पिन के रूप में रेडियो शुरू करें।
रेडियो.बेगिन (0, 25)
पेलोड साइज़ को 32 बिट, चैनल एड्रेस को 76, 1 एमबीपीएस की डेटा दर और न्यूनतम के रूप में पावर स्तर सेट करें।
Radio.setPayloadSize (32) Radio.setChannel (0x76) Radio.setDataRate (NRF24.BR_1MBPS) Radio.setPALevel (NRF24.PA_MIN)
डेटा लिखना शुरू करने के लिए पाइप खोलें और nRF24l01 के मूल विवरण को प्रिंट करें।
Radio.openWritingPipe (पाइप) Radio.printDetails ()
एक संदेश स्ट्रिंग रूप में तैयार करें। यह संदेश Arduino UNO को भेजा जाएगा।
sendMessage = सूची ("Hi..Arduino UNO") जबकि len (sendMessage) <32: sendMessage.append (0)
रेडियो पर लिखना शुरू करें और जब तक रेडियो उपलब्ध न हो, तब तक पूरा स्ट्रिंग लिखते रहें। इसके साथ, समय को नोट करें और संदेश वितरण का एक डिबग स्टेटमेंट प्रिंट करें।
जबकि True: start = time.time () Radio.write (sendMessage) प्रिंट ("संदेश भेजा गया: {}"। format (sendMessage)) Radio.startListening () भेजें
यदि स्ट्रिंग पूरी हो गई है और पाइप बंद है, तो समय समाप्त होने का एक डिबग संदेश प्रिंट करें।
जबकि radio.available नहीं (0): time.sleep (1/100) यदि time.time () - शुरुआत> 2: प्रिंट ("समय समाप्त हो गया।") # प्रिंट त्रुटि संदेश अगर रेडियो काट दिया या अब और काम नहीं कर तोड़
रेडियो सुनना बंद करें और संचार बंद करें और 3 सेकंड के बाद किसी अन्य संदेश को भेजने के लिए संचार को पुनरारंभ करें।
Radio.stopListening () # नज़दीकी रेडियो time.sleep (3) # 3 सेकंड की देरी देता है
रास्पबेरी कार्यक्रम समझने के लिए सरल है यदि आप अजगर की मूल बातें जानते हैं। पूरा पायथन कार्यक्रम ट्यूटोरियल के अंत में दिया गया है।
रास्पबेरी पाई में पायथन कार्यक्रम को निष्पादित करना:
निम्न चरणों का पालन करने के बाद कार्यक्रम को निष्पादित करना बहुत आसान है:
- एक ही फ़ोल्डर में पायथन प्रोग्राम और लाइब्रेरी फ़ाइलों को सहेजें।
- प्रेषक के लिए मेरा प्रोग्राम फ़ाइल नाम nrfsend.py है और यह भी कि हर फाइलें एक ही फ़ोल्डर में हैं
- रास्पबेरी पाई के कमांड टर्मिनल पर जाएं। और "सीडी" कमांड का उपयोग करके अजगर प्रोग्राम फ़ाइल का पता लगाएं।
- फिर फ़ोल्डर खोलें और कमांड लिखें " sudo python3 your_program.py " और hit दर्ज करें। आप nRf24 का मूल विवरण देख पाएंगे और रेडियो हर 3 सेकंड के बाद संदेश भेजना शुरू कर देगा। भेजने के बाद भेजे गए सभी वर्णों के साथ संदेश डिबग प्रदर्शित होगा।
अब हम Arduino UNO में रिसीवर के रूप में एक ही कार्यक्रम देखेंगे।
प्रोग्रामिंग Arduino UNO को nRF24l01 का उपयोग करके संदेश प्राप्त करने के लिए
Arduino UNO की प्रोग्रामिंग रास्पबेरी पाई की प्रोग्रामिंग के समान है। हम इसी तरह के तरीकों का पालन करेंगे लेकिन विभिन्न प्रोग्रामिंग भाषा और चरणों के साथ। चरणों में nRF24l01 का रीडिंग पार्ट शामिल होगा। Arduino के लिए nRF24l01 के लिए पुस्तकालय को github पृष्ठ से डाउनलोड किया जा सकता है। आवश्यक पुस्तकालयों सहित शुरू करें। हम I2C शील्ड का उपयोग करते हुए 16x2 एलसीडी का उपयोग कर रहे हैं ताकि वायर.एच लाइब्रेरी शामिल करें और साथ ही nRF24l01 एसपीआई के साथ हस्तक्षेप किया जाता है इसलिए एसपीआई लाइब्रेरी शामिल करें।
#शामिल
RF24 और LCD कार्यों तक पहुँचने के लिए RF24 और LCD लाइब्रेरी को शामिल करें।
#शामिल
I2C के लिए एलसीडी पता 27 है और यह एक 16x2 एलसीडी है इसलिए इसे फ़ंक्शन में लिखें।
लिक्विड क्रिस्टल_ आई 2 सी एलसीडी (0x27, 16, 2);
RF24 मानक SPI पिन के साथ पिन 9 में और CSN पिन 10 में जुड़ा हुआ है।
RF24 रेडियो (9, 10);
रेडियो शुरू करें, पावर स्तर सेट करें और चैनल को 76 पर सेट करें। पाइप एड्रेस को रास्पबेरी पाई के समान सेट करें और पढ़ने के लिए पाइप खोलें।
Radio.begin (); Radio.setPALevel (RF24_PA_MAX); Radio.setChannel (0x76); const uint64_t पाइप = 0xE0E0F1F1E0LL; Radio.openReadingPipe (1, पाइप);
I2C संचार शुरू करें और एलसीडी डिस्प्ले को इनिशियलाइज़ करें।
तार.बेगिन (); lcd.begin (); lcd.home (); lcd.print ("प्राप्त करने के लिए तैयार");
आने वाले संदेशों के लिए रेडियो सुनना शुरू करें और संदेश की लंबाई 32 बाइट्स के रूप में सेट करें।
Radio.startListening (); char प्राप्त संदेश = {0}
यदि रेडियो संलग्न है तो संदेश पढ़ना शुरू करें और इसे सहेजें। संदेश को सीरियल मॉनीटर पर प्रिंट करें और अगले संदेश आने तक डिस्प्ले पर भी प्रिंट करें। कुछ अंतराल के बाद सुनने और पुन: प्रयास करने के लिए रेडियो बंद करें। यहां यह 10 माइक्रो सेकंड है।
if (Radio.available ()) { Radio.read (प्राप्त मेसेज, sizeof (प्राप्त मेसेजेज)); धारावाहिक.प्रदर्शन (प्राप्त मेसेज); Serial.println ("रेडियो बंद कर रहा है।"); Radio.stopListening (); स्ट्रिंग stringMessage (ReceMessage); lcd.clear (); देरी (1000); lcd.print (stringMessage); }
Arduino UNO के अंत में दिया गया पूरा कोड अपलोड करें और संदेश प्राप्त होने की प्रतीक्षा करें।
यह रास्पबेरी पाई और nRf24l01 का उपयोग कर एक संदेश भेजने और Arduino UNO & nRF24l01 का उपयोग करके प्राप्त करने पर पूरा ट्यूटोरियल समाप्त करता है। संदेश 16x2 एलसीडी पर मुद्रित किया जाएगा। पाइप के पते Arduino UNO और Raspberry Pi दोनों में बहुत महत्वपूर्ण हैं। यदि आपको इस परियोजना को करते समय किसी भी कठिनाई का सामना करना पड़ता है, तो कृपया नीचे टिप्पणी करें या अधिक विस्तृत चर्चा के लिए मंच पर पहुंचें।
यह भी जांच प्रदर्शन वीडियो नीचे।