Turinys:

„CLOUD MONITOR“su AWS ir ARDUINO - elektrinis berniukas: 6 žingsniai
„CLOUD MONITOR“su AWS ir ARDUINO - elektrinis berniukas: 6 žingsniai

Video: „CLOUD MONITOR“su AWS ir ARDUINO - elektrinis berniukas: 6 žingsniai

Video: „CLOUD MONITOR“su AWS ir ARDUINO - elektrinis berniukas: 6 žingsniai
Video: Building Apps for Mobile, Gaming, IoT, and more using AWS DynamoDB by Rick Houlihan 2024, Lapkritis
Anonim
„CLOUD MONITOR“su AWS ir ARDUINO - „Electric Boy“
„CLOUD MONITOR“su AWS ir ARDUINO - „Electric Boy“

Tai paprastas projektas - įjunkite šviesą, kai kas nors negerai … Šiandien vis labiau nutirpdydami pranešimus su daugybe prietaisų skydelių mūsų kompiuteriuose, kaip galime įsitikinti, kad nepraleidžiame tikrai svarbių. Atsakymas yra fizinės būklės rodiklis. Arba daugiau konkrečios užduoties - „Cloud Monitor“, kuris gali sėdėti ant jūsų stalo - visada matomas. Kaip rodo pavadinimas, monitorius padės stebėti jūsų debesies paslaugų būklę (ar dar ką nors, tik dangus yra riba, atleiskite žodį). Net ir tau, kaip ir man, reikia tai padaryti? Net jei ne, galbūt turėsite idėją būsimam daiktų interneto projektui.

Na, jei būsite pasiruošę, pradėkime!

1 veiksmas: komponentai, reikmenys, reikalingi įrankiai, programos ir internetinė paslauga

KOMPONENTAI IR PRIEMONĖS

_ „Arduino Micro“ir „Genuino Micro“(1 vienetas)… arba bet koks mažas su „Arduino“suderinamas - mano atveju „freetronics LeoStick“(https://www.freetronics.com.au/collections/arduino/products/leostick)

_ „ThingM BlinkM“- I2C valdomas RGB šviesos diodas (1 vnt.)

_ Mini debesies lemputė (1 vienetas)… arba bet kuris kitas jūsų pasirinktas permatomas indas

_ USB-A į B kabelis (1 vienetas)… arba bet koks senas USB kabelis su A tipo kištuku

REIKALINGI ĮRANKIAI

_ Lituoklis (bendras)

PROGRAMOS IR ONLINE PASLAUGOS

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

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

2 žingsnis: Aparatūra

Techninė įranga
Techninė įranga
Techninė įranga
Techninė įranga

Naktinėje šviesoje jau yra įmontuotas šviesos diodas - mano atveju šalta balta. Maniau, kad būtų malonu skirtingomis spalvomis nurodyti skirtingą būseną. Taigi aš laikiau tik debesies formos korpusą. Operacijos smegenims pasirinkau mažiausią turimą „Arduino“suderinamą turinį: „Freetronics LeoStick“daugelį metų buvo mano mėgstamiausia prototipų platforma ir turiu daug atsarginių dalių. Jame yra daug gerų dalykų: pjezo garsiakalbis, du RGB šviesos diodai (vienas yra prijungtas prie maitinimo, RX ir TX) ir, geriausia, galite tiesiog prijungti jį prie USB prievado - nereikia išorinio FTDI ar kabelio. Tai taip pat yra maža, tačiau suderinama su duonos lenta.

Kodėl nepasirinkau ESP8266? Jei norite būti tikrai belaidis, taip pat galite nukirpti maitinimo laidą - tai šiek tiek apsunkina akumuliatoriaus pridėjimą ir įkrovimo nepatogumus. Kadangi debesies monitorius sėdės šalia mano kompiuterio, daug lengviau naudoti USB maitinimą. Be to, „Wi-Fi“ryšio nustatymas ne visada yra tiesioginis. Remiantis ATmega32u4, „Arduino Micro“ir „LeoStick“dalijasi keistenybe turėti I2C duomenis D2 ir laikrodį D3. Tai tampa aktualu prijungus „BlinkM RGB LED“. Skirtingai nuo įprastų „Atmega328“plokščių, kuriose galite tiesiog prijungti „BlinkM“skydą prie antraščių A2.. A5, tai čia neveiks (nesivarginau su minkšta I2C biblioteka).

Išlydydamas „BlinkM“vyrų antraštes VCC ir GND, galėčiau išplėsti laidus ir viską laikyti mažoje kištukinėje pakuotėje. „BlinkM“turi savo mikrovaldiklį ir leidžia naudoti pažangias programas: pvz. žaisti scenarijų spalvų modelius neprijungus „Arduino“. Aš beveik jaučiu, kad WS2812 („Adafruits NeoPixels“yra puikūs) man būtų tarnavęs geriau - deja, neturėjau. Norėdami užbaigti aparatinės įrangos bitą, aš nukirpiau priešingą A tipo USB kištuko galą, įsriegiau jį per iš anksto išgręžtą skylę netoli debesies šviesos pagrindo ir prilituosiu laidus prie „LeoStick“(raudona: 5 V, balta: Duomenys, žalia: duomenys+, juoda: žemė).

3 žingsnis: sprendimų architektūra

Sprendimo architektūra
Sprendimo architektūra
Sprendimo architektūra
Sprendimo architektūra

Vienintelis griežtas reikalavimas, kurį sau iškėliau, buvo monitoriaus veikimas už užkardos. Nors tai yra esminė savybė, dėl to įvykių pokyčių žiniatinklio kabliukai tapo nepraktiški. Apklausos mechanizmas yra brangus TCP srauto atžvilgiu ir gali atidėti įvykius, priklausomai nuo apklausos dažnumo.

Sprendimas rastas „WebSockets“, užtikrinančiame visiškai dvipusį ryšį. „Amazon“daiktų interneto paslauga teikia pranešimų tarpininką, palaikantį MQTT per „WebSockets“. Kaip paaiškėja, paslauga gali būti iškviesta nereikia konfigūruoti daiktų, šešėlių, politikos ar taisyklių.

„Arduino Yún“yra įrenginio SDK ir dedamos tam tikros pastangos perkelti SDK į kitas platformas, pvz., ESP8266. Bet kadangi monitorius visada bus prijungtas prie serijinės sąsajos, anksti nusprendžiau turėti „NodeJS“programą (paleistą staliniame kompiuteryje), kad įdiegčiau kliento API, o „Arduino“naudoti tik spalvų kodams gauti ir rodyti. Tokiu būdu „JavaScript“galima lengvai pakeisti, nesirūpinant programinės įrangos įkėlimu. Norint išbandyti reikia nedidelės infrastruktūros pavyzdžio. Tarkime, kad prieinamumo zonose įjungtas apkrovos balansavimo įrenginys, kuris tikrina žiniatinklio serverio egzemplioriaus būklę ir automatinio mastelio keitimo politiką, pagrįstą procesoriaus apkrova. Atitinkamą „CloudFormation“šabloną galima ▶ ️ peržiūrėti „Designer“arba ▶ ️ sukurti tiesiogiai iš konsolės. Pastaba: kai kurios šio paketo paslaugos gali būti apmokestintos.

Aš išplėtiau šabloną su „Lambda“funkcijos ypatybėmis ir reikiamais leidimais. Vėliau reikalauti, kad IoT REST API galinis taškas būtų įterptas kaip parametras. Norėdami tai automatizuoti, parašiau nedidelį apvalkalo scenarijų, kuris naudoja CLI prašydamas ARN (> aws iot description-endpoint), o tada iškviečia create-stack su parametru eilutėje. Arba vis tiek galite tai padaryti rankiniu būdu:

// RETRIVE IoT REST API ENDPOINT

aws iot apibūdinti galutinį tašką

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

// Ištrinti kaminą> aws cloudformation delete-stack-stack-name MiniCloudMonitor

Idealiu atveju turėčiau naudoti tas pačias aliarmo ribas, kurios suaktyvina automatinį mastelio keitimą, taip pat skambinti „Lambda“funkcijai ir taip atnaujinti monitoriaus būseną. Šiuo metu tai įmanoma tik naudojant SNS kaip tarpinę priemonę. Tuo metu šis papildomas sluoksnis atrodė nereikalingas, ir aš nusprendžiau naudoti „CloudWatch EC2“gyvavimo ciklo taisykles, kad galėčiau tiesiogiai paskambinti „Lambda“. Vis dėlto noriu ištirti SNS → Lambda variantą ateityje.

4 žingsnis: programinė įranga

Pradėjau rašydamas „Arduino“eskizą. Pagrindinė kilpa () skaito simbolius iš nuoseklaus ryšio ir sukuria eilutę, kol gauna naują eilutės simbolį. Tada daroma prielaida, kad buvo išsiųstas šešioliktainis spalvų kodas ir į „BlinkM LED“įrašoma atitinkama I2C komanda. Tai ne tiek efektyvumas, kiek patogumas. Visus šio eskizo ir kitų failų šaltinius galite rasti „GitHub“. Toliau pateikiami keli susiję kodo fragmentai:

void loop () {

while (Serial.available ()) {

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

jei (inChar == '\ n') {

ilgas skaičius = strtol (inputString.c_str (), NULL, 16);

baitas r = skaičius >> 16;

baitas g = skaičius >> 8 & 0xFF;

baitas b = skaičius & 0xFF;

BlinkM_fadeToRGB (blinkm_addr, r, g, b);

inputString = "";

} Kitas {

inputString += inChar;

}

}

}

„NodeJS“programa turi įdiegti sąsajas su AWS ir „Arduino“. Vėliau tai galima padaryti vos keliomis kodo eilutėmis, naudojant puikų serijinio paketo paketą:

var serialport = reikalauti ('serialport'); port = new serialport (PORT_COM_NAME, {

baudRate: SERIAL_BAUD_RATE

});

port.on ('open', function () {

});

port.on ('klaida', funkcija (klaida) {

});

Prisijungimas prie „AWS IoT“taip pat nereikalauja daug pastangų. Vienintelė problema yra žinoti, kad norint naudoti MQTT+WebSockets per 443 prievadą, reikia autentifikuoti naudojant prieigos raktus. SDK juos skaitys iš aplinkos kintamųjų. Gali reikėti aiškiai eksportuoti AWS_ACCESS_KEY_ID ir AWS_SECRET_ACCESS_KEY.

var awsiot = reikalauti ('aws-iot-device-sdk'); var device = awsiot.device ({

clientId: „MiniCloudMonitor-“+ (Math.floor ((Math.random () * 100000) + 1)), regionas: AWS_REGION, protokolas: „wss“, uostas: 443, derinimas: tiesa

});

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

device.subscribe (MQTT_TOPIC);

});

device.on ('pranešimas', funkcija (tema, naudingoji apkrova) {

if (prievadas ir naudingas krovinys && tema == MQTT_TOPIC) {

var message = JSON.parse (naudingoji apkrova);

jei (message.hasOwnProperty (MQTT_JSON_KEY))

{grįžti;

}

}

});

Funkcija „Lambda“kaip įvesties parametrą priima spalvų kodą - šiuo metu nėra graži, bet labai lanksti. Kad būtų galima paskelbti MQTT temoje, ji parodo „IotData“objektą, kuriam reikalingas „IoT REST“API galinis taškas. „CloudFormation“šablonas tuo pasirūpino kuriant krūvą.

var AWS = reikalauti ('aws-sdk'); var mqtt = naujas AWS. IotData ({

galutinis taškas: process.env. MQTT_ENDPOINT});

export.handler = funkcija (įvykis, kontekstas, atgalinis skambutis) {

var params = {

tema: process.env. MQTT_TOPIC, naudingoji apkrova: '{ "color \": / "' + event.colour + '\"}', qos: 0

};

mqtt.publish (parametrai, funkcija (klaida, duomenys) {

atgalinis skambutis (klaida);

});

};

5 žingsnis: Išvada

Man labai patiko į fizinį pasaulį atnešti virtualų įvykį, „gimusį“debesyje. Ir kaip mano mažo augintinio projektas, tai buvo be galo smagu. Jei norėčiau tai pakelti į kitą lygį, apsvarstyčiau…

  • patvarumo ir išimčių tvarkymo gerinimas
  • ieškoti geresnių būdų integruoti AWS debesies metriką
  • eksperimentuokite su daugiau fizinių rodiklių, tokių kaip matuokliai, juostos diagramos,…
  • turi galimybę pereiti prie kitų platformų, tokių kaip „Azure“, „Google“, „Heroku“,…
  • stebėti konkrečių programų įvykius, skirtus „Jenkins“, „GitHub“,…

Tikiuosi, kad jums patiko skaityti šį vadovą ir galbūt net pakeliui sužinojote ką nors naujo. Jei galite sugalvoti kitokį/geresnį būdą, kaip tai padaryti, pasidalykite juo toliau pateiktose pastabose. Ir, žinoma, jei pastebėsite klaidų, būsite labai dėkingi. Ačiū už Jūsų laiką.

Rekomenduojamas: