Բովանդակություն:

CLOUD MONITOR With AWS & ARDUINO - Electric Boy: 6 Steps
CLOUD MONITOR With AWS & ARDUINO - Electric Boy: 6 Steps

Video: CLOUD MONITOR With AWS & ARDUINO - Electric Boy: 6 Steps

Video: CLOUD MONITOR With AWS & ARDUINO - Electric Boy: 6 Steps
Video: RemoteXY IoT Cloud Control 2024, Նոյեմբեր
Anonim
CLOUD MONITOR With AWS & ARDUINO - Electric Boy
CLOUD MONITOR With AWS & ARDUINO - Electric Boy

Դա պարզ նախագիծ է. Լույս վառեք, երբ ինչ -որ բան սխալ է ընթանում… Այս օրերին մեր համակարգիչներում այդքան շատ ցուցատախտակներով ծանուցումների գնալով անզգայանում ենք, ինչպե՞ս կարող ենք համոզվել, որ չենք կարոտում իսկապես կարևորները: Պատասխանը ֆիզիկական վիճակի ցուցանիշ է: Կամ ավելի կոնկրետ առաջադրանքի համար ՝ Cloud Monitor, որը կարող է նստել ձեր գրասեղանին ՝ միշտ տեսադաշտում: Ինչպես անունն է հուշում, մոնիտորը կօգնի հետևել ձեր ամպային ծառայությունների առողջությանը (… Նույնիսկ դու, ինձ պես, կարիք ունե՞ս պատրաստելու մեկը: Նույնիսկ եթե ոչ, դուք կարող եք գաղափար ունենալ ձեր ապագա IoT ծրագրի համար:

Դե, եթե պատրաստ եք, եկեք սկսենք:

Քայլ 1. Բաղադրիչներ, պարագաներ, անհրաժեշտ գործիքներ, ծրագրեր և առցանց ծառայություն

ՄԱՍՆԱԿՈԹՅՈՆՆԵՐ ԵՎ ՄԱՐPLԵՐ

_ Arduino Micro e Genuino Micro (1 միավոր)… կամ ցանկացած փոքրիկ Arduino համատեղելի ՝ իմ դեպքում freetronics LeoStick (https://www.freetronics.com.au/collections/arduino/products/leostick)

_ ThingM BlinkM - I2C վերահսկվող RGB LED (1 միավոր)

_ Մինի ամպի լույս (1 միավոր)… կամ ձեր ընտրած ցանկացած այլ կիսաթափանցիկ անոթ

_ USB-A- ից B մալուխ (1 միավոր)… կամ որևէ հին USB մալուխ ՝ A- տիպի խրոցակով

ԿԱՐOOLԻՔՆԵՐ ՊԱՐՏԱԴԻՐ

Sոդման երկաթ (ընդհանուր)

APPS & ONLINE SERVICE

_ Amazon Web Services AWS Lambda (https://aws.amazon.com/it/lambda/)

_ Amazon Web Services AWS IoT (https://aws.amazon.com/it/iot/)

Քայլ 2: Սարքավորումներ

Սարքավորումներ
Սարքավորումներ
Սարքավորումներ
Սարքավորումներ

Գիշերային լույսն արդեն գալիս է ներկառուցված լուսադիոդով `իմ դեպքում սառը սպիտակ: Ես մտածեցի, որ լավ կլիներ տարբեր գույներով տարբեր կարգավիճակ նշել: Այսպիսով, ես միայն ամպի տեսքով պատյան պահեցի: Գործողության ուղեղների համար ես ընտրեցի իմ ձեռքի տակ եղած ամենափոքր Arduino- ն: Freetronics LeoStick- ը տարիներ շարունակ իմ նախընտրած նախատիպերի հարթակն է եղել, և ես շատ պահեստամասեր ունեմ: Այն բեռնված է լավ իրերով. Պիեզո բարձրախոս, երկու RGB LED (մեկը կապված է իշխանության հետ, չնայած RX և TX) և ամենից լավը, պարզապես կարող եք այն միացնել USB պորտին - արտաքին FTDI կամ մալուխ անհրաժեշտ չէ: Այն նաև փոքր, բայց հացահատիկի հետ համատեղելի է:

Ինչու՞ ես չընտրեցի ESP8266- ը: Իսկապես անլար լինելու համար կարող եք նաև կտրել հոսանքի լարը, ինչը մի փոքր ավելի է բարդացնում մարտկոցը ավելացնելու և լիցքավորման անհարմարությունը: Քանի որ ամպային մոնիտորը նստելու է իմ համակարգչի կողքին, շատ ավելի հեշտ է օգտագործել USB էներգիան: Նաև Wi-Fi կապի կարգավորումը միշտ չէ, որ ուղիղ է: ATmega32u4- ի հիման վրա Arduino Micro- ն և LeoStick- ը կիսում են D2- ի և D3- ի ժամացույցի I2C տվյալները ունենալու տարօրինակությունը: Սա արդիական է դառնում BlinkM RGB LED- ն միացնելիս: Ի տարբերություն սովորական Atmega328 տախտակների, որտեղ դուք կարող եք պարզապես միացնել BlinkM վահանը A2.. A5 վերնագրերի մեջ, սա այստեղ չի աշխատի (ես չեմ անհանգստացել փափուկ I2C գրադարանով):

Desոդելով տղամարդկանց վերնագրերը ՝ VCC և GND BlinkM- ում, ես այնուհետև կարող եմ դրանք երկարացնել մետաղալարով և պահել ամեն ինչ մի փոքրիկ փաթեթում: BlinkM- ն ունի իր սեփական միկրո վերահսկիչը և թույլ է տալիս կատարելագործել ծրագրեր. Օրինակ. նվագարկեք գրված գունային նախշերը ՝ առանց միացված Arduino- ի: Ես գրեթե զգում եմ, որ WS2812- ը (Adafruits NeoPixels- ը հիանալի են) ինձ ավելի լավ կսպասարկեր, ավաղ, որ ես չունեի: Ապարատային բիթը ավարտելու համար ես կտրեցի արական տիպի A- USB խրոցակի հակառակ ծայրը, այն անցա նախնական փորված անցքով ամպի լույսի հիմքի մոտ և լարերը կպցրեցի LeoStick- ին (կարմիր ՝ 5 Վ, սպիտակ. Տվյալներ-, կանաչ ՝ Տվյալներ+, սև ՝ Գրունտ):

Քայլ 3. Լուծման ճարտարապետություն

Լուծման ճարտարապետություն
Լուծման ճարտարապետություն
Լուծման ճարտարապետություն
Լուծման ճարտարապետություն

Միակ ուժեղ պահանջը, որ ես ինքս ինձ պարտադրեցի, այն էր, որ մոնիտորը գործարկվեր firewall- ի հետևում: Թեև դա վճռորոշ հատկություն էր, սակայն իրադարձությունների փոփոխությունների համար վեբ -կեռիկներն անիրագործելի դարձան: Քվեարկության մեխանիզմը ծախսատար է TCP երթևեկության առումով և կարող է հետաձգել իրադարձությունները `կախված քվեարկության հաճախականությունից:

Լուծումը գտնվում է WebSockets- ում, որոնք ապահովում են ամբողջական երկկողմանի հաղորդակցություն: Amazons IoT ծառայությունը տրամադրում է հաղորդագրությունների բրոքեր, որն աջակցում է MQTT- ին WebSockets- ի միջոցով: Ինչպես պարզվում է, ծառայությունը կարող է կանչվել ՝ առանց բաներ, ստվերներ, կանոններ կամ կանոններ կազմաձևելու:

Arduino Yún- ի համար կա սարքի SDK, և որոշ ջանքեր են գործադրվում SDK- ն ESP8266- ի նման այլ հարթակներ տեղափոխելու ուղղությամբ: Բայց քանի որ մոնիտորը միշտ միացված կլինի սերիական ինտերֆեյսի միջոցով, ես վաղ որոշեցի ունենալ NodeJS ծրագիր (աշխատասեղանի համակարգչի վրա) `հաճախորդի API- ի իրականացման համար և օգտագործել Arduino- ն միայն գունային կոդեր ստանալու և ցուցադրելու համար: Այդ կերպ փոփոխությունները հեշտությամբ կարող են կատարվել JavaScript- ում ՝ առանց անհանգստանալու որոնվածը բեռնելիս: Փորձարկման համար անհրաժեշտ է ենթակառուցվածքների մի փոքր օրինակ: Ենթադրենք, մենք ունենք հասանելիության գոտիներում միացված բեռի հավասարակշռիչ, որը ստուգում է վեբ սերվերի օրինակն ու ավտոմատ մասշտաբավորման քաղաքականությունը ՝ հիմնված պրոցեսորի բեռի վրա: Համապատասխան CloudFormation ձևանմուշը կարող է ▶ ️ դիտվել Դիզայների մեջ կամ ▶ ️ անմիջապես վահանակից ստեղծված: Նշում. Այս հավաքածուի որոշ ծառայություններ կարող են գանձել վճարներ:

Ես ընդլայնեցի ձևանմուշը ՝ Lambda գործառույթի հատկություններով և անհրաժեշտ թույլտվություններով: Հետագայում պահանջվում է, որ որպես պարամետր տեղադրվի IoT REST API վերջնակետը: Սա ավտոմատացնելու համար ես գրեցի մի փոքր պատյան սցենար, որը CLI- ի միջոցով պահանջում է ARN (> aws iot նկարագրել-վերջնակետը), այնուհետև կանչում create-stack ՝ պարամետրով: Կամ դեռ կարող եք դա անել ձեռքով.

// RETRIVE IoT REST API ENDPOINT

aws iot նկարագրել-վերջնակետը

// CREATE STACK> aws cloudformation create-stack --stack-name MiniCloudMonitor --template-body file: //cfn-template.json --parameters ParameterKey = IotRestApiEndpoint, ParameterValue = {IoT_REST_API_ENDPOINAB}

// LEՆTEԵԼ STACK> aws ամպամածության ջնջում-բուրգ --stack-name MiniCloudMonitor

Իդեալում, ես պետք է օգտագործեմ ահազանգի նույն շեմերը, որոնք առաջացնում են ավտոմատ մասշտաբավորումը, նաև Lambda գործառույթը կանչելու և այդ կերպ թարմացնելու մոնիտորի կարգավիճակը: Ներկայումս դա հնարավոր է միայն SNS- ը որպես միջանկյալ օգտագործելիս: Այն ժամանակ այս լրացուցիչ շերտը ավելորդ զգաց, և ես որոշեցի օգտագործել CloudWatch EC2 կյանքի ցիկլի կանոնները ՝ անմիջապես Լամբդային զանգահարելու համար: Այնուամենայնիվ, ես ուզում եմ ապագայում ուսումնասիրել SNS -Lambda- ի տարբերակը:

Քայլ 4: Softwareրագրակազմ

Ես սկսեցի գրել Arduino Sketch- ը: Հիմնական հանգույցը () սերիական կապից Chars կարդալն է և String- ի կառուցումը, մինչև նոր գծի բնույթ ստանալը: Այնուհետև ենթադրվում է, որ ուղարկվել է վեցանկյուն գույնի ծածկագիր, և համապատասխան I2C հրամանը գրված է BlinkM LED- ի վրա: Սա ոչ այնքան արդյունավետության, որքան հարմարության մասին է: Այս էսքիզների և այլ ֆայլերի ամբողջական աղբյուրները կարելի է ձեռք բերել GitHub- ում: Ստորև բերված են համապատասխան կոդի որոշ հատվածներ.

դատարկ շրջան () {

իսկ (Serial.available ()) {

char inChar = (char) Serial.read ();

եթե (inChar == '\ n') {

երկար համար = strtol (inputString.c_str (), NULL, 16);

բայթ r = թիվ >> 16;

բայթ g = թիվ >> 8 & 0xFF;

բայթ b = թիվ & 0xFF;

BlinkM_fadeToRGB (blinkm_addr, r, g, b);

inputString = "";

} ուրիշ {

inputString += inChar;

}

}

}

NodeJS հավելվածը պետք է ինտերֆեյսեր ներդնի AWS- ի և Arduino- ի համար: Հետագայում կարող է կատարվել ընդամենը մի քանի տող ծածկագրում `գերազանց սերիալապարկը օգտագործելիս.

var serialport = պահանջում ('serialport'); port = new serialport (PORT_COM_NAME, {

baudRate: SERIAL_BAUD_RATE

});

port.on ('բաց', գործառույթ () {

});

port.on ('սխալ', գործառույթ (սխալ) {

});

AWS IoT- ին միանալը նույնպես քիչ ջանքեր է պահանջում: Միակ թերությունն այն է, որ իմանաք, որ MQTT+WebSockets 443 նավահանգստից օգտվելը պահանջում է նույնականացում մուտքի բանալիների միջոցով: SDK- ն դրանք կկարդա շրջակա միջավայրի փոփոխականներից: Հնարավոր է, որ անհրաժեշտ լինի ուղղակիորեն արտահանել AWS_ACCESS_KEY_ID և AWS_SECRET_ACCESS_KEY:

var awsiot = պահանջում ('aws-iot-device-sdk'); var սարք = awsiot.device ({

clientId: 'MiniCloudMonitor-' + (Math.floor ((Math.random () * 100000) + 1)), մարզ ՝ AWS_REGION, արձանագրություն ՝ «wss», նավահանգիստ: 443, վրիպազերծում. ճշմարիտ

});

device.on ('Connect', function () {

device.subscribe (MQTT_TOPIC);

});

device.on ('հաղորդագրություն', գործառույթ (թեմա, բեռնվածություն) {

եթե (նավահանգիստ && բեռնվածություն && թեմա == MQTT_TOPIC) {

var հաղորդագրություն = JSON.parse (բեռնվածություն);

եթե (message.hasOwnProperty (MQTT_JSON_KEY))

{վերադարձ;

}

}

});

Lambda ֆունկցիան ընդունում է գունային ծածկագիրը որպես մուտքային պարամետր `ոչ գեղեցիկ, բայց շատ ճկուն այս փուլում: MQTT թեմայում հրապարակելու հնարավորություն ունենալու համար այն ստեղծում է IotData օբյեկտ, որը պահանջում է IoT REST API վերջնակետ: CloudFormation ձևանմուշը դրա մասին հոգացել է բուրգի ստեղծման ժամանակ:

var AWS = պահանջում ('aws-sdk'); var mqtt = նոր AWS. IotData ({

վերջնակետ ՝ process.env. MQTT_ENDPOINT});

export.handler = գործառույթ (իրադարձություն, համատեքստ, հետադարձ) {

var params = {

թեմա ՝ process.env. MQTT_TOPIC, բեռնվածություն ՝ '{ "գույն \": / "' + event.colour + '\"}', qos: 0

};

mqtt.publish (պարամետրեր, գործառույթ (սխալ, տվյալներ) {

հետադարձ կապ (սխալ);

});

};

Քայլ 5: Եզրակացություն

Ես իսկապես վայելեցի ամպի մեջ «ծնված» վիրտուալ իրադարձություն ֆիզիկական աշխարհ բերելը: Եվ որպես իմ փոքրիկ կենդանու նախագիծ, այն շատ զվարճալի էր: Սա հաջորդ մակարդակի հասցնելու համար ես կքննարկեի…

  • ամրության և բացառությունների մշակման բարելավում
  • ուսումնասիրեք AWS ամպային չափանիշների ինտեգրման ավելի լավ եղանակներ
  • փորձեք ավելի ֆիզիկական ցուցանիշների հետ, ինչպիսիք են չափիչները, գծապատկերները,…
  • հնարավորություն ունեք տեղափոխվել այլ հարթակներ, ինչպիսիք են Azure, Google, Heroku,…
  • վերահսկել Jenkins, GitHub,…

Հուսով եմ, որ ձեզ դուր եկավ այս ուղեցույցը կարդալը և գուցե նույնիսկ ինչ -որ նոր բան ընտրեցիք ճանապարհին: Եթե դուք կարող եք ինչ -որ այլ բան անել/ավելի լավ միջոց մտածել, կիսվեք ստորև բերված մեկնաբանություններում: Եվ, իհարկե, եթե դուք նկատում եք սխալներ, ձեր գլուխները բարձր կգնահատվեն: Շնորհակալություն ձեր ժամանակի համար:

Խորհուրդ ենք տալիս: