Përmbajtje:

MONITOR I RIVE Me AWS & ARDUINO - Djali Elektrik: 6 Hapa
MONITOR I RIVE Me AWS & ARDUINO - Djali Elektrik: 6 Hapa

Video: MONITOR I RIVE Me AWS & ARDUINO - Djali Elektrik: 6 Hapa

Video: MONITOR I RIVE Me AWS & ARDUINO - Djali Elektrik: 6 Hapa
Video: CS50 2015 – 10-я неделя 2024, Nëntor
Anonim
MONITOR I RIVE Me AWS & ARDUINO - Djalë Elektrik
MONITOR I RIVE Me AWS & ARDUINO - Djalë Elektrik

Shtë një projekt i thjeshtë - ndizni një dritë kur diçka shkon keq… Duke u bërë gjithnjë e më të mpirë drejt njoftimeve me kaq shumë pult në kompjuterët tanë këto ditë, si mund të sigurohemi që të mos i humbasim ato vërtet të rëndësishme. Përgjigja është një tregues i gjendjes fizike. Ose më specifike për detyrën, një Cloud Monitor, që mund të ulet në tryezën tuaj - gjithmonë në pamje. Siç sugjeron emri, monitori do t'ju ndihmojë të mbani një sy mbi shëndetin e shërbimeve tuaja cloud (… ose ndonjë gjë tjetër me të vërtetë, qielli është kufiri, falni fjalën). Edhe ju, si unë, keni nevojë të bëni një të tillë? Edhe nëse jo, ju mund të keni një ide për një projekt të ardhshëm tuaj IoT.

Epo, nëse jeni gati, le të fillojmë!

Hapi 1: Përbërësit, Furnizimet, Mjetet e nevojshme, Aplikacionet dhe Shërbimi Online

P CORBRSIT DHE FURNIZIMET

_ Arduino Micro e Genuino Micro (1 njësi)… ose ndonjë Arduino e vogël e pajtueshme - në rastin tim një freetronics LeoStick (https://www.freetronics.com.au/collections/arduino/products/leostick)

_ ThingM BlinkM - I2C LED e kontrolluar RGB (1 njësi)

_ Mini dritë re (1 njësi)… ose ndonjë anije tjetër e tejdukshme e zgjedhjes suaj

_ Kabllo USB-A në B (1 njësi)… ose ndonjë kabllo të vjetër USB me një prizë të tipit A

MJETET E NEVOJSHME

_ Hekuri i saldimit (i përgjithshëm)

APLIKIMET & SHERRBIMI ONLINE

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

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

Hapi 2: Pajisje kompjuterike

Hardware
Hardware
Hardware
Hardware

Drita e natës tashmë vjen me një LED të integruar - e bardhë e ftohtë në rastin tim. Mendova se do të ishte mirë të tregoja status të ndryshëm me ngjyra të ndryshme. Kështu që unë mbaja vetëm shtresën në formë reje. Për trurin e operacionit, unë zgjodha kompatibilin më të vogël Arduino që kisha në dispozicion: Freetronics LeoStick ka qenë platforma ime e preferuar e prototipimit për vite me radhë dhe kam shumë rezervë. Ajo vjen e ngarkuar me gjëra të mira: një altoparlant piezo, dy LED RGB (njëra është e lidhur me energjinë, megjithatë RX dhe TX) dhe më e mira nga të gjitha, thjesht mund ta lidhni atë në një port USB - nuk nevojitet FTDI ose kabllo i jashtëm. Alsoshtë gjithashtu e vogël por e pajtueshme me bukën.

Pse nuk zgjodha një ESP8266? Për të qenë vërtet pa tel, mund të ndërprisni kordonin e energjisë - gjë që i bën gjërat pak më të komplikuara për shtimin e baterisë dhe shqetësimin e rimbushjes. Meqenëse monitori cloud do të ulet pranë kompjuterit tim, është shumë më e lehtë të përdorësh fuqinë USB. Gjithashtu vendosja e lidhjes Wi-Fi nuk është gjithmonë e drejtë përpara. Bazuar në ATmega32u4, Arduino Micro dhe LeoStick po ndajnë çuditshmërinë e të dhënave të I2C në D2 dhe orën në D3. Kjo bëhet e rëndësishme kur lidhni BlinkM RGB LED. Ndryshe nga tabelat e zakonshme Atmega328 ku thjesht mund të lidhni mburojën BlinkM në titujt A2.. A5, kjo nuk do të funksionojë këtu (nuk u shqetësova me bibliotekën e butë I2C).

Duke hequr shkrirjen e titujve meshkuj VCC dhe GND në BlinkM, unë pastaj mund t'i zgjas ato me tela dhe të mbaj gjithçka në një paketë të vogël që mund të lidhet. BlinkM ka mikro kontrolluesin e vet në bord dhe lejon aplikime të përparuara: p.sh. luani modele ngjyrash të shkruara pa një Arduino të lidhur. Pothuajse ndjej se një WS2812 (Adafruits NeoPixels janë të shkëlqyeshëm) do të më kishte shërbyer më mirë - mjerisht nuk kisha asnjë në dispozicion. Për të përfunduar pjesën e harduerit, unë prerë skajin e kundërt të prizës mashkullore të tipit A USB, e kalova nëpër një vrimë të shpuar para bazës së dritës së reve dhe i bashkova telat në LeoStick (e kuqe: 5V, e bardhë: Të dhëna-, jeshile: Të dhëna+, e zezë: Ground).

Hapi 3: Arkitektura e zgjidhjes

Zgjidhja Arkitektura
Zgjidhja Arkitektura
Zgjidhja Arkitektura
Zgjidhja Arkitektura

Kërkesa e vetme e fortë që i imponova vetes, ishte që monitori të funksiononte pas një muri mbrojtës. Megjithëse një tipar vendimtar, kjo i bëri lidhjet e uebit për ndryshimet e ngjarjeve jopraktike. Një mekanizëm votimi është i kushtueshëm për sa i përket trafikut TCP dhe mund të vonojë ngjarjet në varësi të frekuencës së votimit.

Zgjidhja gjendet në WebSockets të cilat ofrojnë komunikim të plotë dupleks. Shërbimi Amazons IoT siguron një ndërmjetës mesazhesh që mbështet MQTT mbi WebSockets. Siç rezulton, shërbimi mund të thirret pa pasur nevojë të konfiguroni Gjërat, Hijet, Politikat ose Rregullat.

Ekziston një pajisje SDK e disponueshme për Arduino Yún dhe janë bërë disa përpjekje për të transferuar SDK në platforma të tjera si ESP8266. Por për shkak se monitori gjithmonë do të lidhet me ndërfaqen serike, vendosa që herët të kem një aplikacion NodeJS (i ekzekutuar në kompjuterin desktop) për të zbatuar API -në e klientit dhe për të përdorur Arduino vetëm për të marrë dhe shfaqur kodet e ngjyrave. Në atë mënyrë ndryshimet mund të bëhen lehtësisht në JavaScript, pa pasur nevojë të shqetësoheni me ngarkimet e firmware -it. Për testimin nevojitet një infrastrukturë e vogël shembulli. Le të themi se kemi një balancues të ngarkesës të aktivizuar në të gjitha zonat e disponueshmërisë që kontrollon shëndetin në një shembull të serverit në internet dhe politikat e shkallëzimit automatik bazuar në ngarkesën e CPU. Modeli përkatës i CloudFormation mund të shihet the ️ në Designer ose created ️ i krijuar direkt nga tastiera. Shënim: disa nga shërbimet në këtë pirg mund të kenë tarifa.

E zgjerova shabllonin me vetitë për funksionin Lambda dhe lejet e nevojshme. Më vonë kërkohet që pika përfundimtare e IoT REST API të futet si parametër. Për ta automatizuar këtë, unë shkrova një skrip të vogël shell që përdor CLI për të kërkuar ARN (> aws iot përshkruaj-pikën përfundimtare) dhe më pas thërret krijim-pirg me parametrin në linjë. Ose akoma mund ta bëni me dorë:

// Tërheq IOT REST API ENDPOINT

aws iot përshkruaj-pika përfundimtare

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

// FSHIJ STACK> fshirje-grumbullim i cloud cloud-emër-stack MiniCloudMonitor

Në mënyrë ideale, unë duhet të përdor të njëjtat pragje alarmi që shkaktojnë shkallëzimin automatik, për të thirrur gjithashtu funksionin Lambda dhe në atë mënyrë azhurnoni statusin e monitorit. Aktualisht kjo është e mundur vetëm kur përdorni SNS si një ndërmjetës. Në atë kohë kjo shtresë shtesë u ndje e tepërt dhe vendosa të përdor Rregullat e ciklit të jetës të CloudWatch EC2 për të thirrur drejtpërdrejt Lambda. Megjithatë, unë dua të eksploroj opsionin e SNS → Lambda në të ardhmen.

Hapi 4: Softuer

Fillova duke shkruar Skicën Arduino. Laku kryesor () është leximi i Chars nga lidhja serike dhe ndërtimi i një String derisa të marrë një karakter të ri. Atëherë supozohet se është dërguar një kod me ngjyrë gjashtëkëndësh dhe komanda e duhur I2C është shkruar në LED BlinkM. Kjo nuk ka të bëjë aq me efikasitetin sa me komoditetin. Burimet e plota për këtë Skicë dhe skedarë të tjerë mund të merren në GitHub. Më poshtë janë disa fragmente relevante të kodit:

lak void () {

ndërsa (Seriali i disponueshëm ()) {

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

nëse (inChar == '\ n') {

numër i gjatë = strtol (inputString.c_str (), NULL, 16);

bajt r = numri >> 16;

bajt g = numri >> 8 & 0xFF;

bajt b = numër & 0xFF;

BlinkM_fadeToRGB (blinkm_addr, r, g, b);

inputString = "";

} tjetër {

inputString += inChar;

}

}

}

Aplikacioni NodeJS duhet të zbatojë ndërfaqe në AWS dhe Arduino. Më vonë mund të arrihet në vetëm disa rreshta të kodit kur përdorni paketën seriale të shkëlqyer serike:

var serialport = kërkoj ('serialport'); port = port serial i ri (PORT_COM_NAME, {

baudRate: SERIAL_BAUD_RATE

});

port.on ('hapur', funksion () {

});

port.on ('gabim', funksion (gabim) {

});

Lidhja me AWS IoT nuk kërkon as shumë përpjekje. Kurthi i vetëm është të dini se përdorimi i MQTT+WebSockets mbi portin 443 kërkon vërtetim përmes çelësave të hyrjes. SDK do t'i lexojë këto nga variablat e mjedisit. Mund të jetë e nevojshme të eksportohet në mënyrë eksplicite AWS_ACCESS_KEY_ID dhe AWS_SECRET_ACCESS_KEY.

var awsiot = kërkojnë ('aws-iot-pajisje-sdk'); var pajisje = awsiot.device ({

clientId: 'MiniCloudMonitor-' + (Math.floor ((Math.random () * 100000) + 1)), rajoni: AWS_REGION, protokoll: 'wss', porti: 443, debug: e vërtetë

});

pajisje. në ('lidh', funksion () {

pajisje. abonohu (MQTT_TOPIC);

});

pajisje. në ('mesazh', funksion (temë, ngarkesë) {

nëse (port && ngarkesë && temë == MQTT_TOPIC) {

mesazh var = JSON.parse (ngarkesë);

nëse (mesazhi.hasOwnProperty (MQTT_JSON_KEY))

{kthimi;

}

}

});

Funksioni Lambda pranon një kod ngjyrash si një parametër hyrës - jo i bukur, por shumë fleksibël në këtë fazë. Për të qenë në gjendje të botojë në temën MQTT, ajo instinkton një objekt IotData, i cili kërkon pikën përfundimtare të IoT REST API. Modeli CloudFormation u kujdes për atë gjatë krijimit të pirgut.

var AWS = kërkohet ('aws-sdk'); var mqtt = AWS. i ri. IotData ({

pika përfundimtare: process.env. MQTT_ENDPOINT});

export.handler = funksion (ngjarje, kontekst, kthim në telefon) {

var param = {

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

};

mqtt.publish (parametrat, funksioni (gabim, të dhëna) {

përgjigje në telefon (gabim);

});

};

Hapi 5: Përfundimi

Me të vërtetë më pëlqeu sjellja e një ngjarjeje virtuale "të lindur" në re në botën fizike. Dhe si projekti im i vogël për kafshët shtëpiake ishte shumë argëtim. Për ta çuar këtë në nivelin tjetër, do të merrja parasysh…

  • përmirësimi i qëndrueshmërisë dhe trajtimit të përjashtimeve
  • eksploroni mënyra më të mira për të integruar metrikën AWS cloud
  • eksperimentoni me më shumë tregues fizikë si matës, grafikë me shirita,…
  • kanë mundësinë për të kaluar në platforma të tjera si Azure, Google, Heroku,…
  • monitoroni ngjarjet specifike të aplikacionit për Jenkins, GitHub,…

Shpresoj se ju ka pëlqyer leximi i këtij udhëzuesi dhe ndoshta keni zgjedhur diçka të re gjatë rrugës. Nëse mund të mendoni për një mënyrë tjetër/më të mirë për t'i bërë gjërat, ndajeni atë në komentet më poshtë. Dhe sigurisht, nëse vëreni gabime një kokë lart do të vlerësohej shumë. Faleminderit per kohen tuaj.

Recommended: