विषयसूची:
- चरण 1: अपने सेंसर कनेक्ट करें
- चरण 2: कोड
- चरण 3: आईबीएम बादल
- चरण 4: नोड-लाल
- चरण 5: नोड-लाल सेटअप: लाइट
- चरण 6: नोड-लाल सेटअप: तापमान
- चरण 7: नोड-लाल सेटअप: आर्द्रता
- चरण 8: नोड-लाल सेटअप: नमी
- चरण 9: आपका काम हो गया
वीडियो: PInt@t10n: स्मार्ट प्लांट मॉनिटरिंग सिस्टम: 9 कदम
2024 लेखक: John Day | [email protected]. अंतिम बार संशोधित: 2024-01-30 09:21
यह प्रोजेक्ट ibm iot क्लाउड के परीक्षण के रूप में बनाया गया था। हम ibm क्लाउड से डेटा भेजने और प्राप्त करने के लिए esp-8266 का उपयोग करते हैं। Esp और ibm क्लाउड के बीच संचार MQTT के माध्यम से होता है।
सभी डेटा को संभालने के लिए और यूजर को यूजर इंटरफेस के साथ पेश करने के लिए हम नोड-रेड का उपयोग करते हैं। यह बहुत शुरुआती अनुकूल है।
आरंभ करने के लिए आपको चाहिए:
- ईएसपी-8266
- dht 11/22 अस्थायी/नमी सेंसर
- प्रकाश संवेदनशील डायोड (प्रकाश माप)
- बजर
- जमीन नमी सेंसर
- आईबीएम क्लाउड अकाउंट
चरण 1: अपने सेंसर कनेक्ट करें
जैसा कि हमने पहले उल्लेख किया है कि हम सेंसर डेटा को पढ़ने और भेजने के लिए esp8266 का उपयोग करने जा रहे हैं। इस ट्यूटोरियल के लिए हम यह मानने जा रहे हैं कि आप अपने सेंसर को अपने माइक्रो कंट्रोलर से कनेक्ट करना जानते हैं। आपको पहले से ही यह जानना होगा कि esp8266 पर कोड कैसे अपलोड किया जाए।
हमारे esp मॉडल में केवल एक एनालॉग पोर्ट है इसलिए हमने अपने लाइट सेंसर से एनालॉग जानकारी प्राप्त करना चुना क्योंकि तब हम मॉनिटर कर सकते हैं कि प्लांट को कितनी रोशनी मिलती है।
अन्य सभी सेंसर डिजिटल रूप से जुड़े हुए हैं। हमारा DHT11 सेंसर डिजिटल रूप से डेटा भेजता है और हम सेंसर डेटा की व्याख्या करने के लिए dht लाइब्रेरी का उपयोग करते हैं।
ऊपर आप हमारे द्वारा उपयोग किए गए सेंसर के लिए एक सर्किट आरेख पा सकते हैं। लेकिन कृपया ध्यान रखें कि हम जिन सेंसरों का उपयोग करते हैं वे अक्सर एक मॉड्यूल के साथ आते हैं ताकि आप इसे अपने माइक्रो कंट्रोलर से उन सभी अतिरिक्त प्रतिरोधों के बिना आसानी से जोड़ सकें जिन्हें हमने आरेख में शामिल किया है।
चरण 2: कोड
यह वह आर्डिनो स्केच है जिसका हमने उपयोग किया था। यदि आप टिप्पणियों को पढ़ते हैं तो आप इस बारे में जान सकते हैं कि कोड कैसे काम करता है।
#ArduinoJson.h शामिल करें#DHT_U.h शामिल करें #DHT.h शामिल करें #ESP8266WiFi.h शामिल करें #ESP8266WiFiMulti.h शामिल करें #PubSubClient.h शामिल करें
#STASSID "ucll-projectweek-IoT" को परिभाषित करें #STAPSK "Foo4aiHa" को परिभाषित करें #DHTPin 5 को परिभाषित करें # नमी को परिभाषित करें 4 # DHTType DHT11 DHT dht (DHTPin, DHTType) को परिभाषित करें; ESP8266WiFiMulti WiFiMulti; फ्लोट अस्थायी = 0; फ्लोट आर्द्रता = 0; बूलियन नमी = झूठा; इंट लाइट = 0; कास्ट चार* एसएसआईडी = स्थिर; कास्ट चार* पासवर्ड = STAPSK; const char* mqtt_server = "cmfwqk.messaging.internetofthings.ibmcloud.com"; वाईफाई क्लाइंट एस्प क्लाइंट; PubSubClient क्लाइंट (espClient); लंबे समय तक अंतिम संदेश = 0; चार संदेश [50]; इंट वैल्यू = 0; #MQTT_HOST परिभाषित करें "cmfwqk.messaging.internetofthings.ibmcloud.com" #MQTT_PORT 1883 को परिभाषित करें #MQTT_DEVICEID को परिभाषित करें "d:cmfwqk:ESP8266:ESP" #define MQTT_USER "यूज-टोकन-ऑथ" #PICTO परिभाषित करें "QTT_OTT_2018" परिभाषित करें। iot-2/evt/status/fmt/json" #define MQTT_TOPIC_DISPLAY "iot-2/cmd/update/fmt/json" #include "pitches.h" // मेलोडी में नोट्स: // नोट अवधि: 4 = तिमाही नोट, 8 = आठवां नोट, आदि: इंट शॉर्टटोन = 80; इंट लॉन्गटोन = २००; इंट स्टैंडर्डडेल = ५०; int देरी के बीच बार्स = ५०; शून्य सेटअप_वाईफाई () {देरी (10); // हम एक वाईफाई नेटवर्क से कनेक्ट करके शुरू करते हैं Serial.println (); Serial.print ("कनेक्ट कर रहा है"); सीरियल.प्रिंट्लन (एसएसआईडी); वाईफाई.बेगिन (एसएसआईडी, पासवर्ड); जबकि (WiFi.status() != WL_CONNECTED) {देरी (500); सीरियल.प्रिंट ("।"); } सीरियल.प्रिंट्लन (""); Serial.println ("वाईफाई कनेक्टेड"); Serial.println ("आईपी पता:"); Serial.println (वाईफाई.लोकलआईपी ()); } शून्य कॉलबैक (चार * विषय, बाइट * पेलोड, अहस्ताक्षरित int लंबाई) { Serial.print ("संदेश आ गया ["); सीरियल.प्रिंट (विषय); सीरियल.प्रिंट ("]"); के लिए (int i = 0; i <लंबाई; i++) {सीरियल.प्रिंट ((चार) पेलोड ); } सीरियल.प्रिंट्लन (); StaticJsonDocument jsonBuffer; deserializeJson (जेसनबफर, पेलोड); JsonObject रूट = jsonBuffer.as (); अगर (रूट ["गीत"] == "दारू" {दारूद (); } अगर (रूट ["गीत"] == "स्टारवार्स") {स्टारवार्स (); } if(root["song"]=="jacques"){ Serial.println("jakakakakakkakaka"); जैक्स (); } } void reconnect() {// लूप जब तक हम दोबारा कनेक्ट नहीं हो जाते, जबकि (!client.connected()) { Serial.print("MQTT कनेक्शन का प्रयास…"); // कनेक्ट करने का प्रयास if (client.connect(MQTT_DEVICEID, MQTT_USER, MQTT_TOKEN)) { Serial.println("connected"); क्लाइंट.सब्सक्राइब (MQTT_TOPIC_DISPLAY); } और { सीरियल.प्रिंट ("विफल, आरसी ="); सीरियल.प्रिंट (क्लाइंट.स्टेट ()); Serial.println ("5 सेकंड में पुनः प्रयास करें"); // देरी से प्रयास करने से पहले 5 सेकंड प्रतीक्षा करें (5000); } } } शून्य सेटअप () { Serial.begin (९६००); पिनमोड (नमीपिन, इनपुट); dht.begin (); पिनमोड (0, आउटपुट); setup_wifi (); client.setServer (mqtt_server, MQTT_PORT); क्लाइंट.सेट कॉलबैक (कॉलबैक); देरी(20); } शून्य लूप () { अगर (! क्लाइंट। कनेक्टेड ()) {फिर से कनेक्ट करें (); } क्लाइंट.लूप (); नमी = डिजिटल रीड (नमीपिन); प्रकाश = एनालॉगरेड (ए 0); अस्थायी = dht.readTemperature (); आर्द्रता = dht.readआर्द्रता (); Serial.println ("तापमान =" + स्ट्रिंग (अस्थायी, १) + "\ n आर्द्रता =" + स्ट्रिंग (आर्द्रता, १) + "\ n नमी: "+ स्ट्रिंग (नमी) +" / n प्रकाश: "+ स्ट्रिंग (प्रकाश)); स्ट्रिंग पेलोड = "{"ts\":{"t\": "+स्ट्रिंग(अस्थायी, 1)+", \"h\": "+स्ट्रिंग(आर्द्रता, 1)+"}, \"ms \":{"m\": "+स्ट्रिंग(नमी)+"}, \"ls\":{"l\":"+String(light)+"}}"; Serial.println (पेलोड); अगर (client.publish(MQTT_TOPIC, (char*) payload.c_str())){ Serial.println("publish OK"); }else { Serial.println ("प्रकाशन विफल"); } देरी (2000); } शून्य दुस्साहस () {टोन (0, नोट_बी 3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी3, लॉन्गटोन); देरी (लॉन्गटोन); नोटोन (0); देरी (देरी के बीच बार्स); टोन (0, नोट_बी 3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी 3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी 3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी 3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी3, लॉन्गटोन); देरी (लॉन्गटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_ई 4, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_ई 4, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_ई 4, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_ई 4, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_ई 4, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_ई 4, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_ई 4, लॉन्गटोन); देरी (लॉन्गटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_डी 4, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_डी 4, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_डी 4, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_डी 4, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_डी 4, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_डी 4, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_डी 4, लॉन्गटोन); देरी (लॉन्गटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_ए 3, लॉन्गटोन); देरी (लॉन्गटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी 3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी3, लॉन्गटोन); देरी (लॉन्गटोन); नोटोन (0); देरी (देरी के बीच बार्स); टोन (0, नोट_बी 3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी 3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी 3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी 3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी 3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी3, लॉन्गटोन); देरी (लॉन्गटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_ई 4, लॉन्गटोन); देरी (लॉन्गटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी 3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी3, लॉन्गटोन); देरी (लॉन्गटोन); नोटोन (0); देरी (देरी के बीच बार्स); टोन (0, नोट_बी 3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी 3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी3, शॉर्टटोन); देरी (शॉर्टटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_बी3, लॉन्गटोन); देरी (लॉन्गटोन); नोटोन (0); देरी (मानक विलंब); टोन (0, नोट_ई 4, लॉन्गटोन); देरी (लॉन्गटोन); नोटोन (0); देरी (मानक विलंब); } शून्य स्टारवार्स () {बीप (NOTE_A4, 500); बीप (NOTE_A4, 500); बीप (NOTE_A4, 500); बीप (NOTE_F4, 350); बीप (NOTE_C5, 150); बीप (NOTE_A4, 500); बीप (NOTE_F4, 350); बीप (NOTE_C5, 150); बीप (NOTE_A4, 650); देरी (500); बीप (NOTE_E5, 500); बीप (NOTE_E5, 500); बीप (NOTE_E5, 500); बीप (NOTE_F5, 350); बीप (NOTE_C5, 150); बीप (NOTE_GS4, 500); बीप (NOTE_F4, 350); बीप (NOTE_C5, 150); बीप (NOTE_A4, 650); } शून्य बीप (इंट नोट, इंट अवधि) {// बजरपिन टोन पर टोन प्ले करें (0, नोट, अवधि); देरी (अवधि); नोटोन (0); देरी (मानक विलंब); } शून्य दिलऑफ करेज () { } शून्य जैक्स () {बीप (NOTE_C4, 500); बीप (NOTE_D4, 500); बीप (NOTE_E4, 500); बीप (NOTE_C4, 500); बीप (NOTE_C4, 500); बीप (NOTE_D4, 500); बीप (NOTE_E4, 500); बीप (NOTE_C4, 500); बीप (NOTE_E4, 500); बीप (NOTE_F4, 500); बीप (NOTE_G4, 500); बीप (NOTE_E4, 500); बीप (NOTE_F4, 500); बीप (NOTE_G4, 500); बीप (NOTE_G4, 500); बीप (NOTE_A4, 500); बीप (NOTE_G4, 500); बीप (NOTE_F4, 500); बीप (NOTE_E4, 500); बीप (NOTE_C4, 500); बीप (NOTE_G4, 500); बीप (NOTE_A4, 500); बीप (NOTE_G4, 500); बीप (NOTE_F4, 500); बीप (NOTE_E4, 500); बीप (NOTE_C4, 500); बीप (NOTE_C4, 500); बीप (NOTE_G4, 500); बीप (NOTE_C4, 500); बीप (NOTE_C4, 500); बीप (NOTE_G4, 500); बीप (NOTE_C4, 500); }
चरण 3: आईबीएम बादल
आपको IBM-क्लाउड इंस्टेंस सेटअप करने की आवश्यकता है। आप इसके बारे में इस लिंक के माध्यम से जानकारी प्राप्त कर सकते हैं: जीथब।
चरण 4: नोड-लाल
हम अपने सामान्य व्यावसायिक तर्क को संभालने के लिए नोड-रेड का उपयोग करते हैं और एक सहज उपयोगकर्ता इंटरफ़ेस में इस डेटा की कल्पना करते हैं।
चरण 5: नोड-लाल सेटअप: लाइट
अपनी परियोजना में निम्नलिखित कोड आयात करें।
[{"id":"deb0d57.1c46528", "टाइप":"टैब", "लेबल":"लाइट", "अक्षम": झूठा, "जानकारी":""}, {"id":"8a0fcaac. 4e54", "टाइप": "ibmiot in", "z": "deb0d57.1c46528", "प्रमाणीकरण": "बाउंड सर्विस", "एपीकी": "", "इनपुट टाइप": "ईवीटी", "लॉजिकलइंटरफेस": " ", "नियम आईडी": "", "डिवाइस आईडी": "ईएसपी", "एप्लिकेशन आईडी": "", "डिवाइस टाइप": "ईएसपी 8266", "इवेंट टाइप": "+", "कमांड टाइप": "", "फॉर्मेट": "json", "name": "ESP से डेटा प्राप्त करें", "सेवा": "पंजीकृत", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":"", "qos":0, "x":120, "y":62, "wires":
चरण 6: नोड-लाल सेटअप: तापमान
अपनी परियोजना में निम्नलिखित कोड आयात करें।
[{"id":"fbad3799.f0e0e", "टाइप":"टैब", "लेबल":"तापमान", "अक्षम": झूठा, "जानकारी":""}, {"id":"b8618eb9. 1c9288", "टाइप": "ibmiot in", "z": "fbad3799.f0e0e", "प्रमाणीकरण": "बाउंड सर्विस", "एपीकी": "", "इनपुट टाइप": "evt", "लॉजिकलइंटरफेस": " ", "नियम आईडी": "", "डिवाइस आईडी": "ईएसपी", "एप्लिकेशन आईडी": "", "डिवाइस टाइप": "ईएसपी 8266", "इवेंट टाइप": "+", "कमांड टाइप": "", "फॉर्मेट": "json", "name": "ESP से डेटा प्राप्त करें", "सेवा": "पंजीकृत", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":"", "qos":0, "x":145.5, "y":49, "wires":
चरण 7: नोड-लाल सेटअप: आर्द्रता
अपनी परियोजना में निम्नलिखित कोड आयात करें।
[{"id":"144cd53b.c00473", "टाइप":"टैब", "लेबल":"आर्द्रता", "अक्षम": झूठा, "जानकारी":""}, {"id":"d958f58b. 2678e", "टाइप": "ibmiot in", "z": "144cd53b.c00473", "प्रमाणीकरण": "बाउंड सर्विस", "एपीआईके": "", "इनपुट टाइप": "ईवीटी", "लॉजिकलइंटरफेस": " ", "नियम आईडी": "", "डिवाइस आईडी": "ईएसपी", "एप्लिकेशन आईडी": "", "डिवाइस टाइप": "ईएसपी 8266", "इवेंट टाइप": "+", "कमांड टाइप": "", "फॉर्मेट":"json", "name":"ESP से डेटा प्राप्त करें", "सेवा": "पंजीकृत", "allDevices": false, "allApplications":"", "allDeviceTypes": false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":"", "qos":0, "x":142, "y":87, "wires":
चरण 8: नोड-लाल सेटअप: नमी
अपनी परियोजना में निम्नलिखित कोड आयात करें।
[{"id":"4ee73536.ec6fc4", "टाइप":"टैब", "लेबल":"नमी", "अक्षम": झूठा, "जानकारी":""}, {"id":"a6daac3e. 2d5268", "टाइप": "ibmiot आउट", "z": "4ee73536.ec6fc4", "प्रमाणीकरण": "बाउंड सर्विस", "एपीआईके": "", "आउटपुट टाइप": "cmd", "डिवाइस आईडी": " ESP", "डिवाइस टाइप": "ESP8266", "eventCommandType": "अपडेट", "फॉर्मेट": "json", "डेटा": "msg", "qos": 0, "name": "ESP को कमांड भेजें। ", "सेवा": "पंजीकृत", "x": 804.1944580078125, "y": 383.0000305175781, "तार": }, {"id": "4134fdb7.18e9b4", "प्रकार": "ibmiot in", "z": "4ee73536.ec6fc4", "प्रमाणीकरण": "बाध्य सेवा", "apiKey": "", "इनपुट टाइप": "evt", "लॉजिकलइंटरफेस": "", "नियम आईडी": "", "डिवाइस आईडी":"ESP", "applicationId":"", "deviceType":"ESP8266", "eventType":"update", "commandType":"", "format":"json", "name":"डेटा प्राप्त करें) ESP से", "सेवा": "पंजीकृत", "allDevices": false, "allApplications":"", "allDeviceTypes": false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":false, "qos":0, "x":115, "y":76, "wires":
चरण 9: आपका काम हो गया
बधाई हो! अब आपके पास एक कार्यशील संयंत्र अवलोकन प्रणाली है।
यदि आपके कोई प्रश्न हैं, तो हमसे संपर्क करने में संकोच न करें!