- MQTT क्या है?
- रास्पबेरी पाई पर मॉस्किटो एमक्यूटीटी ब्रोकर स्थापित करना
- रास्पबेरी पाई मॉस्किटो ब्रोकर का परीक्षण
- सर्किट आरेख
- कोड और स्पष्टीकरण
MQTT एक प्रोटोकॉल है जिसका उपयोग इंटरनेट पर संदेश भेजने और प्राप्त करने के लिए किया जाता है। हमने पहले इंटरनेट पर डेटा प्रकाशित करने के लिए IOT बिजली मीटर और रास्पबेरी पाई एलेक्सा में इस प्रोटोकॉल का उपयोग किया था। इस ट्यूटोरियल में हमें एमक्यूटीटी और उससे संबंधित शर्तों के बारे में अधिक जानकारी प्राप्त होगी। यहां हम स्थानीय MQTT ब्रोकर के रूप में रास्पबेरी पाई का उपयोग करेंगे और MQTT एप्लिकेशन डैशबोर्ड के माध्यम से NodeMCU ESP12E से जुड़े एक एलईडी को नियंत्रित करेंगे। एक DHT11 सेंसर NodeMCU से भी जुड़ा हुआ है, इसलिए हम MQTT डैशबोर्ड पर तापमान और आर्द्रता का वाचन प्राप्त करते हैं, फिर से रास्पबेरी पाई का उपयोग स्थानीय MQTT ब्रोकर के रूप में करते हैं।
तो, चलिए एमक्यूटीटी और उससे संबंधित शर्तों को समझने के द्वारा शुरू करते हैं।
MQTT क्या है?
MQTT का मतलब संदेश कतार टेलीमेट्री ट्रांसपोर्ट है जो IBM द्वारा डिज़ाइन किया गया है। यह प्रोटोकॉल सरल और हल्का है जिसका उपयोग इंटरनेट पर संदेश भेजने और प्राप्त करने के लिए किया जाता है और इसे उन डिवाइसों के लिए डिज़ाइन किया गया है जिनके पास कम बैंडविड्थ उपयोग हैं। आजकल इस प्रोटोकॉल का उपयोग अक्सर IoT उपकरणों में सेंसर डेटा भेजने और प्राप्त करने के लिए किया जाता है। इसके अलावा, IoT आधारित होम ऑटोमेशन सिस्टम में, इस प्रोटोकॉल को आसानी से इंटरनेट डेटा का अधिक उपयोग किए बिना उपयोग किया जा सकता है।
कुछ शर्तें हैं जो MQTT में अक्सर उपयोग की जाती हैं:
- सदस्यता लें और प्रकाशित करें
- संदेश
- विषय
- दलाल
1. सब्सक्राइब एंड पब्लिश: सब्सक्राइब का मतलब है कि दूसरे डिवाइस से डेटा प्राप्त करना, और डेटा को दूसरे डिवाइस पर भेजने के लिए पब्लिश करना।
जब डिवाइस 1 डेटा को डिवाइस 2 पर भेजता है तो इसे प्रकाशक के रूप में जाना जाता है और दूसरा सबस्क्राइबर और इसके विपरीत है।
2. संदेश: संदेश वह सूचना है जिसे हम भेज रहे हैं और प्राप्त कर रहे हैं। यह एक डेटा या किसी भी प्रकार का कमांड हो सकता है। उदाहरण के लिए, यदि हम बादल को तापमान डेटा प्रकाशित कर रहे हैं तो इस तापमान डेटा को संदेश के रूप में जाना जाता है।
3. विषय: यह वह तरीका है जिससे आप आने वाले संदेशों के लिए रुचि दर्ज करते हैं या आप यह निर्दिष्ट करते हैं कि आप संदेश कहाँ प्रकाशित करना चाहते हैं। विषयों को आगे की स्लैश द्वारा अलग किए गए तार के साथ दर्शाया गया है। MQTT का उपयोग कर विषयों पर डेटा प्रकाशित किया जाता है और फिर MQTT डिवाइस डेटा प्राप्त करने के लिए विषय की सदस्यता लेता है।
4. एमक्यूटीटी ब्रोकर: यह चीज़ प्रकाशकों से सभी संदेशों को प्राप्त करने, संदेशों को फ़िल्टर करने और फिर उन ग्राहकों को संदेश प्रकाशित करने के लिए ज़िम्मेदार है जो उनमें रुचि रखते हैं।
जब इस ब्रोकर को क्लाउड पर होस्ट किया जाता है तो इसे एमक्यूटीटी क्लाउड कहा जाता है । कई क्लाउड आधारित MQTT सेवाएं हैं जैसे Adafruit IO, MQTT.IO, IBM bluemix, Microsoft Azure, आदि। MQTT का उपयोग लोकप्रिय Amazon AWS क्लाउड के साथ भी किया जा सकता है, जिसे हमने Amazon AWS ट्यूटोरियल के साथ गेटिंग स्टार्ट में बताया है।
हम रास्पबेरी पाई का उपयोग करके अपने खुद के MQTT ब्रोकर बना सकते हैं । यह स्थानीय MQTT ब्रोकर होगा यानी आप अपने स्थानीय नेटवर्क पर डेटा भेज सकते हैं और प्राप्त कर सकते हैं केवल कहीं से भी नहीं। तो यहाँ हम रास्पबेरी पाई में मोस्किटो एमक्यूटीटी ब्रोकर को स्थानीय एमक्यूटीटी ब्रोकर बनाने के लिए स्थापित करेंगे और एनओडीएमसीयू से एमक्यूटीटी डैशबोर्ड एप्लिकेशन को तापमान डेटा भेजेंगे । साथ ही, हम ब्रोकर का उपयोग करके NodeMCU से जुड़ी एक एलईडी को नियंत्रित करेंगे।
रास्पबेरी पाई पर मॉस्किटो एमक्यूटीटी ब्रोकर स्थापित करना
अपने रास्पबेरी पाई में टर्मिनल खोलें और ब्रोकर को स्थापित करने के लिए निम्न कमांड टाइप करें
sudo apt update sudo apt install -y mosquitto mosquitto-clients
स्थापना समाप्त होने तक प्रतीक्षा करें। अब, रास्पबेरी पाई के स्टार्टअप पर दलाल शुरू करने के लिए, निम्न कमांड टाइप करें
sudo systemctl सक्षम करें mosquitto.service
यही है, हम अपने MQTT ब्रोकर को लॉन्च करने के लिए पूरी तरह तैयार हैं। इसे ठीक से स्थापित करने के लिए, निम्न कमांड दर्ज करें
मच्छर -वो
यह कमांड आपको अपने MQTT ब्रोकर का वर्जन देगा। यह 1.4.x या अधिक होना चाहिए।
रास्पबेरी पाई मॉस्किटो ब्रोकर का परीक्षण
1. नीचे दिए गए कमांड का उपयोग करके पृष्ठभूमि में मॉस्किटो ब्रोकर चलाएं
mosquitto -d
2. अब, हम निम्नलिखित कमांड का उपयोग करके उदाहरण में एक विषय की सदस्यता लेंगे
mosquitto_sub -d -t exampleTopic
3. अब, हम उदाहरण के लिए कुछ संदेश प्रकाशित करेंगे
mosquitto_pub -d -t example -Topic -m "हैलो वर्ल्ड!"
आपको नमस्कार दुनिया प्राप्त होगी! ग्राहक टर्मिनल में संदेश।
अब, यह हमारे नियंत्रण में किसी अन्य डिवाइस से डेटा को नियंत्रित करने और प्राप्त करने का समय है जो हम NodeMCU और MQTT डैशबोर्ड एप्लिकेशन का उपयोग कर रहे हैं ।
- पहले हम App का उपयोग करके कमांड भेजकर एक एलईडी को नियंत्रित करेंगे ताकि इस मामले में NodeMCU एक सब्सक्राइबर और एक प्रकाशक के रूप में ऐप का व्यवहार करे ।
- फिर ESP12E में DHT11 सेंसर भी जुड़ा है और यह इस तापमान को मोबाइल MQTT एप्लिकेशन को रीडिंग भेजता है, इसलिए इस मामले में मोबाइल सब्सक्राइबर होगा और NodeMCU प्रकाशक होगा । और संबंधित विषय पर इन संदेशों को अग्रेषित करने के लिए, मॉस्किटो एमक्यूटीटी ब्रोकर का उपयोग किया जाता है।
सर्किट आरेख
आरेख में दिखाए गए अनुसार सर्किट को कनेक्ट करें। यहाँ DHT11 का उपयोग तापमान रीडिंग के लिए किया जाता है लेकिन LM35 तापमान सेंसर का भी उपयोग किया जा सकता है। हमने पहले ही अपने कई प्रोजेक्ट्स में DHT11 सेंसर का इस्तेमाल किया जिसमें NodeMCU के साथ मौसम स्टेशन का निर्माण शामिल है।
डेटा की सदस्यता और प्रकाशन के लिए NodeMCU के लिए कोड लिखना शुरू करें।
कोड और स्पष्टीकरण
यहां हम Adafruit MQTT लाइब्रेरी टेम्पलेट का उपयोग करेंगे और कोड में आवश्यक चीजों को बदल देंगे। समान कोड का उपयोग केवल कुछ चीजें बदलकर डेटा को Adafruit IO क्लाउड पर प्रकाशित करने और सदस्यता लेने के लिए किया जा सकता है।इसके लिए स्केच से Adafruit MQTT लाइब्रेरी डाउनलोड करें -> लाइब्रेरी शामिल करें -> लाइब्रेरी प्रबंधित करें। Adafruit MQTT के लिए खोजें और इसे स्थापित करें। पुस्तकालय स्थापित करने के बाद। उदाहरणों पर जाएं -> Adafruit mqtt पुस्तकालय -> mqtt_esp8266
फिर हमारे रास्पबेरी पाई आईपी पते और वाई-फाई क्रेडेंशियल्स के अनुसार इस कोड को संपादित करें।
ESP8266WIFI और Adafruit MQTT के लिए सभी लाइब्रेरी शामिल करें ।
#शामिल
फिर अपने वाई-फाई के लिए एसएसआईडी और पासवर्ड को परिभाषित करें, जिससे आप अपने ईएसपी -12 ई को जोड़ना चाहते हैं। सुनिश्चित करें कि आपका RPi और NodeMCU एक ही नेटवर्क से कनेक्ट हो।
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
यह अनुभाग Adafruit सर्वर को परिभाषित करता है, इस स्थिति में आपके रास्पबेरी पाई और सर्वर पोर्ट का IP पता।
#define AIO_SERVER "अपने पीआई का आईपी पता" #define AIO_SERVERPORT 1883
नीचे के क्षेत्र खाली रहेंगे क्योंकि हम Adafruit बादल का उपयोग नहीं कर रहे हैं।
#define AIO_USERNAME "" #define AIO_KEY ""
फिर MQTT सर्वर से कनेक्ट करने के लिए एक ESP8266 WiFiClient क्लास बनाएं।
WiFiClient क्लाइंट;
WiFi क्लाइंट और MQTT सर्वर और लॉगिन विवरण में पास करके MQTT क्लाइंट क्लास सेट करें।
Adafruit_MQTT_Client mqtt (और ग्राहक, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
तापमान को प्रकाशित करने के लिए 'तापमान' नामक फ़ीड सेट करें।
Adafruit_MQTT_Publish तापमान = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ फ़ीड / तापमान");
परिवर्तनों की सदस्यता के लिए 'led1' नामक फ़ीड सेट करें।
Adafruit_MQTT_Subscribe led1 = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / led");
में सेटअप समारोह, हम NodeMCU का पिन आप उत्पादन प्राप्त करना चाहते हैं, जिस पर घोषणा करते हैं। फिर, NodeMCU को वाई-फाई एक्सेस प्वाइंट से कनेक्ट करें।
शून्य सेटअप () { Serial.begin (115200); देरी (10); पिनमोड (LED, OUTPUT); Serial.println (F ("Adafruit MQTT डेमो")); // वाईफाई एक्सेस प्वाइंट से कनेक्ट करें। धारावाहिक.प्रदर्शन (); धारावाहिक.प्रदर्शन (); Serial.print ("कनेक्ट करना"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); जबकि (WiFi.status ()! = WL_CONNECTED) { …। …। ... एलईडी फ़ीड के लिए सेटअप MQTT सदस्यता। mqtt.subscribe (& led1); }
में पाश समारोह, हम यह सुनिश्चित करेंगे कि MQTT सर्वर से कनेक्शन MQTT_connect () का उपयोग कर जीवित है; समारोह।
शून्य लूप () { MQTT_connect ();
अब, 'एलईडी' फ़ीड की सदस्यता लें और MQTT ब्रोकर से स्ट्रिंग प्राप्त करें और इस स्ट्रिंग को एटोई () का उपयोग करके संख्या में परिवर्तित करें ; फ़ंक्शन और डिजिटलवर्ट () का उपयोग करके एलईडी पिन पर यह संख्या लिखें ; समारोह।
Adafruit_MQTT_Subscribe * सदस्यता; जबकि (सदस्यता (mqtt.readSubscription (20000))) { if (सदस्यता == & led1) { Serial.print (F ("Got:")); Serial.println ((char *) led1.lastread); int led1_State = atoi ((char *) led1.lastread); digitalWrite (LED, led1_State); }
अब, एक चर में तापमान प्राप्त करें और तापमान.प्रकाश (t) फ़ंक्शन का उपयोग करके इस मान को प्रकाशित करें ।
फ्लोट टी = dht.readTENS (); … .. अगर (? तापमान। प्रदर्शनी (टी)) { Serial.println (एफ ("विफल")); } और { Serial.println (F ("OK!")); }
इस ट्यूटोरियल के अंत में एक प्रदर्शन वीडियो के साथ पूर्ण कोड दिया गया है। कोड को NodeMCU बोर्ड पर अपलोड करें और उस MQTT डैशबोर्ड ऐप को खोलें जिसे आपने स्मार्टफ़ोन में डाउनलोड किया है।
आप राफबेरी पाई GPIO को दुनिया में कहीं से भी MQTT क्लाउड जैसे Adafruit IO, MQTT.IO आदि का उपयोग करके नियंत्रित कर सकते हैं, जिसे हम अगले ट्यूटोरियल में सीखेंगे।