पिछले कुछ वर्षों में, स्मार्ट होम डिवाइस 2015 में 300,000 से कम से बढ़कर 2020 में लगभग 1.2 बिलियन हो गए हैं। और 2021 तक 1.5 बिलियन तक बढ़ने की उम्मीद है।
इसलिए यह संभावना है कि आपके घर में कम से कम कुछ स्मार्ट डिवाइस हैं, यह देखते हुए कि 2021 तक प्रति घर औसतन 8.7 स्मार्ट डिवाइस होंगे।
डेवलपर्स के रूप में, हमारे पास इस डोमेन में कुछ लाभ है, क्योंकि हम अपने स्वयं के स्मार्ट होम डिवाइस बना सकते हैं।
न केवल डिवाइस बल्कि उनके लिए उपयोग किए जाने वाले डेवलपमेंट बोर्ड भी अधिक से अधिक कमर्शियल और सुलभ होने लगे हैं।
इस लेख में, हम देखेंगे कि कैसे हम एक Raspberry Pi, एक LCD स्क्रीन, और कोड की कुछ लाइनों का उपयोग करके बाहर के मौसम या किसी विशिष्ट स्थान की निगरानी कर सकते हैं।
पूर्वापेक्षाएँ
- Raspberry Pi 3 (या उच्चतर)
- LCD स्क्रीन
- कनेक्शन वायर
- पोटेंशियोमीटर (वैकल्पिक)
- ब्रेडबोर्ड (वैकल्पिक)
इसे कैसे बनाएं
जैसे ही हमारे पास वह सब कुछ है जिसकी हमें आवश्यकता है, हम शुरू कर सकते हैं। आइए इसे चरण दर चरण लें।
चरण I - बेस कॉन्फिगरेशन
पहला चरण बुनियादी सेटअप और सभी घटकों का सत्यापन है।
इस डेमो के लिए, हम ClimaCell Weather API का उपयोग मौसम डेटा प्रदाता के रूप में करेंगे, क्योंकि उनके पास हमारे उपयोग के लिए बड़ी संख्या में संकेतक हैं, जिनमें वायु गुणवत्ता संकेतक भी शामिल हैं।
उनके API का उपयोग करने के लिए हमें उनके प्लेटफॉर्म पर एक खाता खोलना होगा और एक API कुंजी प्राप्त करनी होगी, जिसका उपयोग हम अपने अनुरोधों पर हस्ताक्षर करने के लिए करेंगे।
खाता खोलना मुफ़्त है और यह 100 घंटे की API कॉल सीमा के साथ आता है, जो हमारी परियोजना के लिए पर्याप्त से अधिक है।
जैसे ही हमारे पास यह API कुंजी है, हम हार्डवेयर कॉन्फिगरेशन पर जा सकते हैं और LCD स्क्रीन को अपने Raspberry Pi से कनेक्ट कर सकते हैं। तार कनेक्शन बनाते समय आपको Raspberry Pi को बंद कर देना चाहिए।
Raspberry Pi 3 के लिए पिन लेआउट अगली छवि में देखा जा सकता है।
LCD और डेवलपमेंट बोर्ड के बीच वायर कनेक्शन निम्नलिखित है:
यह हार्डवेयर कनेक्शन LCD स्क्रीन को पूर्ण चमक और पूर्ण कंट्रास्ट पर चालू कर देगा। चमक का स्तर कोई समस्या नहीं है, लेकिन कंट्रास्ट है क्योंकि हम स्क्रीन पर वर्णों को नहीं देख पाएंगे।
इसलिए हमें कंट्रास्ट स्तर सेट करने के लिए कम से कम एक पोटेंशियोमीटर पेश करने की आवश्यकता है।
इस बिंदु पर, हम अपना Raspberry Pi चालू कर सकते हैं और हमें LCD स्क्रीन जीवंत दिखाई देनी चाहिए। परिवर्तनीय प्रतिरोध की मदद से हम कंट्रास्ट को नियंत्रित करने में सक्षम होना चाहिए।
चरण II - प्रोजेक्ट कॉन्फिगरेशन
प्रोग्रामिंग भाषा के रूप में, हम कोड लिखने के लिए NodeJS का उपयोग करेंगे। यदि आपके Raspberry पर NodeJS पहले से इंस्टॉल नहीं है तो आप इन सरल निर्देशों का पालन कर सकते हैं।
एक नए फ़ोल्डर में, एक नया npm पैकेज सेटअप करने के लिए कमांड npm init -y चलाएं, उसके बाद इन 2 आवश्यक निर्भरताओं को इंस्टॉल करने के लिए कमांड npm install lcd node-fetch चलाएं।
lcdका उपयोग LCD स्क्रीन के साथ संचार करने के लिए किया जाएगाnode-fetchका उपयोग ClimaCell API पर HTTP अनुरोध करने के लिए किया जाएगा।
हमने कहा कि हमें मौसम डेटा प्रदाता के साथ संवाद करने के लिए एक API कुंजी की आवश्यकता है। आप अपनी गुप्त 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 स्क्रीन के लिए संपूर्ण कोड निम्नलिखित है:
पहला चरण एक नया lcd ऑब्जेक्ट बनाना और उन पिन्स को तर्क के रूप में पास करना था जिनका हमने उपयोग किया है।
cols और rows कुंजियाँ हमारे LCD डिस्प्ले के कॉलम और पंक्तियों की संख्या को दर्शाती हैं। इस उदाहरण में मैंने 16x2 का उपयोग किया है। यदि आपके LCD में केवल 8 कॉलम और 1 पंक्ति है, तो 16 और 2 को अपने मानों से बदलें।
डिस्प्ले पर कुछ लिखने के लिए हमें इन दो विधियों का क्रमिक रूप से उपयोग करने की आवश्यकता है:
- lcd.setCursor() - लिखना शुरू करने की स्थिति का चयन
- lcd.print()
साथ ही, हमने async/await कीवर्ड का उपयोग करने के लिए इन दो फ़ंक्शंस को एक प्रॉमिस में लपेटा।
इस बिंदु पर, आप इस फ़ंक्शन का उपयोग कर सकते हैं और अपने डिस्प्ले पर कुछ प्रिंट कर सकते हैं। writeToLcd(0,0,'Hello World') को पहले कॉलम से शुरू होने वाली पहली पंक्ति पर Hello World संदेश प्रिंट करना चाहिए।
चरण IV - मौसम डेटा
अगला चरण मौसम डेटा प्राप्त करना और इसे डिस्प्ले पर प्रिंट करना है।
ClimaCell बहुत सारी मौसम डेटा जानकारी प्रदान करता है, लेकिन वायु गुणवत्ता और पराग, आग और अन्य जानकारी भी। डेटा विशाल है, लेकिन ध्यान रखें कि आपकी LCD स्क्रीन में केवल 16 कॉलम और 2 पंक्तियाँ हैं – यानी केवल 32 वर्ण।
यदि आप अधिक प्रकार के डेटा प्रदर्शित करना चाहते हैं और यह सीमा आपके लिए बहुत छोटी है, तो आप स्क्रॉल प्रभाव का उपयोग कर सकते हैं।
इस डेमो के लिए हम इसे सरल रखेंगे और LCD स्क्रीन पर निम्नलिखित डेटा प्रिंट करेंगे:
- वर्तमान तारीख (घंटा, मिनट, सेकंड)
- तापमान
- वर्षा तीव्रता
किसी विशिष्ट स्थान के लिए ClimaCell से डेटा प्राप्त करने के लिए, आपको उसके भौगोलिक निर्देशांक, अक्षांश और देशांतर भेजने की आवश्यकता होती है।
अपने शहर के निर्देशांक खोजने के लिए, आप latlong.net जैसे मुफ्त टूल का उपयोग कर सकते हैं और फिर उन्हें अपने API कुंजी के साथ 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' } }
हम इस ऑब्जेक्ट को डीस्ट्रक्चर कर सकते हैं और temp और precipitation मान प्राप्त करके उन्हें पहली और दूसरी पंक्ति पर प्रिंट कर सकते हैं।
चरण V - इसे पूरा करें
अब हमें बस अपने स्क्रिप्ट के लिए तर्क लिखना है, और जब नया डेटा आए तो LCD स्क्रीन को अपडेट करना है।
मौसम डेटा हर 5 मिनट में अपडेट होता है। लेकिन क्योंकि ClimaCell द्वारा लगाई गई 100 API कॉल/घंटे की सीमा है, हम और आगे जा सकते हैं और मौसम डेटा को हर मिनट अपडेट कर सकते हैं।
वर्तमान समय के लिए, हमारे पास दो विकल्प हैं:
- हम प्रॉपर्टी
observation_timeका उपयोग कर सकते हैं और उस तारीख को प्रदर्शित कर सकते हैं जिस पर डेटा प्राप्त हुआ था, या - हम एक वास्तविक घड़ी बना सकते हैं और वर्तमान समय प्रदर्शित कर सकते हैं।
मैंने दूसरा विकल्प चुना, लेकिन बेझिझक इसे अपनी इच्छानुसार करें।
ऊपरी दाएं कोने में समय प्रिंट करने के लिए, हमें पहले शुरुआती कॉलम की गणना करनी होगी ताकि टेक्स्ट स्नगली फिट हो। इसके लिए हम अगले सूत्र का उपयोग कर सकते हैं कुल कॉलम संख्या घटा प्रदर्शित करने के लिए टेक्स्ट लंबाई
तारीख में 8 वर्ण हैं और क्योंकि उसके 16 कॉलम हैं, हमें कॉलम नंबर 8 से शुरू करना होगा।
LCD सेटिंग एसिंक्रोनस है, इसलिए हमें संबंधित लाइब्रेरी द्वारा प्रदान की गई lcd.on() विधि का उपयोग करना होगा, ताकि हम जान सकें कि LCD कब इनिशियलाइज़ हो गया है और उपयोग के लिए तैयार है।
एम्बेडेड सिस्टम में एक और सर्वोत्तम अभ्यास यह है कि आप जिन संसाधनों का उपयोग करते हैं उन्हें बंद करें और मुक्त करें। इसलिए हम प्रोग्राम बंद होने पर LCD स्क्रीन को बंद करने के लिए SIGINT इवेंट का उपयोग करते हैं। इस तरह के अन्य इवेंट्स में शामिल हैं:
SIGUSR1औरSIGUSR2- "kill pid" जैसे nodemon रीस्टार्ट को पकड़ने के लिएuncaughtException- अनकैच्ड एक्सेप्शन को पकड़ने के लिए
चरण VI - इसे हमेशा चलाएं
स्क्रिप्ट पूरी हो गई है और इस बिंदु पर हम अपना प्रोग्राम चला सकते हैं। खत्म करने से पहले हमें बस एक और काम करना होगा।
इस बिंदु पर आप शायद अपने Raspberry Pi से SSH का उपयोग करके या सीधे HDMI केबल और मॉनिटर के साथ जुड़े हुए हैं। कोई फर्क नहीं पड़ता, जब आप अपना टर्मिनल बंद करते हैं तो प्रोग्राम रुक जाएगा।
साथ ही यदि आप अपना डिवाइस बंद करते हैं और कुछ समय बाद या तुरंत फिर से चालू करते हैं, तो स्क्रिप्ट शुरू नहीं होगी और आपको इसे मैन्युअली करना होगा।
इस समस्या को हल करने के लिए, हम pm2 जैसे प्रोसेस मैनेजर का उपयोग कर सकते हैं।
यहां चरण हैं:
sudo npm install pm2 -g- pm2 इंस्टॉल करेंsudo pm2 startup- pm2 मैनेजर के लिए स्टार्टअप स्क्रिप्ट बनाएंpm2 start index.js- एक एप्लिकेशन शुरू करेंpm2 save- सर्वर रीस्टार्ट में अपनी प्रोसेस सूची सहेजें
अब आप अपने बोर्ड को रीबूट कर सकते हैं और स्क्रिप्ट डिवाइस के तैयार होने पर स्वचालित रूप से शुरू हो जाएगी।
निष्कर्ष
इस बिंदु से आप अपने नए डिवाइस को जैसे चाहें अनुकूलित कर सकते हैं। यदि आपको यह मौसम डेटा आपके लिए महत्वपूर्ण लगता है (या ClimaCell से कोई अन्य डेटा जैसे वायु प्रदूषण, पराग, आग सूचकांक या सड़क जोखिम), तो आप Raspberry Pi और LCD डिस्प्ले को रखने के लिए एक कस्टम केस बना सकते हैं। फिर बैटरी जोड़ने के बाद आप डिवाइस को अपने घर में रख सकते हैं।
Raspberry Pi एक पर्सनल कंप्यूटर की तरह है, इसलिए आप इस पर Arduino जैसे माइक्रोकंट्रोलर पर सामान्य रूप से करने की तुलना में बहुत कुछ कर सकते हैं। इस वजह से, इसे अपने घर में अन्य डिवाइस के साथ संयोजित करना आसान है।