विषयसूची:

IoT मौसम स्टेशन RPi और ESP8266 के साथ: 10 कदम
IoT मौसम स्टेशन RPi और ESP8266 के साथ: 10 कदम

वीडियो: IoT मौसम स्टेशन RPi और ESP8266 के साथ: 10 कदम

वीडियो: IoT मौसम स्टेशन RPi और ESP8266 के साथ: 10 कदम
वीडियो: How I Built My Public IoT Weather Station - Esp32, Arduino & JioFi - Sends Data - OpenWeatherMap.org 2024, नवंबर
Anonim
IoT मौसम स्टेशन RPi और ESP8266. के साथ
IoT मौसम स्टेशन RPi और ESP8266. के साथ

पिछले ट्यूटोरियल में, हम नोडएमसीयू, सेंसर के साथ खेल रहे हैं और थिंगस्पीक (एक इंटरनेट ऑफ थिंग्स (आईओटी) प्लेटफॉर्म पर डेटा कैप्चर और लॉग करना सीख रहे हैं जो आपको क्लाउड में सेंसर डेटा एकत्र करने और स्टोर करने और आईओटी एप्लिकेशन विकसित करने देता है):

IOT मेड ईज़ी: रिमोट वेदर डेटा कैप्चर करना: यूवी और एयर टेम्परेचर और ह्यूमिडिटी

इस नए ट्यूटोरियल के साथ, हम सीखेंगे कि यह कैसे करना है, लेकिन इस समय, कई अलग-अलग सेंसर से डेटा कैप्चर करने के लिए रास्पबेरी पाई का उपयोग करना और उपकरणों और वेब के बीच संचार के विभिन्न तरीकों की खोज करना:

सेंसर और कॉमिनेशन प्रकार:

  • DHT22 (तापमान और आर्द्रता) ==> डिजिटल संचार
  • BMP180 (तापमान और दबाव) ==> I2C प्रोटोकॉल
  • DS18B20 (तापमान) ==> 1-वायर प्रोटोकॉल

ब्लॉक आरेख दिखाता है कि इस परियोजना के साथ हमें अंत में क्या मिलेगा:

छवि
छवि

चरण 1: BoM - सामग्री का बिल

  1. रास्पबेरी पाई V3 - यूएस$ 32.00
  2. DHT22 तापमान और सापेक्ष आर्द्रता सेंसर - USD 9.95
  3. रोकनेवाला 4K7 ओम
  4. DS18B20 पनरोक तापमान सेंसर - USD 5.95
  5. रोकनेवाला 4K7 ओम
  6. BMP180 बैरोमीटर का दबाव, तापमान और ऊंचाई सेंसर - USD 6.99

चरण 2: तापमान और आर्द्रता सेंसर स्थापित करना

तापमान और आर्द्रता सेंसर स्थापित करना
तापमान और आर्द्रता सेंसर स्थापित करना

हवा के तापमान और सापेक्षिक आर्द्रता डेटा को कैप्चर करने के लिए स्थापित किया जाने वाला पहला सेंसर DHT22 होगा। ADAFRUIT साइट उन सेंसरों के बारे में बहुत अच्छी जानकारी प्रदान करती है। बोलो, वहां से कुछ जानकारी प्राप्त हुई:

अवलोकन

कम लागत वाले डीएचटी तापमान और आर्द्रता सेंसर बहुत ही बुनियादी और धीमे हैं, लेकिन उन शौकियों के लिए बहुत अच्छे हैं जो कुछ बुनियादी डेटा लॉगिंग करना चाहते हैं। DHT सेंसर दो भागों से बने होते हैं, एक कैपेसिटिव ह्यूमिडिटी सेंसर और एक थर्मिस्टर। अंदर एक बहुत ही बुनियादी चिप भी है जो डिजिटल रूपांतरण के लिए कुछ एनालॉग करता है और तापमान और आर्द्रता के साथ एक डिजिटल सिग्नल को बाहर निकालता है। किसी भी माइक्रोकंट्रोलर का उपयोग करके डिजिटल सिग्नल को पढ़ना काफी आसान है।

DHT22 मुख्य विशेषताएं:

  • कम लागत
  • 3 से 5V पावर और I/O
  • रूपांतरण के दौरान 2.5mA अधिकतम वर्तमान उपयोग (डेटा का अनुरोध करते समय)
  • 2-5% सटीकता के साथ 0-100% आर्द्रता रीडिंग के लिए अच्छा है
  • -40 से 125 डिग्री सेल्सियस तापमान रीडिंग ± 0.5 डिग्री सेल्सियस सटीकता के लिए अच्छा है
  • 0.5 हर्ट्ज नमूना दर से अधिक नहीं (हर 2 सेकंड में एक बार)
  • शरीर का आकार 15.1 मिमी x 25 मिमी x 7.7 मिमी
  • ०.१" रिक्ति के साथ ४ पिन

एक बार जब आप आमतौर पर 20 मीटर से कम दूरी पर सेंसर का उपयोग करेंगे, तो डेटा और वीसीसी पिन के बीच एक 4K7 ओम रोकनेवाला जुड़ा होना चाहिए। DHT22 आउटपुट डेटा पिन रास्पबेरी GPIO 16 से जुड़ा होगा। उपरोक्त विद्युत आरेख की जाँच करें, सेंसर को नीचे के रूप में RPi पिन से कनेक्ट करें:

  1. पिन 1 - वीसीसी ==> 3.3V
  2. पिन २ - डेटा ==> जीपीआईओ १६
  3. पिन 3 - कनेक्ट नहीं
  4. पिन 4 - Gnd ==> Gnd

Vcc और डेटा पिन के बीच 4K7 ओम रेसिस्टर लगाना न भूलें

एक बार सेंसर कनेक्ट हो जाने के बाद, हमें इसकी लाइब्रेरी को अपने आरपीआई पर भी स्थापित करना होगा।

डीएचटी पुस्तकालय स्थापित करना:

अपने रास्पबेरी पर, /घर से, /दस्तावेज पर जाएं

सीडी दस्तावेज़

पुस्तकालय स्थापित करने और वहां जाने के लिए एक निर्देशिका बनाएं:

एमकेडीआईआर डीएचटी२२_सेंसर

सीडी DHT22_सेंसर

अपने ब्राउज़र पर, Adafruit GitHub पर जाएँ:

github.com/adafruit/Adafruit_Python_DHT

दाईं ओर डाउनलोड ज़िप लिंक पर क्लिक करके लाइब्रेरी डाउनलोड करें और हाल ही में बनाए गए अपने रास्पबेरी पाई फ़ोल्डर पर संग्रह को अनज़िप करें। फिर लाइब्रेरी की निर्देशिका पर जाएं (सबफ़ोल्डर जो आपके द्वारा फ़ाइल को अनज़िप करने पर स्वचालित रूप से बनाया जाता है), और कमांड निष्पादित करें:

sudo python3 setup.py install

मेरे GITHUB से एक परीक्षण कार्यक्रम (DHT22_test.py) खोलें

आयात एडफ्रूट_डीएचटी

DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 आर्द्रता, तापमान = Adafruit_DHT.read_retry (DHT22Sensor, DHTpin) यदि आर्द्रता कोई नहीं है और तापमान कोई नहीं है: प्रिंट ('Temp = {0: 0.1f} * C आर्द्रता = {1: 0.1 f}%'.format(तापमान, आर्द्रता)) अन्य: प्रिंट ('पढ़ने में विफल। पुनः प्रयास करें!')

कमांड के साथ प्रोग्राम निष्पादित करें:

python3 DHT22_test.py

नीचे दी गई टर्मिनल प्रिंट स्क्रीन परिणाम दिखाती है।

छवि
छवि

चरण 3: DS18B20 स्थापित करना - तापमान सेंसर

DS18B20 स्थापित करना - तापमान सेंसर
DS18B20 स्थापित करना - तापमान सेंसर
DS18B20 स्थापित करना - तापमान सेंसर
DS18B20 स्थापित करना - तापमान सेंसर

सेंसर अवलोकन:

हम इस ट्यूटोरियल में DS18B20 सेंसर के वाटरप्रूफ संस्करण का उपयोग करेंगे। यह गीली परिस्थितियों में दूरस्थ तापमान के लिए बहुत उपयोगी है, उदाहरण के लिए नम मिट्टी पर। सेंसर अलग है और 125oC तक माप ले सकता है (Adafrut अपने केबल पीवीसी जैकेट के कारण इसे 100oC से अधिक उपयोग करने की अनुशंसा नहीं करता है)।

DS18B20 एक डिजिटल सेंसर है जो लंबी दूरी पर भी उपयोग करना अच्छा बनाता है! ये 1-वायर डिजिटल तापमान सेंसर काफी सटीक हैं (अधिकांश सीमा से ± 0.5 डिग्री सेल्सियस) और ऑनबोर्ड डिजिटल-टू-एनालॉग कनवर्टर से 12 बिट तक सटीकता दे सकते हैं। वे एक एकल डिजिटल पिन का उपयोग करके NodeMCU के साथ बहुत अच्छा काम करते हैं, और आप एक ही पिन से कई लोगों को भी जोड़ सकते हैं, प्रत्येक के पास अलग-अलग करने के लिए कारखाने में एक अद्वितीय 64-बिट आईडी बर्न होती है।

सेंसर 3.0 से 5.0V तक काम करता है, इसका मतलब है कि इसे रास्पबेरी पिन (1 या 17) में से किसी एक द्वारा प्रदान किए गए 3.3V से सीधे संचालित किया जा सकता है।

सेंसर में 3 तार होते हैं:

  • काला: जीएनडी
  • लाल: वीसीसी
  • पीला: 1-तार डेटा

यहां, आप पूरा डेटा पा सकते हैं: DS18B20 डेटाशीट

सेंसर स्थापना:

उपरोक्त आरेख का पालन करें और कनेक्शन बनाएं:

  • वीसीसी ==> 3.3V
  • Gnd ==> Gnd
  • डेटा ==> GPIO 4 (लाइब्रेरी के लिए डिफ़ॉल्ट)

पायथन पुस्तकालय स्थापित करना:

अगला, आइए पायथन पुस्तकालय स्थापित करें जो सेंसर को संभालेगा:

sudo pip3 w1thermsensor स्थापित करें

सेंसर का परीक्षण करने के लिए स्क्रिप्ट चलाने से पहले, जांच लें कि आपके आरपीआई में "1-वायर" इंटरफ़ेस सक्षम है या नहीं (प्रिंट स्क्रीन के ऊपर देखें)

कॉन्फ़िगरेशन बदलने के बाद, अपने आरपीआई को पुनरारंभ करना न भूलें

सेंसर का परीक्षण:

सेंसर के परीक्षण के लिए एक साधारण पायथन लिपि का उपयोग किया जा सकता है:

आयात समय

w1thermsensor से आयात करें

चरण 4: BMP180 स्थापित करना

BMP180 स्थापित करना
BMP180 स्थापित करना
BMP180 स्थापित करना
BMP180 स्थापित करना
BMP180 स्थापित करना
BMP180 स्थापित करना

सेंसर अवलोकन:

BMP180, BMP085 का उत्तराधिकारी है, जो उपभोक्ता अनुप्रयोगों के लिए उच्च परिशुद्धता डिजिटल दबाव सेंसर की एक नई पीढ़ी है। BMP180 के अल्ट्रा-लो पावर, लो वोल्टेज इलेक्ट्रॉनिक्स को मोबाइल फोन, पीडीए, जीपीएस नेविगेशन डिवाइस और बाहरी उपकरणों में उपयोग के लिए अनुकूलित किया गया है। तेजी से रूपांतरण के समय केवल 0.25 मीटर की कम ऊंचाई के शोर के साथ, बीएमपी 180 बेहतर प्रदर्शन प्रदान करता है। I2C इंटरफ़ेस एक माइक्रोकंट्रोलर के साथ आसान सिस्टम एकीकरण की अनुमति देता है। BMP180 EMC मजबूती, उच्च सटीकता और रैखिकता के साथ-साथ दीर्घकालिक स्थिरता के लिए पीजो-प्रतिरोधक तकनीक पर आधारित है।

पूरा बीएमपी डेटाशीट यहां पाया जा सकता है: बीएमपी 180 - डिजिटल प्रेशर सेंसर

सेंसर स्थापना:उपरोक्त आरेख का पालन करें और कनेक्शन बनाएं:

  • विन ==> 3.3V
  • जीएनडी ==> जीएनडी
  • एससीएल ==> जीपीआईओ 3
  • एसडीए ==> जीपीआईओ 2

I2C इंटरफ़ेस को सक्षम करना

आरपीआई कॉन्फ़िगरेशन पर जाएं और पुष्टि करें कि I2C इंटरफ़ेस सक्षम है। यदि नहीं, तो इसे सक्षम करें और आरपीआई को पुनरारंभ करें।

बीएमपी 180. का उपयोग करना

यदि सब कुछ ठीक से स्थापित किया गया है, और सब कुछ ठीक से जुड़ा हुआ है, तो अब आप अपने पीआई को चालू करने के लिए तैयार हैं और यह देखना शुरू कर सकते हैं कि बीएमपी 180 आपको आपके आस-पास की दुनिया के बारे में क्या बता रहा है।

पहली बात यह जांचना है कि पीआई आपके बीएमपी 180 को देखता है या नहीं। टर्मिनल विंडो में निम्न का प्रयास करें:

sudo i2cdetect -y 1

यदि आदेश काम करता है, तो आपको उपरोक्त टर्मिनल प्रिंटस्क्रीन के समान कुछ देखना चाहिए, यह दर्शाता है कि बीएमपी 180 चैनल '77' पर है।

BMP180 लाइब्रेरी स्थापित करना:

पुस्तकालय स्थापित करने के लिए एक निर्देशिका बनाएँ:

mkdir BMP180_Sensorcd BMP180_Sensor

अपने ब्राउज़र पर, Adafruit GIThub पर जाएँ:

github.com/adafruit/Adafruit_Python_BMP

दाईं ओर डाउनलोड ज़िप लिंक पर क्लिक करके लाइब्रेरी डाउनलोड करें और अपने रास्पबेरी पाई बनाए गए फ़ोल्डर पर संग्रह को अनज़िप करें। फिर बनाए गए सबफ़ोल्डर पर जाएँ और लाइब्रेरी की निर्देशिका में निम्न कमांड निष्पादित करें:

sudo python3 setup.py install

अपना पायथन आईडीई खोलें और एक परीक्षण कार्यक्रम बनाएं और इसे नाम दें, उदाहरण के लिए BMP180Test.py

आयात Adafruit_BMP. BMP085 के रूप में BMP085sensor = BMP085. BMP085() प्रिंट ('Temp = {0:0.2f} *C'.format(sensor.read_temperature())) प्रिंट ('प्रेशर = {0:0.2f} Pa'। प्रारूप (सेंसर.रीड_प्रेशर ())) प्रिंट ('ऊंचाई = {0:0.2f} मीटर'। प्रारूप (सेंसर.read_altitude ())) प्रिंट ('सीलेवल प्रेशर = {0:0.2f} पा'। प्रारूप (सेंसर).read_sealevel_ दबाव ()))

परीक्षण कार्यक्रम निष्पादित करें:

python3 BMP180Test.py

उपरोक्त टर्मिनल प्रिंट स्क्रीन परिणाम दिखाती है।

ध्यान दें कि वह दबाव पा (पास्कल) में प्रस्तुत किया जाता है। इस इकाई के बारे में बेहतर ढंग से समझने के लिए अगला चरण देखें।

चरण 5: BMP180. के साथ मौसम और ऊंचाई को मापना

BMP180. के साथ मौसम और ऊंचाई मापना
BMP180. के साथ मौसम और ऊंचाई मापना

आइए बीएमपी रीडिंग के साथ हमें क्या मिलेगा, इसके बारे में थोड़ा और समझने के लिए समय निकालें। आप ट्यूटोरियल के इस भाग को छोड़ सकते हैं, या बाद में वापस आ सकते हैं।

यदि आप सेंसर रीडिंग के बारे में अधिक जानना चाहते हैं, तो कृपया इस महान ट्यूटोरियल पर जाएँ:https://learn.sparkfun.com/tutorials/bmp180-barome…

BMP180 को वायुमंडलीय दबाव को सटीक रूप से मापने के लिए डिज़ाइन किया गया था। वायुमंडलीय दबाव मौसम और ऊंचाई दोनों के साथ बदलता रहता है।

वायुमंडलीय दबाव क्या है?

वायुमंडलीय दबाव की परिभाषा एक ऐसा बल है जो आपके आस-पास की हवा हर चीज पर लगा रही है। वायुमंडल में गैसों का भार वायुमंडलीय दबाव बनाता है। दबाव की एक सामान्य इकाई "पाउंड प्रति वर्ग इंच" या साई है। हम यहां अंतर्राष्ट्रीय संकेतन का उपयोग करेंगे, जो कि न्यूटन प्रति वर्ग मीटर है, जिसे पास्कल (Pa) कहा जाता है।

यदि आप 1 सेमी चौड़ा वायु स्तंभ लेते हैं तो इसका वजन लगभग 1 किलोग्राम होगा

यह भार, उस स्तंभ के पदचिह्न पर दबाव डालता है, वायुमंडलीय दबाव बनाता है जिसे हम BMP180 जैसे सेंसर से माप सकते हैं। क्योंकि हवा के उस सेमी-चौड़े स्तंभ का वजन लगभग 1Kg होता है, इसका मतलब यह है कि औसत समुद्र स्तर का दबाव लगभग १०१३२५ पास्कल है, या बेहतर, १०१३.२५ hPa (1 hPa को मिलिबार-एमबार के रूप में भी जाना जाता है)। यह आपके द्वारा चढ़ने वाले प्रत्येक ३०० मीटर के लिए लगभग ४% गिर जाएगा। जितना अधिक आप प्राप्त करेंगे, उतना ही कम दबाव आप देखेंगे, क्योंकि वायुमंडल के शीर्ष पर स्थित स्तंभ उतना ही छोटा है और इसलिए उसका वजन कम है। यह जानना उपयोगी है, क्योंकि दबाव को मापकर और कुछ गणित करके, आप अपनी ऊंचाई निर्धारित कर सकते हैं।

3, 810 मीटर पर हवा का दबाव समुद्र तल से केवल आधा है।

BMP180 पास्कल (Pa) में एब्सोल्यूट प्रेशर आउटपुट करता है। एक पास्कल दबाव की एक बहुत छोटी मात्रा है, लगभग वह मात्रा जो कागज की एक शीट एक मेज पर आराम करेगी। आप अधिक बार हेक्टोपास्कल (1 hPa = 100 Pa) में माप देखेंगे। यहां उपयोग की जाने वाली लाइब्रेरी hPa में आउटपुट फ्लोटिंग-पॉइंट मान प्रदान करती है, जो एक मिलीबार (mbar) के बराबर होता है।

यहाँ अन्य दबाव इकाइयों के लिए कुछ रूपांतरण दिए गए हैं:

  • 1 एचपीए = १०० पा = १ एमबार = ०.००१ बार
  • 1 hPa = 0.75006168 Torr
  • 1 hPa = 0.01450377 साई (पाउंड प्रति वर्ग इंच)
  • 1 एचपीए = 0.02953337 एचजी (पारा का इंच)
  • 1 एचपीए = 0.00098692 एटीएम (मानक वायुमंडल)

तापमान प्रभाव

चूंकि तापमान गैस के घनत्व को प्रभावित करता है, और घनत्व गैस के द्रव्यमान को प्रभावित करता है, और द्रव्यमान दबाव (वाह) को प्रभावित करता है, वायुमंडलीय दबाव तापमान के साथ नाटकीय रूप से बदल जाएगा। पायलट इसे "घनत्व ऊंचाई" के रूप में जानते हैं, जो गर्म दिन की तुलना में ठंडे दिन पर उड़ान भरना आसान बनाता है क्योंकि हवा घनी होती है और इसका वायुगतिकीय प्रभाव अधिक होता है। तापमान की भरपाई के लिए, BMP180 में एक अच्छा तापमान सेंसर के साथ-साथ एक दबाव सेंसर भी शामिल है।

एक दबाव रीडिंग करने के लिए, आप पहले एक तापमान रीडिंग लेते हैं, फिर एक अंतिम तापमान-मुआवजा दबाव माप के साथ आने के लिए उसे एक कच्चे दबाव रीडिंग के साथ जोड़ते हैं। (पुस्तकालय यह सब बहुत आसान बनाता है।)

निरपेक्ष दबाव मापना

यदि आपके आवेदन को पूर्ण दबाव मापने की आवश्यकता है, तो आपको केवल एक तापमान रीडिंग प्राप्त करनी है, फिर एक दबाव रीडिंग करना है (विवरण के लिए उदाहरण स्केच देखें)। अंतिम दबाव रीडिंग hPa = mbar में होगी। यदि आप चाहें, तो आप उपरोक्त रूपांतरण कारकों का उपयोग करके इसे एक अलग इकाई में परिवर्तित कर सकते हैं।

ध्यान दें कि वातावरण का पूर्ण दबाव आपकी ऊंचाई और वर्तमान मौसम पैटर्न दोनों के साथ अलग-अलग होगा, दोनों ही मापने के लिए उपयोगी चीजें हैं।

मौसम अवलोकन

पृथ्वी पर किसी भी स्थान पर (या वातावरण के साथ कहीं भी) वायुमंडलीय दबाव स्थिर नहीं होता है। पृथ्वी के घूमने, अक्ष के झुकाव और कई अन्य कारकों के बीच जटिल अंतःक्रिया के परिणामस्वरूप उच्च और निम्न दबाव के क्षेत्रों में गति होती है, जो बदले में मौसम में बदलाव का कारण बनती है जो हम हर दिन देखते हैं। दबाव में परिवर्तन को देखकर, आप मौसम में अल्पकालिक परिवर्तनों की भविष्यवाणी कर सकते हैं। उदाहरण के लिए, कम दबाव का मतलब आमतौर पर गीला मौसम या तूफान आ रहा है (एक कम दबाव प्रणाली आगे बढ़ रही है)। बढ़ते दबाव का आमतौर पर मतलब है कि साफ मौसम आ रहा है (एक उच्च दबाव प्रणाली आगे बढ़ रही है)। लेकिन याद रखें कि वायुमंडलीय दबाव भी ऊंचाई के साथ बदलता रहता है। मेरे घर में पूर्ण दबाव, चिली में लो बार्नेचिया (ऊंचाई 950 मीटर) हमेशा सैन फ्रांसिस्को में पूर्ण दबाव से कम होगा, उदाहरण के लिए (2 मीटर से कम, लगभग समुद्र तल)। यदि मौसम स्टेशनों ने अभी-अभी अपने पूर्ण दबाव की सूचना दी है, तो एक स्थान से दूसरे स्थान पर सीधे दबाव माप की तुलना करना मुश्किल होगा (और बड़े पैमाने पर मौसम की भविष्यवाणी यथासंभव अधिक से अधिक स्टेशनों से माप पर निर्भर करती है)।

इस समस्या को हल करने के लिए, मौसम केंद्र हमेशा अपने रिपोर्ट किए गए दबाव रीडिंग से ऊंचाई के प्रभावों को गणितीय रूप से बराबर स्थिर दबाव जोड़कर हटा देते हैं ताकि ऐसा लगे कि रीडिंग समुद्र के स्तर पर ली गई थी। जब आप ऐसा करते हैं, तो सैन फ़्रांसिस्को में लो बार्नेशिया की तुलना में उच्च रीडिंग हमेशा मौसम के मिजाज के कारण होगी, न कि ऊंचाई के कारण।

ऐसा करने के लिए, पुस्तकालय में समुद्र तल (पी, ए) नामक एक समारोह है। यह एचपीए में पूर्ण दबाव (पी) लेता है, और स्टेशन की वर्तमान ऊंचाई (ए) मीटर में, और दबाव से ऊंचाई के प्रभाव को हटा देता है। आप इस फ़ंक्शन के आउटपुट का उपयोग अपने मौसम की रीडिंग की तुलना दुनिया भर के अन्य स्टेशनों से सीधे करने के लिए कर सकते हैं।

ऊंचाई निर्धारित करना

चूंकि दबाव ऊंचाई के साथ बदलता रहता है, आप ऊंचाई मापने के लिए दबाव सेंसर का उपयोग कर सकते हैं (कुछ चेतावनी के साथ)। समुद्र तल पर वायुमंडल का औसत दबाव १०१३.२५ hPa (या mbar) है। जब आप अंतरिक्ष के निर्वात की ओर बढ़ते हैं तो यह शून्य हो जाता है। चूंकि इस ड्रॉप-ऑफ की वक्र अच्छी तरह से समझी जाती है, आप एक विशिष्ट समीकरण का उपयोग करके दो दबाव माप (पी और पी 0) के बीच ऊंचाई अंतर की गणना कर सकते हैं।

यदि आप समुद्र तल के दबाव (1013.25 hPa) को आधारभूत दबाव (p0) के रूप में उपयोग करते हैं, तो समीकरण का आउटपुट समुद्र तल से आपकी वर्तमान ऊंचाई होगी। पुस्तकालय में एक फ़ंक्शन है जिसे ऊंचाई (पी, पी 0) कहा जाता है जो आपको "गणना की गई ऊंचाई" प्राप्त करने देता है।

उपरोक्त स्पष्टीकरण बीएमपी 180 स्पार्कफुन ट्यूटोरियल से निकाला गया था।

चरण 6: पूर्ण एचडब्ल्यू

पूरा एचडब्ल्यू
पूरा एचडब्ल्यू

चरण 7: थिंगस्पीक को डेटा भेजना

थिंगस्पीक को डेटा भेजना
थिंगस्पीक को डेटा भेजना

इस बिंदु पर, हमने सीखा कि सभी 3 सेंसर से डेटा कैप्चर करने के लिए आरपीआई कैसे तैयार किया जाए, उन्हें टर्मिनल पर प्रिंट किया जाए। अब, यह देखने का समय है कि उन डेटा को IoT प्लेटफॉर्म, थिंगस्पीक पर कैसे भेजा जाए।

चलो शुरू करें!

सबसे पहले, आपके पास ThinkSpeak.com पर एक खाता होना चाहिए

चैनल बनाने के लिए निर्देशों का पालन करें और अपनी चैनल आईडी को नोट करें और एपीआई कुंजी लिखें

मेरे GitHub से पायथन स्क्रिप्ट डाउनलोड करें: localData ToTS_v1_EXT.py

आइए कोड के सबसे महत्वपूर्ण भागों पर टिप्पणी करें:

सबसे पहले, थिंगस्पीक लाइब्रेरी को आयात करें, वाईफाई क्लाइंट को परिभाषित करें और अपने स्थानीय राउटर और थिंकस्पीक क्रेडेंशियल्स को परिभाषित करें:

आयात बातेंपीक

थिंगस्पीक के साथ संवाद करने के कई तरीके हैं, सबसे आसान तरीका मिकोलाज च्वालिज़ और कीथ एलिस द्वारा विकसित थिंग्सपीक डॉट कॉम एपीआई के लिए क्लाइंट लाइब्रेरी का उपयोग करना होगा।

पुस्तकालय को https://github.com/mchwalisz/thingspeak से डाउनलोड किया जा सकता है या टर्मिनल पर पीआईपी का उपयोग किया जा सकता है:

sudo pip3 चीजों को स्थापित करें

इसके बाद, स्क्रिप्ट के अंदर, थिंगस्पीक चैनल क्रेडेंशियल अपडेट करें

chId = 9999999 # अपनी चैनल आईडी के साथ दर्ज करें

tsKey='अपने चैनल की कुंजी के साथ दर्ज करें'

अब, आइए 3 सेंसर को इनिशियलाइज़ करें:

# DS18B20 1-वायर लाइब्रेरी

w1thermsensor आयात से W1ThermSensor ds18b20Sensor = W1ThermSensor() # डिफ़ॉल्ट रूप से GPIO 4 का उपयोग लाइब्रेरी द्वारा किया जाता है # DHT22 लाइब्रेरी आयात Adafruit_DHT DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 # BMP180 लाइब्रेरी आयात Adafruit_BMP के रूप में BMP5085 bmp185 या BMP5085 bmp185 वैश्विक चर "altReal" को अपडेट करते हुए आपको वास्तविक ऊंचाई को परिभाषित करना चाहिए जहां आपका मौसम स्टेशन स्थित है। मेरे मामले में, मेरा स्टेशन समुद्र तल से 950 मीटर ऊपर स्थित है

वैश्विक altReal

ऑल्ट रियल = 950

एक बार इनपुट के रूप में स्टेशन की वास्तविक ऊंचाई के साथ प्रवेश करने के बाद, हम bmp180GetData (ऊंचाई) फ़ंक्शन का उपयोग करके पूर्ण दबाव, समुद्र स्तर का दबाव, तापमान और ऊंचाई प्राप्त कर सकते हैं:

def bmp180GetData (ऊंचाई):

अस्थायी = bmp180Sensor.read_temperature () अध्यक्ष = bmp180Sensor.read_दबाव () alt=bmp180Sensor.read_altitude () presSeaLevel = राष्ट्रपति / पाउ (1.0 - ऊंचाई / 44330.0, 5.255) अस्थायी = गोल (अस्थायी, 1) अध्यक्ष = गोल (पूर्व / 100), 2) # hPa (या mbar) alt=राउंड (alt) presSeaLevel = राउंड (presSeaLevel/100, 2) में निरपेक्ष दबाव hPa (या mbar) रिटर्न टेम्प, प्रेस, ऑल्ट, प्रेससीलेवल में पूर्ण दबाव

फ़ंक्शन getLocalData(), हमारे स्टेशन द्वारा कैप्चर किए गए सभी स्थानीय डेटा को वापस कर देगा:

डीईएफ़ getLocalData ():

ग्लोबल टाइमस्ट्रिंग ग्लोबल हमलैब ग्लोबल टेम्पेक्स्ट ग्लोबल टेम्पलैब ग्लोबल प्रेसएसएल ग्लोबल ऑल्टलैब ग्लोबल प्रेसएब्स # अभी पढ़ने का समय प्राप्त करें = datetime.datetime.now() टाइमस्ट्रिंग = now.strftime("%Y-%m-%d %H:%M") # बाहरी तापमान पढ़ें (1 मीटर दूरी) tempExt = राउंड (ds18b20Sensor.get_temperature(), 1) tempLab, presAbs, altLab, presSL = bmp180GetData (altReal) humDHT, tempDHT = Adafruit_DHT.read_retry (DHT22Sensor, DHTpin) कोई नहीं है अगर humDHT और tempDHT कोई नहीं है: humLab = गोल (humDHT

एक बार जब आपके पास उपरोक्त कार्यों द्वारा कब्जा कर लिया गया सभी डेटा हो, तो आपको उन्हें थिंगस्पीक पर भेजना होगा। आप इसे SendDataTs() फ़ंक्शन का उपयोग करके करेंगे:

def SendDataTs ():

डेटा = {"फ़ील्ड1": tempLab, "फ़ील्ड2": tempExt, "फ़ील्ड3": humLab, "फ़ील्ड4": प्रेसएसएल, "फ़ील्ड5": altLab} ts.update (डेटा) प्रिंट ("[सूचना] डेटा 5 फ़ील्ड के लिए भेजा गया: ", टेम्पलैब, टेम्पेक्स्ट, हमलैब, प्रेसएसएल, ऑल्टलैब)

अपने चैनल डेटा अपडेट के साथ, स्क्रिप्ट को सहेजें और इसे अपने टर्मिनल पर निष्पादित करें:

sudo Python3 localData_ToTs_v1_EXT.py

संचार प्रोटोकॉल के बारे में

ध्यान दें कि "थिंग्सपीक लाइब्रेरी" का उपयोग करके, "अनुरोध पुस्तकालय" आयात किया जाता है, जो कि एक Apache2 लाइसेंस प्राप्त HTTP पुस्तकालय है, जिसे पायथन में लिखा गया है। आधिकारिक अनुरोध स्थापना दस्तावेज यहां पाया जा सकता है:

docs.python-requests.org/en/latest/user/install/

यदि आवश्यक हो, तो अपनी स्क्रिप्ट चलाने से पहले, आप सत्यापित कर सकते हैं कि अनुरोध पुस्तकालय स्थापित है या नहीं:

sudo pip3 अनुरोध स्थापित करें

वैकल्पिक रूप से आप MTTQ का उपयोग ThingSpeak को डेटा भेजने के लिए एक विधि के रूप में कर सकते हैं। एमक्यूटीटी एचटीटीपी से अलग है, एक बार इसे विशेष रूप से हल्के वजन के लिए डिज़ाइन किया गया है और कम रैम और सीपीयू प्रदर्शन वाले एम्बेडेड डिवाइसों के लिए अभिप्रेत है। साथ ही, ज्यादातर मामलों में, MQTT कम बैंडविड्थ का उपयोग करता है।

इस ट्यूटोरियल को देखें: अधिक विवरण के लिए रास्पबेरी पाई पर एमक्यूटीटी का उपयोग करके थिंगस्पीक चैनल को अपडेट करें।

चरण 8: ESP8266. का उपयोग करके दूरस्थ डेटा को ThingSpeak पर भेजना

ESP8266. का उपयोग करके दूरस्थ डेटा को ThingSpeak पर भेजना
ESP8266. का उपयोग करके दूरस्थ डेटा को ThingSpeak पर भेजना
ESP8266. का उपयोग करके दूरस्थ डेटा को ThingSpeak पर भेजना
ESP8266. का उपयोग करके दूरस्थ डेटा को ThingSpeak पर भेजना

इस चरण के लिए, हम उसी HW का उपयोग करेंगे जिसे muy ट्यूटोरियल में समझाया गया था:

IOT मेड ईज़ी: रिमोट वेदर डेटा कैप्चर करना: यूवी और एयर टेम्परेचर और ह्यूमिडिटी

हम यहां जिस कोड का उपयोग करेंगे, वह मूल रूप से उसी ट्यूटोरियल में उपयोग किया गया है। आइए कोड के सबसे महत्वपूर्ण भागों पर टिप्पणी करें:

सबसे पहले, आइए ESP8266 लाइब्रेरी को कॉल करें, वाईफाई क्लाइंट को परिभाषित करें और अपने स्थानीय राउटर और थिंकस्पीक क्रेडेंशियल्स को परिभाषित करें:

/* NodeMCU ESP12-E */

# वाईफाई क्लाइंट क्लाइंट शामिल करें; const char* MY_SSID = "अपने SSDID के साथ दर्ज करें"; const char* MY_PWD = "अपने पासवर्ड के साथ दर्ज करें"; /* थिंकस्पीक */ const char* TS_SERVER = "api.thingspeak.com"; स्ट्रिंग TS_API_KEY = "अपनी लेखन कुंजी के साथ दर्ज करें";

दूसरा, आइए IoT परियोजनाओं के लिए एक बहुत ही महत्वपूर्ण पुस्तकालय शामिल करें: SimpleTimer.h:

/* टाइमर */

#SimpleTimer टाइमर शामिल करें;

तीसरा, सेटअप () के दौरान, हम सीरियल कम्युनिकेशन शुरू करेंगे, फंक्शन कनेक्टवाईफाई () को कॉल करेंगे और टाइमर्स को परिभाषित करेंगे। ध्यान दें कि कोड की लाइन: timer.setInterval(60000L, sendDataTS); थिंकस्पीक चैनल पर डेटा अपलोड करने के लिए प्रत्येक 60 सेकंड में फ़ंक्शन sendDataTS() को कॉल करेगा।

व्यर्थ व्यवस्था()

{… सीरियल.बेगिन (115200); देरी(10); … ConnectWifi (); timer.setInterval(६००००L, SendDataTS); … }

अंत में, लेकिन कम से कम, लूप () के दौरान, टाइमर को आरंभ करने के लिए केवल एक ही कमांड की आवश्यकता होती है और बस!

शून्य लूप ()

{… टाइमर.रन (); // सरल टाइमर शुरू करता है }

नीचे, आप थिंकस्पीक संचार को संभालने के लिए उपयोग किए जाने वाले दो महत्वपूर्ण कार्यों को देख सकते हैं:

आपके वाईफाई नेटवर्क के साथ ESP12-E कनेक्शन:

/***************************************************

* वाईफाई कनेक्ट करना ******************************** ***/ शून्य कनेक्ट वाईफाई () { सीरियल.प्रिंट ("कनेक्टिंग टू" + * MY_SSID); वाईफाई.बेगिन (MY_SSID, MY_PWD); जबकि (WiFi.status() != WL_CONNECTED) {देरी (1000); सीरियल.प्रिंट ("।"); } सीरियल.प्रिंट्लन (""); Serial.println ("वाईफाई कनेक्टेड"); सीरियल.प्रिंट्लन (""); }

ESP12-E थिंकस्पीक को डेटा भेज रहा है:

***************************************************

* थिंकस्पीक चैनल को डेटा भेजना ******************************* ******/ शून्य भेजेंडेटा (शून्य) { अगर (क्लाइंट.कनेक्ट (TS_SERVER, 80)) {स्ट्रिंग पोस्टस्ट्र = TS_API_KEY; पोस्टस्ट्र + = "& फ़ील्ड ६ ="; पोस्टस्ट्र + = स्ट्रिंग (अस्थायी); पोस्टस्ट्र + = "& फ़ील्ड ७ ="; पोस्टस्ट्र + = स्ट्रिंग (हम); पोस्टस्ट्र + = "& फ़ील्ड8 ="; पोस्टस्ट्र + = स्ट्रिंग (डेटा सेंसरयूवी); पोस्टस्ट्र + = "\r\n\r\n"; क्लाइंट.प्रिंट ("पोस्ट / अपडेट HTTP / 1.1 / n"); क्लाइंट.प्रिंट ("होस्ट: api.thingspeak.com\n"); क्लाइंट.प्रिंट ("कनेक्शन: बंद करें / n"); क्लाइंट.प्रिंट ("X-THINGSPEAKAPIKEY:" + TS_API_KEY + "\ n"); client.print ("सामग्री-प्रकार: एप्लिकेशन / x-www-form-urlencoded / n"); क्लाइंट.प्रिंट ("सामग्री-लंबाई:"); क्लाइंट.प्रिंट (postStr.length ()); क्लाइंट.प्रिंट ("\ n / n"); क्लाइंट.प्रिंट (पोस्टस्ट्र); देरी (1000); } भेजा गया++; क्लाइंट.स्टॉप (); }

पूरा कोड मेरे GitHub पर पाया जा सकता है: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT

एक बार जब आपके पास अपने NodeMCU पर कोड अपलोड हो जाए। आइए बाहरी बैटरी कनेक्ट करें और सूर्य के नीचे कुछ माप करें। मैंने रिमोट स्टेशन को छत पर रख दिया और उपरोक्त तस्वीरों में दिखाए गए अनुसार ThingSpeak.com पर डेटा कैप्चर करना शुरू कर दिया।

चरण 9: अंतिम नोट्स

अंतिम नोट्स
अंतिम नोट्स

इस ट्यूटोरियल का मुख्य उद्देश्य यह दिखाना था कि रास्पबेरी पाई को थिंगस्पीक से कैसे जोड़ा जाए। यह डेटा कैप्चर करने और उन्हें IoT प्लेटफॉर्म पर लॉग इन करने के लिए बहुत अच्छा है।

अवसर का उपयोग करते हुए हमने उस विशिष्ट चैनल को डेटा भी भेजा, उन्हें एक दूरस्थ स्टेशन से ESP8266 का उपयोग करके कैप्चर किया। यह दृष्टिकोण ठीक है, लेकिन सबसे अच्छा नहीं है। क्योंकि हमारे पास एक "एसिंक्रोनस" ऑपरेशन है, कभी-कभी, दोनों, आरपीआई और ईएसपी8266 एक ही समय में (या एक छोटे अंतराल के साथ) लॉग इन करने का प्रयास करते हैं जिसे थिंगस्पीक द्वारा खारिज कर दिया जाता है। आदर्श में ESP8266 स्थानीय रूप से रास्पबेरी पाई को डेटा भेजना होगा और अंतिम सभी डेटा को संभालने के लिए जिम्मेदार होगा। ऐसा करने से, "मेन स्टेशन" (रास्पबेरी पाई), 3 काम कर सकता है:

  • स्थानीय डेटाबेस पर सभी डेटा लॉग करें
  • एक स्थानीय वेबपेज पर सभी डेटा प्रस्तुत करें (उपरोक्त फोटो में दिखाए गए फ्लास्क का उपयोग करके)
  • एक ही समय में सभी डेटा को ThingSpeak पर भेजना।

भविष्य के ट्यूटोरियल में, हम उन विकल्पों का पता लगाएंगे।

चरण 10: निष्कर्ष

निष्कर्ष
निष्कर्ष

हमेशा की तरह, मुझे आशा है कि यह परियोजना दूसरों को इलेक्ट्रॉनिक्स की रोमांचक दुनिया में अपना रास्ता खोजने में मदद कर सकती है!

विवरण और अंतिम कोड के लिए, कृपया मेरे GitHub डिपॉजिटरी पर जाएँ: RPi-NodeMCU-Weather-Station

अधिक परियोजनाओं के लिए, कृपया मेरे ब्लॉग पर जाएँ: MJRoBot.org

बने रहें! अगला ट्यूटोरियल हम रास्पबेरी पाई वेब सर्वर के आधार पर एक दूरस्थ मौसम स्टेशन से एक केंद्रीय एक को डेटा भेजेंगे:

छवि
छवि

दुनिया के दक्षिण से Saludos!

मेरे अगले निर्देश में मिलते हैं!

शुक्रिया, मार्सेलो

सिफारिश की: