पिछले कुछ वर्षों में, स्मार्ट होम डिवाइस 2015 में 300,000 से कम से बढ़कर 2020 में लगभग 1.2 बिलियन हो गए हैं और उनके 2021 तक 1.5 बिलियन तक बढ़ने की उम्मीद है।
इसलिए संभव है कि आपके घर में कम से कम कुछ स्मार्ट डिवाइस हों, यह देखते हुए कि 2021 तक औसत 8.7 स्मार्ट डिवाइस प्रति घर तक पहुंच जाएगा।
डेवलपर्स के रूप में, इस डोमेन में हमें कुछ लाभ है, क्योंकि हम अपने स्वयं के स्मार्ट होम डिवाइस बना सकते हैं।
यह केवल वे उपकरण नहीं हैं जिन्होंने तेजी से विकास का अनुभव किया है। उनके लिए उपयोग किए जाने वाले विकास बोर्ड अधिक से अधिक व्यावसायिक और सुलभ होने लगे हैं।
इस लेख में, हम देखेंगे कि हम बाहर या किसी विशिष्ट स्थान के लिए मौसम की निगरानी के लिए रास्पबेरी पाई, एलसीडी स्क्रीन और कोड की कुछ पंक्तियों का उपयोग कैसे कर सकते हैं।
चूंकि यह स्वयं करें (DIY) प्रोजेक्ट है, इसलिए इस डिवाइस के लिए हमें कुछ पूर्वापेक्षाओं की आवश्यकता है।
आवश्यकताएँ
- रास्पबेरी पाई 3 (या उच्चतर)
- एलसीडी स्क्रीन
- कनेक्शन तार
- पोटेंशियोमीटर (वैकल्पिक)
- ब्रेडबोर्ड (वैकल्पिक)
इसे कैसे बनाएं
जैसे ही हमारे पास वह सब कुछ होगा जो हमें चाहिए हम शुरू कर सकते हैं। आइए इसे कदम दर कदम उठाएं।
चरण I - आधार कॉन्फ़िगरेशन
पहले चरण में बुनियादी सेटअप और सभी घटकों का सत्यापन शामिल है।
इस डेमो के लिए, हम मौसम डेटा प्रदाता के रूप में क्लाइमासेल वेदर एपीआई का उपयोग करेंगे, क्योंकि उनके पास हमारे उपयोग के लिए वायु गुणवत्ता संकेतकों सहित बड़ी संख्या में संकेतक हैं।
उनके एपीआई का उपयोग करने के लिए हमें उनके प्लेटफॉर्म पर एक खाता खोलना होगा और एक एपीआई कुंजी प्राप्त करनी होगी, जिसका उपयोग हम अपने अनुरोधों पर हस्ताक्षर करने के लिए करेंगे।
खाता खोलने के लिए स्वतंत्र है और यह एपीआई कॉल की 100 घंटे की सीमा के साथ आता है, जो हमारे प्रोजेक्ट के लिए पर्याप्त से अधिक है।
जैसे ही हमारे पास यह एपीआई कुंजी है, हम हार्डवेयर कॉन्फ़िगरेशन में जा सकते हैं और एलसीडी स्क्रीन को हमारे रास्पबेरी पाई से जोड़ सकते हैं। वायर कनेक्शन बनाते समय आपको रास्पबेरी पाई को बंद कर देना चाहिए।
रास्पबेरी पाई 3 के लिए पिन लेआउट अगली छवि में देखा जा सकता है।
एलसीडी और विकास बोर्ड के बीच तार कनेक्शन निम्नलिखित है:
यह हार्डवेयर कनेक्शन एलसीडी स्क्रीन को पूर्ण चमक और पूर्ण कंट्रास्ट पर बना देगा। ब्राइटनेस लेवल कोई समस्या नहीं है, लेकिन कंट्रास्ट इसलिए है क्योंकि हम स्क्रीन पर कैरेक्टर नहीं देख पाएंगे।
इसलिए हमें कम से कम एक पोटेंशियोमीटर लगाने की ज़रूरत है जिससे कंट्रास्ट लेवल सेट किया जा सके।
इस बिंदु पर, हम अपने रास्पबेरी पाई को चालू कर सकते हैं और हमें एलसीडी स्क्रीन को जीवित देखना चाहिए। परिवर्तनशील प्रतिरोध की सहायता से हमें कंट्रास्ट को नियंत्रित करने में सक्षम होना चाहिए।
चरण II - प्रोजेक्ट कॉन्फ़िगरेशन
एक प्रोग्रामिंग भाषा के रूप में, हम कोड लिखने के लिए NodeJS का उपयोग करेंगे। यदि आपके रास्पबेरी पर पहले से NodeJS स्थापित नहीं है तो आप इन सरल निर्देशों का पालन कर सकते हैं।
एक नए फोल्डर में npm init -y
. कमांड चलाएँ npm install lcd node-fetch
. कमांड के बाद एक नया npm पैकेज सेट करने के लिए इन 2 आवश्यक निर्भरताओं को स्थापित करने के लिए।
lcd
LCD स्क्रीन के साथ संचार करने के लिए उपयोग किया जाएगाnode-fetch
क्लाइमासेल एपीआई को एचटीटीपी अनुरोध करने के लिए इस्तेमाल किया जाएगा।
हमने कहा कि हमें मौसम डेटा प्रदाता के साथ संवाद करने के लिए एक एपीआई कुंजी की आवश्यकता है। आप अपनी गुप्त API कुंजी को सीधे मुख्य कोड में रखते हैं, या आप एक config.json
. बना सकते हैं फ़ाइल जिसमें आप यह कुंजी और कोई अन्य कोड-संबंधित कॉन्फ़िगरेशन रख सकते हैं जो आपके पास हो।
config.json
{ "cc_key": "<your_ClimaCell_API_key>"}
अंत में, चलिए अपने प्रोजेक्ट की मुख्य फाइल बनाते हैं और उन सभी चीजों को शामिल करते हैं जिनके बारे में हमने बात की थी।
// * Dependencies
const Lcd = require("lcd");
const fs = require("fs");
const fetch = require("node-fetch");
// * Globals
const { cc_key } = JSON.parse(fs.readFileSync("./config.json"));
चरण III - LCD
एलसीडी मॉड्यूल का उपयोग करके स्क्रीन पर लिखना केक का एक टुकड़ा है। यह पुस्तकालय अमूर्तता की एक परत के रूप में कार्य करता है कि हम डिवाइस के साथ कैसे संवाद करते हैं। इस तरह हमें प्रत्येक कमांड को अलग-अलग माइक्रो-मैनेज करने की आवश्यकता नहीं है।
हमारी LCD स्क्रीन के लिए संपूर्ण कोड निम्नलिखित है:
पहला कदम एक नया lcd
बनाना था ऑब्जेक्ट और तर्क के रूप में पास करने के लिए हमने जिन पिनों का उपयोग किया है।
कुंजियाँ cols
और rows
हमारे एलसीडी डिस्प्ले के कॉलम और पंक्तियों की संख्या का प्रतिनिधित्व करते हैं। 16x2 वह है जिसका मैंने इस उदाहरण में उपयोग किया है। यदि आपके LCD में केवल 8 कॉलम और 1 पंक्ति है, तो 16 और 2 को अपने मानों से बदलें।
डिस्प्ले पर कुछ लिखने के लिए हमें इन दो विधियों का क्रमिक रूप से उपयोग करने की आवश्यकता है:
- lcd.setCursor() - उस स्थिति का चयन करना जिससे लिखना शुरू करना है
- एलसीडी.प्रिंट ()
साथ ही, हमने इन दो कार्यों को async/away
. का उपयोग करने के वादे में लपेटा है कीवर्ड।
इस बिंदु पर, आप इस फ़ंक्शन का उपयोग कर सकते हैं और अपने डिस्प्ले पर कुछ प्रिंट कर सकते हैं। writeToLcd(0,0,'Hello World')
संदेश को प्रिंट करना चाहिए Hello World
पहले कॉलम से शुरू होने वाली पहली पंक्ति पर।
चरण IV - मौसम डेटा
अगला कदम मौसम संबंधी डेटा प्राप्त करना और उसे डिस्प्ले पर प्रिंट करना है।
क्लाइमासेल मौसम संबंधी बहुत सारी जानकारी प्रदान करता है, लेकिन वायु गुणवत्ता और पराग, आग और अन्य जानकारी भी प्रदान करता है। डेटा बहुत बड़ा है, लेकिन ध्यान रखें कि आपकी LCD स्क्रीन में केवल 16 कॉलम और 2 पंक्तियाँ हैं - यह केवल 32 वर्ण हैं।
यदि आप अधिक प्रकार के डेटा प्रदर्शित करना चाहते हैं और यह सीमा आपके लिए बहुत छोटी है, तो आप स्क्रॉल प्रभाव का उपयोग कर सकते हैं।
इस डेमो के लिए हम इसे सरल रखेंगे और हम LCD स्क्रीन पर निम्न डेटा प्रिंट करेंगे:
- वर्तमान तिथि (घंटा, मिनट, सेकंड)
- तापमान
- वर्षा तीव्रता
किसी विशिष्ट स्थान के लिए क्लाइमासेल से डेटा प्राप्त करने के लिए, आपको इसके भौगोलिक निर्देशांक, अक्षांश और देशांतर भेजने होंगे।
अपने शहर के निर्देशांक खोजने के लिए, आप latlong.net जैसे मुफ़्त टूल का उपयोग कर सकते हैं और फिर आप उन्हें config.json
में सहेज सकते हैं। अपनी एपीआई कुंजी के साथ फाइल करें, या आप उन्हें सीधे कोड में लिख सकते हैं।
इस बिंदु पर API कॉल द्वारा लौटाया गया डेटा स्वरूप निम्न है:
{
lat: 45.658,
lon: 25.6012,
temp: { value: 17.56, units: 'C' },
precipitation: { value: 0.3478, units: 'mm/hr' },
observation_time: { value: '2020-06-22T16:30:22.941Z' }
}
हम इस ऑब्जेक्ट का पुनर्निर्माण कर सकते हैं और अस्थायी और वर्षा मान प्राप्त कर सकते हैं और उन्हें पहली और दूसरी पंक्ति पर प्रिंट कर सकते हैं।
चरण V - इसे रैप करें
अब हमें केवल अपनी स्क्रिप्ट के लिए तर्क लिखना है, और नया डेटा आने पर LCD स्क्रीन को अपडेट करना है।
मौसम डेटा हर 5 मिनट में अपडेट किया जाता है। लेकिन चूंकि हमारे पास क्लाइमासेल द्वारा लगाई गई 100 एपीआई कॉल/घंटा की सीमा है, इसलिए हम और भी आगे जा सकते हैं और हर मिनट मौसम डेटा अपडेट कर सकते हैं।
वर्तमान तिथि के लिए, हमारे पास दो विकल्प हैं:
- हम संपत्ति का उपयोग कर सकते हैं
observation_time
और वह दिनांक प्रदर्शित करें जिस पर डेटा प्राप्त हुआ था, या - हम एक वास्तविक घड़ी बना सकते हैं और वर्तमान समय प्रदर्शित कर सकते हैं।
मैंने दूसरा विकल्प चुना, लेकिन बेझिझक इसे अपनी इच्छानुसार करें।
ऊपरी दाएं कोने में समय को प्रिंट करने के लिए, हमें पहले शुरुआती कॉलम की गणना करनी चाहिए ताकि टेक्स्ट अच्छी तरह से फिट हो जाए। इसके लिए हम अगले सूत्र का उपयोग कर सकते हैं total columns number
घटा text to display length
दिनांक में 8 वर्ण हैं और चूंकि उसके पास 16 स्तंभ हैं, इसलिए हमें स्तंभ संख्या 8 से प्रारंभ करना चाहिए।
LCD सेटिंग अतुल्यकालिक है, इसलिए हमें lcd.on()
. विधि का उपयोग करना चाहिए संबंधित पुस्तकालय द्वारा प्रदान किया जाता है, इसलिए हम जानते हैं कि एलसीडी कब शुरू किया गया है और उपयोग के लिए तैयार है।
एम्बेडेड सिस्टम में एक और सर्वोत्तम अभ्यास आपके द्वारा उपयोग किए जाने वाले संसाधनों को बंद करना और मुक्त करना है। इसलिए हम SIGNINT
. का उपयोग करते हैं कार्यक्रम बंद होने पर एलसीडी स्क्रीन को बंद करने की घटना। इस तरह की अन्य घटनाओं में शामिल हैं:
SIGUSR1
औरSIGUSR2
- नोडमॉन रीस्टार्ट की तरह "किल पिड" को पकड़ने के लिएuncaughtException
- न आए अपवादों को पकड़ने के लिए
चरण VI - इसे हमेशा के लिए चलाएं
स्क्रिप्ट पूरी हो गई है और इस बिंदु पर हम अपना प्रोग्राम चला सकते हैं। समाप्त करने से पहले हमारे पास बस एक और काम है जो हमें करना चाहिए।
इस बिंदु पर आप शायद एसएसएच का उपयोग करके या सीधे एचडीएमआई केबल और मॉनिटर के साथ अपने रास्पबेरी पीआई से जुड़े हुए हैं। कोई बात नहीं, जब आप अपना टर्मिनल बंद करते हैं तो प्रोग्राम बंद हो जाएगा।
उसी समय यदि आप अपने डिवाइस को बंद कर देते हैं और कुछ समय बाद या तुरंत इसे फिर से चालू करते हैं, तो स्क्रिप्ट शुरू नहीं होगी और आपको इसे मैन्युअल रूप से करना होगा।
इस समस्या को हल करने के लिए, हम pm2 जैसे प्रक्रिया प्रबंधक का उपयोग कर सकते हैं।
यहाँ कदम हैं:
sudo npm install pm2 -g
- pm2 इंस्टॉल करेंsudo pm2 startup
- pm2 प्रबंधक के लिए एक स्टार्टअप स्क्रिप्ट बनाएंpm2 start index.js
- एक आवेदन शुरू करेंpm2 save
- सर्वर पर अपनी प्रक्रिया सूची सहेजें पुनरारंभ करें
अब आप अपने बोर्ड को रीबूट कर सकते हैं और डिवाइस तैयार होने पर स्क्रिप्ट अपने आप शुरू हो जाएगी।
निष्कर्ष
इस बिंदु से आप अपने नए उपकरण को अपनी इच्छानुसार अनुकूलित कर सकते हैं। यदि आपको यह मौसम डेटा आपके लिए महत्वपूर्ण लगता है (या क्लाइमासेल का कोई अन्य डेटा, जैसे वायु प्रदूषण, पराग, अग्नि सूचकांक या सड़क जोखिम), तो आप इसमें रास्पबेरी पाई और एलसीडी डिस्प्ले लगाने के लिए एक कस्टम केस बना सकते हैं। फिर बैटरी जोड़ने के बाद आप डिवाइस को अपने घर में रख सकते हैं।
रास्पबेरी पाई एक पर्सनल कंप्यूटर की तरह है, इसलिए आप उस पर बहुत कुछ कर सकते हैं, जितना कि आप सामान्य रूप से Arduino जैसे माइक्रोकंट्रोलर पर करते हैं। इस वजह से, इसे आपके घर में मौजूद अन्य उपकरणों के साथ संयोजित करना आसान है।