विषयसूची:

ग्राफाना और रास्पबेरी पाई का उपयोग करके वायु गुणवत्ता को ट्रैक करें: 7 कदम
ग्राफाना और रास्पबेरी पाई का उपयोग करके वायु गुणवत्ता को ट्रैक करें: 7 कदम

वीडियो: ग्राफाना और रास्पबेरी पाई का उपयोग करके वायु गुणवत्ता को ट्रैक करें: 7 कदम

वीडियो: ग्राफाना और रास्पबेरी पाई का उपयोग करके वायु गुणवत्ता को ट्रैक करें: 7 कदम
वीडियो: Build an IIoT Solution using AWS Services | Monitor using Grafana 2024, नवंबर
Anonim
ग्राफाना और रास्पबेरी पाई का उपयोग करके वायु गुणवत्ता को ट्रैक करें
ग्राफाना और रास्पबेरी पाई का उपयोग करके वायु गुणवत्ता को ट्रैक करें

मैं एक छोटे से आईओटी प्रोजेक्ट की तलाश में था और एक मित्र ने सिफारिश की कि मैं इस ट्यूटोरियल को देखूं:

dzone.com/articles/raspberry-pi-iot-sensor…

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

मैं एयर सेंसर्स के एमक्यू* मॉडल की प्रभावशीलता और कुछ हद तक सीमा में भी जाता हूं। MQ* सेंसर सस्ते और काफी प्रभावी हैं, और इन्हें स्थापित करना बेहद आसान है।

कुल मिलाकर यह आपको सबसे सरल तरीके से एक Arduino को इंटरनेट से जोड़ने में आरंभ करने में मदद करेगा, और लाइटर फुटप्रिंट मॉड्यूल (पुनः: ESP8266) का उपयोग करने का तरीका निर्धारित करता है।

मज़े करो!

चरण 1: उपकरण + सेट अप

उपकरण

  • रास्पबेरी पाई रास्पियन के साथ स्थापित
  • रास्पबेरी पाई बिजली की आपूर्ति
  • Arduino Uno/समकक्ष
  • पुरुष से पुरुष यूएसबी टाइप बी से टाइप ए (आपके Arduino के साथ आना चाहिए)
  • कोई भी MQ* सेंसर (मैंने MQ-2, 4, 5, और 135 का उपयोग किया)
  • मिश्रित जम्पर तार
  • मिनी ब्रेडबोर्ड

सेट अप

यह ट्यूटोरियल Arduino और रास्पबेरी पाई का उपयोग करने के लिए एक सौम्य परिचय के रूप में है - यह यह जानने में मदद करेगा कि लिनक्स टर्मिनल का उपयोग कैसे करें। हालाँकि, मुझे Arduino या रास्पबेरी पाई पर काम करने का अधिक अनुभव नहीं है - आपको वास्तव में प्रदान किए गए उपकरण और एक जिज्ञासु दृष्टिकोण की आवश्यकता है।

  • आपको इस ट्यूटोरियल के चरणों को पूरा करना होगा।
  • मेरा सुझाव है कि आप रास्पबेरी पाई के साथ इंटरफेस करने के लिए सिक्योर शेल (एसएसएच) का उपयोग करें, क्योंकि इससे आप आसानी से कमांड इनपुट कर सकते हैं। एसएसएच के माध्यम से कनेक्ट करना अलग है चाहे आप विंडोज, लिनक्स या मैक का उपयोग कर रहे हों। एसएसएच के संबंध में लिनक्स और मैक का उपयोग करना बहुत आसान है (एसएसएच खोलने का आदेश सचमुच एसएसएच है)। विंडोज के लिए पुट्टी देखें। मेरा सुझाव है कि आप परियोजना के दौरान अपने सत्र को बनाए रखने के तरीके के रूप में स्क्रीन की जाँच करें।
  • आपको रास्पियन पर पायथन स्थापित करने की भी आवश्यकता होगी। जब मैंने इन चरणों को पूरा किया, तो मैंने एक पुराने एसडी कार्ड की एक प्रति बनाई, जो मैंने पिछले प्रोजेक्ट के आसपास पड़ी थी, जिसमें पहले से ही पायथन स्थापित था। यदि आपके NOOBS/Raspbian के वितरण में Python 3.7 या उससे ऊपर का संस्करण नहीं है, तो स्रोत से Python को संकलित करने के लिए इन चरणों की जाँच करें।
  • गिट से परिचित हों और इसे स्थापित करें यदि यह आपके रास्पियन के वितरण में पहले से स्थापित नहीं है।

चरण 2: सर्किट की स्थापना

सर्किट की स्थापना
सर्किट की स्थापना

एक सर्किट है जिसे आपको Arduino में स्थापित करने की आवश्यकता होगी।

मैंने एक योजनाबद्ध प्रदान किया है जिसे आप संदर्भ के रूप में उपयोग कर सकते हैं।

सभी MQ-* गैस सेंसर की खूबी यह है कि एक बार 5 वोल्ट और ग्राउंड कनेक्शन बन जाने के बाद, Arduino के एनालॉग पिन का इनपुट प्रतिरोध सेंसर को सही ढंग से काम करने की अनुमति देता है।

यह सुनिश्चित करने के लिए सावधान रहें कि सेंसर में ब्रेकआउट बोर्ड से एनालॉग कनेक्शन Arduino से जुड़ा है न कि डिजिटल कनेक्शन से। यदि आप परीक्षण करते समय मूल्यों की एक बहुत ही संकीर्ण श्रेणी का सामना कर रहे हैं, तो मेरा सुझाव है कि आप पहले यहां अपना कनेक्शन जांचें।

चरण 3: Arduino कोड और चमकती

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

इस सेक्शन के अंत में कॉपी/पेस्ट करने के लिए कोड को चेक करें।

कोड क्या करता है

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

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

Arduino, एक बार डेटा के लिए अनुरोध प्राप्त करने के बाद, आउटपुट को GET पैरामीटर के रूप में प्रारूपित करेगा - यह HTTP विधियों से संबंधित है और यह केवल एक डिज़ाइन विकल्प है। यदि आप सीरियल पोर्ट के माध्यम से Arduino से संचार स्कीमा डिज़ाइन करना चाहते हैं, तो आप आसानी से किसी और चीज़ के लिए जा सकते हैं, जब तक आप इसे डिज़ाइन करते हैं, इसलिए डेटा उचित रूप से अलग हो जाता है। मैंने GET को चुना क्योंकि यह परिचित और मजबूत है।

सरल परीक्षण…

एक बार जब आपके पास Arduino फ्लैश हो जाए और कोड चल रहा हो, तो Arduino IDE का सीरियल मॉनिटर खोलें। यदि आप एकल वर्ण "H" भेजते हैं (इसकी पूंजी सुनिश्चित करें!) तो आपको डेटा का पेलोड मिल जाएगा। बधाई हो, यह काम करता है!

MQ-* डेटा का एक नमूना, अतुल्यकालिक संग्राहक

#शामिल
इंट एमक्यू२ = ए२;
इंट एमक्यू४ = ए३;
इंट एमक्यू5 = ए4;
इंट एमक्यू१३५ = ए५;
इंट इनकमिंगबाइट;
व्यर्थ व्यवस्था() {
पिनमोड (एमक्यू 2, इनपुट);
पिनमोड (एमक्यू 4, इनपुट);
पिनमोड (एमक्यू 5, इनपुट);
पिनमोड (mq135, INPUT);
सीरियल.बेगिन (९६००);
}
/* valuePrint इस लेबल के लिए मान प्रिंट करता है।
* साइड इफेक्ट ही पैदा करता है।
*/
voidvaluePrint (स्ट्रिंग लेबल, इंट रीडिंग) {
सीरियल.प्रिंट (लेबल);
सीरियल.प्रिंट ("=");
सीरियल.प्रिंट (पढ़ना);
}
शून्य लूप () {
// देखें कि क्या आने वाला सीरियल डेटा है:
अगर (सीरियल उपलब्ध ()> 0) {
// सीरियल बफर में सबसे पुरानी बाइट पढ़ें:
// "जब आप Serial.read को कॉल करते हैं तो एक बाइट प्राप्त बफर से हटा दिया जाता है और आपके कोड पर वापस आ जाता है"
इनकमिंगबाइट = सीरियल.रीड ();
// यदि यह एक कैपिटल H (ASCII 72) है, तो मानों को पढ़ें और उन्हें रास्पबेरी होस्ट को भेजें।
// TODO: सुनिश्चित करें कि संदेश हमेशा समान लंबाई का हो, हर बार
अगर (इनकमिंगबाइट == 72) {
int mq2Reading = analogRead (mq2);
int mq4Reading = analogRead (mq4);
int mq5Reading = analogRead (mq5);
int mq135Reading = analogRead (mq135);
सीरियल.प्रिंट ("?");
वैल्यूप्रिंट ("एमक्यू 2", एमक्यू 2 रीडिंग);
सीरियल.प्रिंट ("और");
वैल्यूप्रिंट ("एमक्यू 4", एमक्यू 4 रीडिंग);
सीरियल.प्रिंट ("और");
वैल्यूप्रिंट ("एमक्यू 5", एमक्यू 5 रीडिंग);
सीरियल.प्रिंट ("और");
वैल्यूप्रिंट ("एमक्यू 135", एमक्यू 135 रीडिंग);
सीरियल.प्रिंट ("\ n");
}
}
// केवल हर सेकेंड में सीरियल पढ़ें
देरी (1000);
}

देखें rawmain.cpp ❤ के साथ GitHub द्वारा होस्ट किया गया

चरण 4: रास्पबेरी पाई कोड

अब जब आपने रास्पबेरी पाई को https://dzone.com/articles/raspberry-pi-iot-sensor… के अनुसार कॉन्फ़िगर किया है, तो अब आप रास्पबेरी क्लाइंट कोड चला सकते हैं जो MQTT के माध्यम से हमारे डेटाबेस को डेटा भेजेगा, जो भी Grafana से जुड़ता है।

  1. सुनिश्चित करें कि आपका रास्पबेरी इंटरनेट से जुड़ा है और फिर पूरे कोड को रास्पबेरी पाई में कॉपी करने के लिए एक git क्लोन कमांड निष्पादित करें। आपका आदेश कुछ इस तरह दिखेगा:

    गिट क्लोन

  2. रास्पबेरी पाई के टर्मिनल के भीतर, एक परिवर्तन निर्देशिका कमांड (सीडी) को "raspberry_client" में निष्पादित करें:

    सीडी रास्पबेरी_क्लाइंट.

  3. आपको वर्चुअल वातावरण* का उपयोग करना होगा। सरल। Daud

    python3 -m venv env. यह "env" नामक एक आभासी वातावरण बनाएगा जिसका उपयोग हम निर्भरता स्थापित करने के लिए करेंगे।

  4. अब, हमें अपने आभासी वातावरण में प्रवेश करने की आवश्यकता है। Daud:

    स्रोत एनवी/बिन/सक्रिय करें. अब आप प्रोजेक्ट की निर्भरता को स्थापित करने के लिए तैयार हैं।

  5. पैकेज में आपने अभी-अभी क्लोन किया है, एक फ़ाइल है जिसे आवश्यकताएँ.txt कहा जाता है। इस फ़ाइल को खोलें; आप देखेंगे कि हमें paho-mqtt और pyserial संकुल, साथ ही साथ उनके संबंधित संस्करणों की आवश्यकता है। आप फ़ाइल की सामग्री को चलाकर देख सकते हैं

    बिल्ली की आवश्यकताएं। txt. इन पैकेजों को स्थापित करने के लिए, ru

    पाइप स्थापित -r आवश्यकताएँ। txt.

  6. यह कॉन्फ़िगरेशन को लपेटता है।

वस्तुतः प्रत्येक ट्यूटोरियल जो अजगर का उपयोग करता है, वर्चुअल एनवी का उल्लेख करता है, और यहां तक कि इस छोटी परियोजना के लिए, मैं एक उल्लेख करूंगा। आभासी वातावरण आपको निर्भरता के संस्करणों को अलग करने की अनुमति देता है, साथ ही साथ आपके पायथन वर्कफ़्लो को अलग करता है - यह आपके पायथन कार्यक्षेत्र को व्यवस्थित करने का एक अच्छा तरीका है। यदि आप पहली बार वर्चुअल वातावरण का उपयोग कर रहे हैं, तो यहां उनके बारे में संक्षिप्त जानकारी प्राप्त करें।

कोड क्या करता है?…

client.py फ़ाइल हमारे स्वयं के arduinosensor सहित पुस्तकालयों का एक साधारण सेट आयात करेगी। मुख्य फ़ंक्शन में, हम Arduino से मान प्राप्त करेंगे, डेटा को MQTT ब्रोकर को प्रकाशित करेंगे, और फिर 10 सेकंड के लिए सोएंगे।

arduinosensor.py फ़ाइल सहायक विधियों का एक सेट है जो paho.mqtt लाइब्रेरी के चारों ओर लपेटती है, साथ ही Arduino के पेलोड के साथ संचार करने के लिए कुछ उपयोगी संचार स्कीमा प्रदान करती है (देखें: parse_payload)। बेशक, इस खंड के अंत में कोड संलग्न है।

एक साधारण क्लाइंट जो सीरियल मॉनिटर के माध्यम से एक arduino आइटम के साथ संचार करता है। सार्वजनिक होने पर यहां कोड खोजने की अपेक्षा करें:

fromimportlibimportimport_module
इंपोर्टोस
आयात समय
इंपोर्टर्डुइनोसेंसर
डिफमैन ():
# खुले परिभाषित ग्राहक
start_time=time.time()
जबकि सच:
पढ़ना=arduinosensor.get_values(os.environ.get('PORT', "/dev/ttyUSB0"))
arduinosensor.pub("python_client", पेलोड = रीडिंग)
टाइम.स्लीप(10.0- ((टाइम.टाइम () -स्टार्ट_टाइम)% 10.0))
अगर_नाम_=="_मुख्य_":
मुख्य()

गिटहब द्वारा ❤ के साथ होस्ट किया गया rawclient.py देखें

चरण 5: यह सब एक साथ रखना

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

सबसे पहले, Arduino को कनेक्ट करें और सही कॉन्फ़िगरेशन सेट करें:

  1. अपने रास्पबेरी पाई टर्मिनल पर, दौड़ें

    अजगर -एम serial.tools.list_ports. यह उन सभी यूएसबी पोर्टों को सूचीबद्ध करेगा जो सीरियल संचार का समर्थन करते हैं।

  2. अब, अपने Arduino में प्लग इन करें और रास्पबेरी को पहचानने के लिए लगभग 2 सेकंड प्रतीक्षा करें। में टाइपिंग

    अजगर -एम serial.tools.list_ports एक बार फिर आपको पोर्ट फिर से दिखाएंगे। आप एक अतिरिक्त लिस्टिंग शो देख सकते हैं - यदि वास्तव में ऐसा है, तो यह नई प्रविष्टि वह प्रविष्टि है जिसमें आपका Arduino जुड़ा हुआ है। यह "/ dev/ttyUSB0" होने की संभावना है।

  3. अपने आभासी वातावरण में Python3.7 client.py चलाकर अजगर कोड चलाने का प्रयास करें। कुछ सेकंड प्रतीक्षा करें (अधिकतम दस) - यदि आप एक अपवाद का सामना करते हैं, तो इसका मतलब है कि हमें रास्पबेरी पाई पर हमारे कॉम पोर्ट के लिए मान बदलना होगा। यदि आप देखते हैं कि कोड "निम्नलिखित पेलोड भेजा गया:…" से शुरू होने वाली एक पंक्ति को प्रिंट करता है, तो, ग्राफाना के साथ अंतिम चरण पर जाना आपके लिए अच्छा होगा। युक्ति: दौड़ना सुनिश्चित करें

    स्क्रीन-एस पायथन इससे पहले कि आप पायथन क्लाइंट शुरू करें, अन्यथा, जब आप अपने रास्पबेरी पीआई से अपना कनेक्शन समाप्त करते हैं, तो आप अपना चल रहा पायथन प्रोग्राम खो देंगे। तकनीकी रूप से, आपको अंतिम पैरामीटर के रूप में "पायथन" का सख्ती से उपयोग करने की आवश्यकता नहीं है, लेकिन मुझे अपने स्क्रीन सत्रों को तदनुसार नाम देना पसंद है।

    1. COM पोर्ट के लिए मान बदलने के लिए, आपको कोड चलाने से पहले एक पर्यावरण चर सेट करना होगा। python -m serial.tools.list_ports चलाते समय आपको प्राप्त होने वाले आउटपुट के हर संभावित मूल्य के लिए आपको यह प्रयास करना होगा। उदाहरण के लिए, यदि मुझे प्राप्त प्रविष्टियों की मात्रा दो थी, और निम्नलिखित थीं:

      • /देव/ttyUSB6
      • /देव/एसीएम0

तो मैं जो आदेश चलाऊंगा वह होगा:

PORT="/dev/ttyUSB6" python3.7 client.py, और अगर वह काम नहीं करता, तो मैं बाद में बर्बाद कर देता

PORT="/dev/acm0" python3.7 client.py

एक बार जब आप इन चरणों को पूरा कर लेते हैं, तो कोड हमारे इनफ्लक्सडीबी डेटाबेस इंस्टेंस के लिए डेटा प्रतिबद्ध करेगा, जो ग्राफाना से कनेक्ट होने पर, हमें अपना डैशबोर्ड देखने की अनुमति देगा।

चरण 6: ग्राफाना कॉन्फ़िगरेशन और डैशबोर्ड देखना

ग्राफाना विन्यास और डैशबोर्ड देखना
ग्राफाना विन्यास और डैशबोर्ड देखना

ठीक है, अब हम अंतिम चरण में हैं! अब हम एक साधारण डैशबोर्ड बनाने के लिए ग्राफाना का उपयोग करेंगे।

  1. अपने Grafana उदाहरण से कनेक्ट करें। चूंकि आपने मूल dzone आलेख के चरणों का पालन किया है, इसलिए आपको अपने व्यवस्थापक उपयोगकर्ता के साथ लॉग इन करने में सक्षम होना चाहिए। आगे बढ़ें और लॉगिन करें।
  2. बाएँ फलक पर, "डैशबोर्ड" आइकन पर होवर करें - चार वर्ग। "प्रबंधित करें" पर क्लिक करें।
  3. नए पेज पर, "नया डैशबोर्ड" पर क्लिक करें। इसके अलावा, "नया पैनल जोड़ें" पर क्लिक करें।
  4. यह ग्राफाना संपादक खोलता है। हम एकल मीट्रिक दिखाते हुए एक सरल दृश्य बनाएंगे।

    1. दाएँ फलक में, पैनल शीर्षक को कुछ अर्थपूर्ण में बदलें, जैसे "रसोई की रीडिंग"। आप एक वैकल्पिक विवरण भी दर्ज कर सकते हैं।
    2. नीचे बाईं ओर, "क्वेरी", हम सिंगल टाइम सीरीज़ जोड़ेंगे। ग्राफाना वास्तव में यहां चमकता है क्योंकि हम क्लिक आधारित इंटरफेस के साथ आसानी से एसक्यूएल स्टेटमेंट बना सकते हैं। "डिफ़ॉल्ट" के अंतर्गत, InfluxDB चुनें।
    3. अब, "ए" पढ़ने के लिए - FROM क्लॉज में, माप "एयरटेस्ट" चुनें। यदि आप arduinosensor.py के get_values फ़ंक्शन में मूल पायथन कोड को देखते हैं, तो आप देखेंगे कि हम कोड के भीतर इस airtestt तालिका को परिभाषित करते हैं।
    4. एक नमूने के लिए, आइए हम "सेलेक्ट" क्लॉज पर जाएं और फील्ड (एमक्यू 4) चुनें। मूल रूप से हमारा डैशबोर्ड हमें "मीन ()" विकल्प देगा - इस विकल्प पर क्लिक करें और "निकालें" चुनें। फिर, प्लस चिह्न पर क्लिक करें और "एकत्रीकरण" के अंतर्गत "विशिष्ट ()" चुनें। यह विशिष्ट समय बिंदु दिखाएगा। हम अन्य उपाय चुन सकते हैं लेकिन अभी के लिए, हमारा पैनल mq4 से अलग रीडिंग दिखाएगा।
    5. ऊपर दाईं ओर सहेजें पर क्लिक करें, और आपका काम हो गया!

यदि आप परेशानी में हैं, तो आप संलग्न स्क्रीनशॉट में अपनी सेटिंग्स को सत्यापित कर सकते हैं।

चरण 7: लपेटें

लपेटें
लपेटें

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

कुछ चीजें हैं जिन पर हम सुधार करना चाह सकते हैं।

  • हमारे ग्राफ में सेंसर रीडिंग वास्तव में सटीक सेंसर रीडिंग नहीं हैं - वे हमारे सेंसर से आउटपुट वोल्टेज हैं। उन्हें कैलिब्रेट करने की आवश्यकता है, अधिक जानकारी के लिए इस ब्लॉग पोस्ट को देखें।
  • हमारे रास्पबेरी पीआई कॉन्फ़िगरेशन को आर्डिनो से जुड़े ईएसपी 8266 बोर्ड का उपयोग करके और पीआई को पूरी तरह से हटाकर अधिक हल्का बनाया जा सकता है। ESP8266 मॉड्यूल का परिचय देखें।
  • हम विशिष्ट घटनाओं के लिए अलर्ट जोड़ना चाह सकते हैं। शुक्र है, Grafana ऐसा करने का एक तरीका प्रदान करता है।

IOT की दुनिया के साथ आपकी कल्पना को लुभाने के लिए मैं कुछ और पढ़ना छोड़ दूंगा। मैं आपको अगले निर्देश में देखने के लिए उत्सुक हूं!

आगे की रीडिंग:

सिफारिश की: