विषयसूची:

AWS और ARDUINO के साथ क्लाउड मॉनिटर - इलेक्ट्रिक बॉय: 6 कदम
AWS और ARDUINO के साथ क्लाउड मॉनिटर - इलेक्ट्रिक बॉय: 6 कदम

वीडियो: AWS और ARDUINO के साथ क्लाउड मॉनिटर - इलेक्ट्रिक बॉय: 6 कदम

वीडियो: AWS और ARDUINO के साथ क्लाउड मॉनिटर - इलेक्ट्रिक बॉय: 6 कदम
वीडियो: How to connect NodeMCU ESP8266 with AWS IoT Core using Arduino IDE & MQTT 2024, नवंबर
Anonim
AWS और ARDUINO के साथ क्लाउड मॉनिटर - इलेक्ट्रिक बॉय
AWS और ARDUINO के साथ क्लाउड मॉनिटर - इलेक्ट्रिक बॉय

यह एक सरल परियोजना है - कुछ गलत होने पर प्रकाश चालू करें … आजकल हमारे कंप्यूटरों पर इतने सारे डैशबोर्ड के साथ सूचनाओं के प्रति सुन्न होते जा रहे हैं, हम कैसे सुनिश्चित कर सकते हैं कि हम वास्तव में महत्वपूर्ण लोगों को याद नहीं करते हैं। उत्तर एक भौतिक स्थिति संकेतक है। या कार्य के लिए अधिक विशिष्ट, एक क्लाउड मॉनिटर, जो आपके डेस्क पर बैठ सकता है - हमेशा देखने में। जैसा कि नाम से पता चलता है, मॉनिटर आपकी क्लाउड सेवाओं के स्वास्थ्य पर नज़र रखने में मदद करेगा (… या वास्तव में कुछ और, आकाश की सीमा है, क्षमा करें)। आपको भी, मेरी तरह, एक बनाने की ज़रूरत है? यदि नहीं, तो भी आपके पास अपने भविष्य के IoT प्रोजेक्ट के लिए एक विचार हो सकता है।

ठीक है, अगर आप तैयार हैं, तो चलिए शुरू करते हैं!

चरण 1: घटक, आपूर्ति, आवश्यक उपकरण, ऐप्स और ऑनलाइन सेवा

घटक और आपूर्ति

_ Arduino Micro e Genuino Micro (1 यूनिट) …या कोई छोटा Arduino संगत - मेरे मामले में एक फ्रीट्रॉनिक्स लियोस्टिक (https://www.freetronics.com.au/collections/arduino/products/leostick)

_ थिंगएम ब्लिंकएम - I2C नियंत्रित आरजीबी एलईडी (1 यूनिट)

_ मिनी क्लाउड लाइट (1 यूनिट) …या आपकी पसंद का कोई अन्य पारभासी बर्तन

_ यूएसबी-ए से बी केबल (1 यूनिट) …या टाइप-ए प्लग के साथ कोई पुराना यूएसबी केबल

आवश्यक उपकरण

_ सोल्डरिंग आयरन (जेनेरिक)

ऐप्स और ऑनलाइन सेवा

_ अमेज़ॅन वेब सर्विसेज एडब्ल्यूएस लैम्ब्डा (https://aws.amazon.com/it/lambda/)

_ अमेज़न वेब सेवाएँ AWS IoT (https://aws.amazon.com/it/iot/)

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

हार्डवेयर
हार्डवेयर
हार्डवेयर
हार्डवेयर

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

मैंने ESP8266 क्यों नहीं चुना? वास्तव में वायरलेस होने के लिए, आप पावर कॉर्ड को भी काट सकते हैं - जो बैटरी जोड़ने और रिचार्जिंग की असुविधा के लिए चीजों को थोड़ा और जटिल बनाता है। चूंकि क्लाउड मॉनिटर मेरे कंप्यूटर के बगल में बैठेगा, इसलिए यूएसबी पावर का उपयोग करना बहुत आसान है। साथ ही वाई-फाई कनेक्शन सेट करना हमेशा सीधा नहीं होता है। ATmega32u4 के आधार पर, Arduino Micro और LeoStick D2 पर I2C डेटा और D3 पर घड़ी होने की विषमता साझा कर रहे हैं। ब्लिंकएम आरजीबी एलईडी को कनेक्ट करते समय यह प्रासंगिक हो जाता है। आम Atmega328 बोर्डों के विपरीत जहां आप केवल BlinkM शील्ड को हेडर A2.. A5 में प्लग कर सकते हैं, यह यहां काम नहीं करेगा (मैंने सॉफ्ट I2C लाइब्रेरी से परेशान नहीं किया)।

ब्लिंकएम पर पुरुष हेडर वीसीसी और जीएनडी को हटाकर, मैं उन्हें तार के साथ बढ़ा सकता था और सब कुछ प्लग-सक्षम छोटे पैकेज में रख सकता था। ब्लिंकएम का बोर्ड पर अपना माइक्रो नियंत्रक है और उन्नत अनुप्रयोगों की अनुमति देता है: उदा। एक Arduino से जुड़े बिना स्क्रिप्टेड रंग पैटर्न चलाएं। मुझे लगभग एक WS2812 लगता है (Adafruits NeoPixels बहुत अच्छे हैं) ने मुझे बेहतर सेवा दी होगी - अफसोस कि मेरे पास कोई उपलब्ध नहीं था। हार्डवेयर बिट को खत्म करने के लिए, मैंने पुरुष टाइप-ए यूएसबी प्लग के विपरीत छोर को काट दिया, इसे क्लाउड लाइट के आधार के पास एक पूर्व-ड्रिल किए गए छेद के माध्यम से पिरोया और तारों को लियोस्टिक (लाल: 5 वी, सफेद) में मिला दिया। डेटा-, हरा: डेटा+, काला: ग्राउंड)।

चरण 3: समाधान वास्तुकला

समाधान वास्तुकला
समाधान वास्तुकला
समाधान वास्तुकला
समाधान वास्तुकला

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

समाधान WebSockets में पाया जाता है जो पूर्ण-द्वैध संचार प्रदान करता है। Amazons IoT सेवा एक संदेश ब्रोकर प्रदान करती है जो WebSockets पर MQTT का समर्थन करता है। जैसा कि यह पता चला है, सेवा को चीजों, छाया, नीतियों या नियमों को कॉन्फ़िगर किए बिना बुलाया जा सकता है।

Arduino Yún के लिए एक उपकरण SDK उपलब्ध है और SDK को ESP8266 जैसे अन्य प्लेटफार्मों पर पोर्ट करने के कुछ प्रयास किए गए हैं। लेकिन चूंकि मॉनिटर हमेशा सीरियल इंटरफ़ेस से जुड़ा रहेगा, इसलिए मैंने क्लाइंट एपीआई को लागू करने और केवल रंग कोड प्राप्त करने और प्रदर्शित करने के लिए Arduino का उपयोग करने के लिए एक NodeJS एप्लिकेशन (डेस्कटॉप कंप्यूटर पर चलने) का फैसला किया। इस तरह फर्मवेयर अपलोड से परेशान हुए बिना जावास्क्रिप्ट में परिवर्तन आसानी से किए जा सकते हैं। परीक्षण के लिए एक छोटे से उदाहरण के बुनियादी ढांचे की जरूरत है। मान लें कि हमारे पास उपलब्धता क्षेत्रों में एक लोड बैलेंसर सक्षम है जो वेब सर्वर इंस्टेंस पर स्वास्थ्य जांच करता है और सीपीयू लोड के आधार पर ऑटो स्केलिंग नीतियां करता है। संबंधित CloudFormation टेम्पलेट को ️ डिज़ाइनर में देखा जा सकता है या ️ सीधे कंसोल से बनाया जा सकता है। नोट: इस स्टैक की कुछ सेवाओं पर शुल्क लग सकता है।

मैंने लैम्ब्डा फ़ंक्शन और आवश्यक अनुमतियों के लिए गुणों के साथ टेम्पलेट को बढ़ाया। बाद में पैरामीटर के रूप में डालने के लिए IoT REST API एंडपॉइंट की आवश्यकता होती है। इसे स्वचालित करने के लिए, मैंने एक छोटी शेल स्क्रिप्ट लिखी जो एआरएन (> aws iot वर्णन-समापन बिंदु) का अनुरोध करने के लिए सीएलआई का उपयोग करती है और फिर इन-लाइन पैरामीटर के साथ क्रिएट-स्टैक को कॉल करती है। या आप इसे अभी भी हाथ से कर सकते हैं:

// IoT REST API ENDPOINT को पुनः प्राप्त करें

एडब्ल्यूएस आईओटी वर्णन-समापन बिंदु

// स्टैक बनाएं> aws क्लाउडफॉर्मेशन क्रिएट-स्टैक --स्टैक-नाम MiniCloudMonitor --template-body file://cfn-template.json --parameters ParameterKey=IotRestApiEndpoint, ParameterValue={IoT_REST_API_ENDPOINT} --capabilities CAPABILITY_NAMED_IAM

// स्टैक हटाएं> एडब्ल्यूएस क्लाउडफॉर्मेशन डिलीट-स्टैक --स्टैक-नाम मिनीक्लाउड मॉनिटर

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

चरण 4: सॉफ्टवेयर

मैंने Arduino स्केच लिखकर शुरुआत की। मुख्य लूप () सीरियल कनेक्शन से चार्स पढ़ रहा है और एक स्ट्रिंग का निर्माण तब तक कर रहा है जब तक कि उसे एक न्यूलाइन कैरेक्टर प्राप्त न हो जाए। तब यह माना जाता है कि एक हेक्स रंग कोड भेजा गया था और उपयुक्त I2C कमांड ब्लिंकएम एलईडी को लिखा गया था। यह सुविधा के रूप में दक्षता के बारे में इतना नहीं है। इस स्केच और अन्य फाइलों के लिए संपूर्ण स्रोत GitHub पर प्राप्त किए जा सकते हैं। कुछ प्रासंगिक कोड स्निपेट निम्नलिखित हैं:

शून्य लूप () {

जबकि (सीरियल.उपलब्ध ()) {

चार इनचर = (चार) सीरियल.रीड ();

अगर (इनचर == '\ n') {

लंबी संख्या = strtol (inputString.c_str (), NULL, 16);

बाइट आर = संख्या >> 16;

बाइट जी = संख्या >> 8 और 0xFF;

बाइट बी = संख्या और 0xFF;

BlinkM_fadeToRGB(blinkm_addr, r, g, b);

इनपुटस्ट्रिंग = "";

} अन्यथा {

इनपुटस्ट्रिंग + = इनचर;

}

}

}

NodeJS ऐप को AWS और Arduino के इंटरफेस को लागू करना है। उत्कृष्ट सीरियलपोर्टपैकेज का उपयोग करते समय बाद में कोड की कुछ पंक्तियों में पूरा किया जा सकता है:

वर सीरियलपोर्ट = आवश्यकता ('सीरियलपोर्ट'); पोर्ट = नया सीरियलपोर्ट (PORT_COM_NAME, {

बॉड दर: SERIAL_BAUD_RATE

});

port.on ('ओपन', फंक्शन() {

});

port.on ('त्रुटि', फ़ंक्शन (त्रुटि) {

});

AWS IoT से जुड़ने के लिए शायद ही बहुत अधिक प्रयास की आवश्यकता होती है। एकमात्र नुकसान यह जानना है कि पोर्ट 443 पर MQTT + WebSockets का उपयोग करने के लिए एक्सेस कुंजी के माध्यम से प्रमाणीकरण की आवश्यकता होती है। एसडीके इन्हें पर्यावरण चर से पढ़ेगा। AWS_ACCESS_KEY_ID और AWS_SECRET_ACCESS_KEY को स्पष्ट रूप से निर्यात करना आवश्यक हो सकता है।

var awsiot = आवश्यकता ('aws-iot-device-sdk'); var डिवाइस = awsiot.device ({

क्लाइंट आईडी: 'मिनीक्लाउड मॉनिटर-' + (Math.floor((Math.random() * 100000) + 1)), क्षेत्र: AWS_REGION, प्रोटोकॉल: 'डब्ल्यूएसएस', बंदरगाह: 443, डिबग: सच

});

डिवाइस.ऑन ('कनेक्ट', फ़ंक्शन() {

डिवाइस.सब्सक्राइब (MQTT_TOPIC);

});

device.on ('संदेश', फ़ंक्शन (विषय, पेलोड) {

अगर (पोर्ट && पेलोड && विषय == MQTT_TOPIC) {

वर संदेश = JSON.parse (पेलोड);

अगर (message.hasOwnProperty(MQTT_JSON_KEY))

{ वापसी;

}

}

});

लैम्ब्डा फ़ंक्शन एक रंग कोड को इनपुट पैरामीटर के रूप में स्वीकार करता है - सुंदर नहीं, लेकिन इस स्तर पर बहुत लचीला। MQTT विषय पर प्रकाशित करने में सक्षम होने के लिए, यह एक IotData ऑब्जेक्ट को इंस्टेंट करता है, जिसके लिए IoT REST API समापन बिंदु की आवश्यकता होती है। CloudFormation टेम्प्लेट ने स्टैक के निर्माण के दौरान इसका ध्यान रखा।

var AWS = आवश्यकता ('aws-sdk'); var mqtt = नया AWS. IotData ({

समापन बिंदु: process.env. MQTT_ENDPOINT});

निर्यात.हैंडलर = फ़ंक्शन (घटना, संदर्भ, कॉलबैक) {

वर परम = {

विषय: प्रक्रिया.env. MQTT_TOPIC, पेलोड: '{"color\":\"' + event.color + '\"}', क्यूओएस: 0

};

mqtt.publish(params, function(err, data) {

कॉलबैक (त्रुटि);

});

};

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

मुझे वास्तव में भौतिक दुनिया में क्लाउड में "जन्म" एक आभासी घटना लाने में बहुत मज़ा आया। और मेरे छोटे पालतू प्रोजेक्ट के रूप में यह ढेर सारी मस्ती थी। इसे अगले स्तर पर ले जाने के लिए मैं विचार करूंगा …

  • मजबूती और अपवाद से निपटने में सुधार
  • AWS क्लाउड मेट्रिक्स को एकीकृत करने के बेहतर तरीके तलाशें
  • अधिक भौतिक संकेतकों जैसे गेज, बार ग्राफ, के साथ प्रयोग करें …
  • Azure, Google, Heroku, जैसे अन्य प्लेटफ़ॉर्म पर जाने का विकल्प है …
  • जेनकिंस, गिटहब, के लिए एप्लिकेशन विशिष्ट घटनाओं की निगरानी करें …

मुझे आशा है कि आपको इस गाइड को पढ़ने में मज़ा आया होगा और हो सकता है कि आपने रास्ते में कुछ नया भी उठाया हो। यदि आप चीजों को करने के लिए एक अलग/बेहतर तरीके के बारे में सोच सकते हैं तो कृपया इसे नीचे टिप्पणी में साझा करें। और निश्चित रूप से, यदि आप गलतियों को देखते हैं तो एक सिर ऊपर की अत्यधिक सराहना की जाएगी। आपके समय के लिए धन्यवाद।

सिफारिश की: