विषयसूची:

Esp8266 का उपयोग कर मौसम वेब ऐप: 7 कदम
Esp8266 का उपयोग कर मौसम वेब ऐप: 7 कदम

वीडियो: Esp8266 का उपयोग कर मौसम वेब ऐप: 7 कदम

वीडियो: Esp8266 का उपयोग कर मौसम वेब ऐप: 7 कदम
वीडियो: WEATHER MONITORING SYSTEM Tutorial | Nodemcu ESP8266 with WEATHER MONITORING SYSTEM [Full Guide] 2024, मई
Anonim
मौसम वेब ऐप Esp8266. का उपयोग कर रहा है
मौसम वेब ऐप Esp8266. का उपयोग कर रहा है

SHT 31 सेंसरियन द्वारा बनाया गया एक तापमान और आर्द्रता सेंसर है। SHT31 ±2% RH के आसपास उच्च स्तर की सटीकता प्रदान करता है। इसकी आर्द्रता सीमा 0 से 100% के बीच है और तापमान सीमा -40 से 125 डिग्री सेल्सियस के बीच है। यह 8 सेकंड के सेंसर प्रतिक्रिया समय के साथ बहुत अधिक विश्वसनीय और तेज़ है। इसकी कार्यक्षमता में उन्नत सिग्नल प्रोसेसिंग और I2C संगतता शामिल है। इसके संचालन के विभिन्न तरीके हैं जो इसे ऊर्जा कुशल बनाते हैं।

इस ट्यूटोरियल में, हमने SHT 31 को Adafruit Huzzah बोर्ड के साथ जोड़ा है। तापमान और आर्द्रता मान पढ़ने के लिए हमने ESP8266 I2C शील्ड का उपयोग किया है। यह एडेप्टर सभी पिनों को उपयोगकर्ता के लिए सुलभ बनाता है और उपयोगकर्ता के अनुकूल I2C वातावरण प्रदान करता है।

चरण 1: हार्डवेयर की आवश्यकता

हार्डवेयर की आवश्यकता
हार्डवेयर की आवश्यकता
हार्डवेयर की आवश्यकता
हार्डवेयर की आवश्यकता
हार्डवेयर की आवश्यकता
हार्डवेयर की आवश्यकता

इस कार्य को पूरा करने के लिए प्रयुक्त हार्डवेयर:

1. एसएचटी31

2. एडफ्रूट हुज़ाह ईएसपी8266

3. ESP8266 I2C अडैप्टर

4. I2C केबल

चरण 2: हार्डवेयर कनेक्शन

हार्डवेयर कनेक्शन
हार्डवेयर कनेक्शन
हार्डवेयर कनेक्शन
हार्डवेयर कनेक्शन

इस चरण में हार्डवेयर हुकअप मार्गदर्शिका शामिल है। यह खंड मूल रूप से सेंसर और ESP8266 के बीच आवश्यक वायरिंग कनेक्शन की व्याख्या करता है। कनेक्शन इस प्रकार हैं।

  1. SHT31 I2C पर काम करता है। उपरोक्त छवि ESP8266 और SHT31 मॉड्यूल के बीच संबंध को प्रदर्शित करती है। हम इसके लिए I2C केबल का उपयोग कर रहे हैं या तो हम 4 F से F जम्पर तारों का उपयोग कर सकते हैं।
  2. एक तार Vcc के लिए, दूसरा तार GND के लिए और अन्य दो SDA और SCL के लिए उपयोग किया जाता है।
  3. I2C एडेप्टर के अनुसार एक ESP8266 बोर्ड के पिन 2 और पिन 14 को क्रमशः एसडीए और एससीएल के रूप में उपयोग किया जाता है

चरण 3: कार्य निर्धारण के लिए कोड

इस ट्यूटोरियल में, हम तीन ऑपरेशन कर रहे हैं

  • I2C प्रोटोकॉल का उपयोग करके SHT11 से डेटा पढ़ें
  • वेब सर्वर को होस्ट करें और सेंसर रीडिंग को वेबपेज पर पोस्ट करें
  • ThingSpeak API पर सेंसर रीडिंग पोस्ट करें

इसे प्राप्त करने के लिए हम टास्कशेड्यूलर लाइब्रेरी का उपयोग कर रहे हैं। हमने तीन अलग-अलग नियंत्रण कार्यों के संदर्भ में तीन अलग-अलग कार्यों को निर्धारित किया है। यह अग्रानुसार होगा

  • टास्क 1 सेंसर वैल्यू को पढ़ने के लिए है यह टास्क 1 सेकंड तक चलता है जब तक कि यह 10 सेकंड के टाइमआउट तक नहीं पहुंच जाता।
  • जब टास्क 1 अपने टाइमआउट पर पहुंच जाता है तो टास्क 2 सक्षम हो जाता है और टास्क 1 अक्षम हो जाता है।
  • हम इस कॉलबैक में एपी से जुड़ते हैं, एसटीए और एपी के बीच स्विचिंग का ख्याल रखने के लिए दो बूलियन चर लिए जाते हैं
  • टास्क 2 में हम 192.168.1.4 पर एक वेब सर्वर होस्ट कर रहे हैं। यह कार्य प्रत्येक 5 सेकंड के लिए तब तक चलता है जब तक कि यह अपने समय समाप्त नहीं हो जाता जो कि 50 सेकंड है
  • जब टास्क 2 टाइमआउट पर पहुंच जाता है तो टास्क 3 सक्षम हो जाता है और टास्क 2 अक्षम हो जाता है।
  • हम इस कॉलबैक में एसटीए (स्थानीय आईपी) से जुड़ते हैं
  • टास्क 3 में हम सेंसर रीडिंग को क्लाउड थिंगस्पीक एपीआई पर पोस्ट कर रहे हैं
  • टास्क 3 हर पांच सेकंड में तब तक चलता है जब तक कि यह अपने टाइमआउट यानी 50 सेकंड. तक नहीं पहुंच जाता
  • जब टास्क 3 अपने टाइमआउट पर पहुंच जाता है तो टास्क 1 फिर से सक्षम हो जाता है और टास्क 3 अक्षम हो जाता है।
  • जब कोई कॉलबैक नहीं कहा जाता है या डिवाइस निष्क्रिय है तो यह लाइट स्लीप में चला जाता है जिससे बिजली की बचत होती है।

अनुसूचक टीएस;

// i2c के लिए कार्य, वेब सर्वर की मेजबानी करना और चीजों पर पोस्ट करना

टास्क tI2C(1 * TASK_SECOND, TASK_FOREVER, &taskI2CCकॉलबैक, &ts, false, NULL, &taskI2CDisable); टास्क tAP(5*TASK_SECOND, TASK_FOREVER, &taskAPCallback, &ts, false, NULL, &taskAPDisable); टास्क tWiFi(5* TASK_SECOND, TASK_FOREVER, &taskWiFiCallback, &ts, false, NULL, &taskWiFiDisable); // कार्यों के लिए समयबाह्य tI2C.setTimeout(10 * TASK_SECOND); tAP.setTimeout(50 * TASK_SECOND); tWiFi.setTimeout (५० * TASK_SECOND); // I2C कार्य सक्षम करें tI2C.enable ();

चरण 4: तापमान और आर्द्रता मान पढ़ने के लिए कोड

हम तापमान और आर्द्रता मूल्यों को पढ़ने के लिए Wire.h पुस्तकालय का उपयोग कर रहे हैं। यह पुस्तकालय सेंसर और मास्टर डिवाइस के बीच i2c संचार की सुविधा प्रदान करता है। 0x44 SHT31 के लिए I2C पता है।

SHT31 संचालन के एक अलग मोड में काम करता है। आप उसके लिए डेटाशीट का उल्लेख कर सकते हैं।

हम सिंगल शॉट ऑपरेशन के लिए क्रमशः एमएसबी और एलएसबी के रूप में 0x2C और 0x06 का उपयोग कर रहे हैं।

//I2C कार्य कॉलबैक शून्य कार्यI2CCallback ()

{ Serial.println ("taskI2CStarted"); अहस्ताक्षरित इंट रूट [6]; // 0x44 से प्रसारण शुरू करें; Wire.beginTransmission (Addr); // उच्च दोहराव के साथ एक शॉट ट्रांसमिशन के लिए हम 0x2C (MSB) और 0x06 (LSB) वायर.राइट (0x2C) का उपयोग करते हैं; वायर.राइट (0x06); // अंत संचरण Wire.endTransmission (); // 0x44 Wire.beginTransmission (Addr) से बाइट्स का अनुरोध करें; वायर.एंडट्रांसमिशन (); Wire.requestFrom (Addr, 6); अगर (वायर.उपलब्ध() == 6) {// डेटा [0] और डेटा [1] में 16 बिट तापमान होता है। रूट [0] = वायर.रीड (); रूट [1] = वायर.रीड (); // डेटा [2] में 8 बिट सीआरसी रूट [2] = वायर.रीड (); // डेटा [३] और डेटा [४] में १६ बिट ह्यूमिडिटी रूट [३] = वायर.रीड (); रूट [४] = वायर.रीड (); // डेटा [5] में 8 बिट सीआरसी रूट होते हैं [5] = वायर.रीड (); } इंट टेम्प = (रूट [0] * 256) + रूट [1]; // MSB को 8 बिट्स से शिफ्ट करें LSB फ्लोट cTemp = -45.0 + (175.0 * अस्थायी / 65535.0) जोड़ें; फ्लोट fTemp = (cTemp * १.८) + ३२.०; // MSB को 8 बिट्स से शिफ्ट करें, इसमें LSB जोड़ें पूर्ण रिज़ॉल्यूशन द्वारा और *100 प्रतिशत फ्लोट ह्यूमिडिटी के लिए = (100.0 * ((रूट [3] * 256.0) + रूट [4])) / 65535.0;

टेम्पसी = सीटीईएमपी;

अस्थायी एफ = एफटेम्प; नम = नमी; Serial.print ("सी में तापमान: / t"); Serial.println (स्ट्रिंग (cTemp, 1)); Serial.print ("F:\t में तापमान"); Serial.println (स्ट्रिंग (fTemp, 1)); सीरियल.प्रिंट ("आर्द्रता: / t"); Serial.println (स्ट्रिंग (आर्द्रता, 1)); }

चरण 5: वेबसर्वर को होस्ट करने के लिए कोड

वेबसर्वर को होस्ट करने के लिए कोड
वेबसर्वर को होस्ट करने के लिए कोड
वेबसर्वर को होस्ट करने के लिए कोड
वेबसर्वर को होस्ट करने के लिए कोड

हमने अपने डिवाइस से एक स्थिर आईपी पर एक वेब सर्वर होस्ट किया है।

  • ESP8266WebServer लाइब्रेरी का उपयोग वेबसर्वर को होस्ट करने के लिए किया जाता है
  • सबसे पहले हमें अपना स्टैटिक आईपी बनाने के लिए आईपी एड्रेस, गेटवे और सबनेट मास्क घोषित करना होगा
  • अब अपने एक्सेस प्वाइंट के लिए ssid और पासवर्ड घोषित करें।
  • किसी भी एसटीए डिवाइस से एक्सेस प्वाइंट से कनेक्ट करें
  • सर्वर को पोर्ट 80 पर होस्ट करें जो इंटरनेट संचार प्रोटोकॉल के लिए एक डिफ़ॉल्ट पोर्ट है, हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल (HTTP)
  • इंट्रो वेबपेज के लिए अपने वेब ब्राउजर पर 192.168.1.4 और सेंसर रीडिंग वेबपेज के लिए 192.168.1.4/Value दर्ज करें

// एपी के लिए स्थिर आईपी

आईपीएड्रेस ap_local_IP(१९२, १६८, १, ४);

आईपीएड्रेस ap_gateway(१९२, १६८, १, २५४);

IPAddress ap_subnet(255, 255, 255, 0); // ssid और AP STA मोड में स्थानीय वाईफाई के लिए

कॉन्स्ट चार वाईफाईसिड = "**********";

कॉन्स्ट चार वाईफाईपास = "*********";

// ssid और AP के लिए पास करें

कास्ट चार APssid = "********";

कास्ट चार एपीपास = "********";

ESP8266वेबसर्वर सर्वर (80);

व्यर्थ व्यवस्था{

server.on("/", onHandleDataRoot);

server.on("/Value", onHandleDataFeed);

server.onNotFound (onHandleNotFound);

}

शून्य कार्यAPCallback(){

Serial.println ("टास्कएपी शुरू हुआ");

सर्वर.हैंडल क्लाइंट ();

}

शून्य onHandleDataRoot(){ server.send(200, "text/html", PAGE1); }

शून्य onHandleDataFeed () {

server.send (200, "टेक्स्ट/एचटीएमएल", पेज 2); }

शून्य onHandleNotFound () {

स्ट्रिंग संदेश = "फ़ाइल नहीं मिली / n / n";

संदेश + = "यूआरआई:";

संदेश + = सर्वर.यूरी ();

संदेश + = "\ n विधि:";

संदेश + = (सर्वर.विधि () == HTTP_GET)?" प्राप्त करें: "पोस्ट";

संदेश + = "\ n तर्क:";

संदेश + = सर्वर। args ();

संदेश + = "\ n";

server.send(404, "पाठ/सादा", संदेश);}

शून्य फिर से कनेक्ट करेंAPWiFi () {

वाईफाई.मोड (WIFI_AP_STA);

देरी (100);

वाईफाई.डिस्कनेक्ट ();

बूलियन स्थिति = WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);

अगर (स्थिति == सच) {

Serial.print ("सॉफ्ट-एपी सेट करना …");

बूलियन एपी = WiFi.softAP (APssid, APpass);

अगर (एपी == सच) {

सीरियल.प्रिंट ("कनेक्टेड: / t");

// IPAddress myIP = WiFi.softAPIP ();

Serial.println(WiFi.softAPIP ());

}

सर्वर। शुरू ();

}

}

चरण 6: थिंग स्पीक में डेटा पोस्ट करने के लिए कोड

थिंग स्पीक में डेटा पोस्ट करने के लिए कोड
थिंग स्पीक में डेटा पोस्ट करने के लिए कोड
थिंग स्पीक में डेटा पोस्ट करने के लिए कोड
थिंग स्पीक में डेटा पोस्ट करने के लिए कोड
थिंग स्पीक में डेटा पोस्ट करने के लिए कोड
थिंग स्पीक में डेटा पोस्ट करने के लिए कोड
थिंग स्पीक में डेटा पोस्ट करने के लिए कोड
थिंग स्पीक में डेटा पोस्ट करने के लिए कोड

यहां हम सेंसर रीडिंग को थिंग स्पीक में पोस्ट कर रहे हैं। इस कार्य को पूरा करने के लिए निम्नलिखित चरणों की आवश्यकता है-

  • बोलो में अपना खाता बनाएं
  • अपना सेंसर डेटा संग्रहीत करने के लिए चैनल और फ़ील्ड बनाएं
  • हम एपीआई को जीईटी और पोस्ट अनुरोधों का उपयोग करके ईएसपी से बात करने के लिए डेटा प्राप्त और पोस्ट कर सकते हैं और इसके विपरीत।
  • हम अपना डेटा ThingSpeak पर इस प्रकार पोस्ट कर सकते हैं

शून्य कार्यवाईफाई कॉलबैक () {

वाईफाई क्लाइंट if(wifiClient.connect(hostId, 80)){ String postStr = apiKey; पोस्टस्ट्र +="&field1="; पोस्टस्ट्र + = स्ट्रिंग (आर्द्र); पोस्टस्ट्र +="&field2="; पोस्टस्ट्र + = स्ट्रिंग (अस्थायी); पोस्टस्ट्र +="&field3="; पोस्टस्ट्र + = स्ट्रिंग (अस्थायी); पोस्टस्ट्र + = "\r\n\r\n"; वाईफाई क्लाइंट.प्रिंट ("पोस्ट / अपडेट HTTP / 1.1 / n"); वाईफाई क्लाइंट.प्रिंट ("होस्ट: api.thingspeak.com\n"); वाईफाई क्लाइंट.प्रिंट ("कनेक्शन: बंद करें / n"); wifiClient.print("X-THINGSPEAKAPIKEY:"+apiKey+"\n"); wifiClient.print ("सामग्री-प्रकार: एप्लिकेशन/x-www-form-urlencoded\n"); वाईफाई क्लाइंट.प्रिंट ("सामग्री-लंबाई:"); वाईफाई क्लाइंट।प्रिंट (पोस्टस्ट्र। लम्बाई ()); वाईफाई क्लाइंट.प्रिंट ("\ n / n"); वाईफाई क्लाइंट.प्रिंट (पोस्टस्ट्र); } वाईफाई क्लाइंट.स्टॉप (); }

चरण 7: कुल मिलाकर कोड

समग्र कोड मेरे जीथब भंडार में उपलब्ध है

श्रेय:

  • Arduino JSON: ArduinoJson
  • ESP826वेबसर्वर
  • कार्य अनुसूचक
  • एसएचटी 31
  • I2C स्कैन
  • HIH6130 निर्देशयोग्य ट्यूटोरियल
  • तार Arduino
  • एनसीडी.आईओ

सिफारिश की: