Satura rādītājs:

CLOUD MONITOR Ar AWS un ARDUINO - Electric Boy: 6 soļi
CLOUD MONITOR Ar AWS un ARDUINO - Electric Boy: 6 soļi

Video: CLOUD MONITOR Ar AWS un ARDUINO - Electric Boy: 6 soļi

Video: CLOUD MONITOR Ar AWS un ARDUINO - Electric Boy: 6 soļi
Video: CS50 2015 – 10-я неделя 2024, Novembris
Anonim
CLOUD MONITOR Ar AWS un ARDUINO - Electric Boy
CLOUD MONITOR Ar AWS un ARDUINO - Electric Boy

Tas ir vienkāršs projekts - ieslēdziet gaismu, ja kaut kas noiet greizi … Mūsdienās kļūstot arvien nejūtīgākiem pret paziņojumiem ar tik daudziem informācijas paneļiem mūsu datoros, kā mēs varam pārliecināties, ka nepalaižam garām patiešām svarīgos. Atbilde ir fiziskā stāvokļa indikators. Vai, konkrētāk, uzdevumam - mākoņa monitoru, kas var sēdēt uz jūsu galda - vienmēr redzamā vietā. Kā norāda nosaukums, monitors palīdzēs jums sekot jūsu mākoņpakalpojumu stāvoklim (vai kaut kas cits, debesis ir robeža, atvainojiet par vārdu spēli). Pat jums, tāpat kā man, tas ir jāizveido? Pat ja nē, jums var būt ideja par savu nākotnes IoT projektu.

Nu, ja esat gatavs, sāksim!

1. darbība. Komponenti, izejmateriāli, nepieciešamie rīki, lietotnes un tiešsaistes pakalpojums

SASTĀVDAĻAS UN PIEDERUMI

_ Arduino Micro un Genuino Micro (1 vienība)… vai jebkurš mazs, ar Arduino saderīgs - manā gadījumā freetronics LeoStick (https://www.freetronics.com.au/collections/arduino/products/leostick)

_ ThingM BlinkM - I2C kontrolēta RGB gaismas diode (1 vienība)

_ Mini mākoņu gaisma (1 vienība)… vai kāds cits caurspīdīgs trauks pēc jūsu izvēles

_ USB-A līdz B kabelis (1 vienība)… vai jebkurš vecs USB kabelis ar A tipa kontaktdakšu

VAJADZĪGI RĪKI

_ Lodāmurs (vispārīgs)

APP un tiešsaistes pakalpojums

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

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

2. darbība. Aparatūra

Aparatūra
Aparatūra
Aparatūra
Aparatūra

Nakts gaismā jau ir iebūvēts LED - manā gadījumā auksti balts. Es domāju, ka būtu jauki norādīt atšķirīgu statusu ar dažādām krāsām. Tāpēc es paturēju tikai mākoņa formas apvalku. Operācijas smadzenēm es izvēlējos mazāko ar Arduino saderīgo, kas man bija pieejams: Freetronics LeoStick jau gadiem ilgi ir bijusi mana iecienītākā prototipēšanas platforma, un man ir daudz rezerves daļu. Tas ir aprīkots ar labām lietām: pjezo skaļruni, divām RGB gaismas diodēm (viena ir pieslēgta pie strāvas, RX un TX), un pats labākais - varat to vienkārši pievienot USB portam - nav nepieciešams ārējs FTDI vai kabelis. Tas ir arī mazs, bet saderīgs ar maizi.

Kāpēc es neizvēlējos ESP8266? Lai būtu patiesi bezvadu savienojums, jūs varētu arī pārgriezt strāvas vadu - tas padara lietas nedaudz sarežģītākas akumulatora pievienošanai un neērtībām uzlādēšanā. Tā kā mākoņa monitors atradīsies blakus manam datoram, ir daudz vieglāk izmantot USB barošanu. Arī Wi-Fi savienojuma iestatīšana ne vienmēr ir vienkārša. Pamatojoties uz ATmega32u4, Arduino Micro un LeoStick dalās dīvainībā, ka D2 ir I2C dati un pulkstenis D3. Tas kļūst aktuāli, pievienojot BlinkM RGB LED. Atšķirībā no parastajām Atmega328 plāksnēm, kur jūs varat vienkārši pieslēgt BlinkM vairogu galvenēm A2.. A5, tas šeit nedarbosies (es neuztraucos par mīksto I2C bibliotēku).

Atlaidinot BlinkM vīriešu galvenes VCC un GND, es varētu pagarināt tos ar vadu un visu uzglabāt mazā, pievienojamā iepakojumā. BlinkM ir savs mikrokontrolleris un tas ļauj izmantot uzlabotas lietojumprogrammas: piem. atskaņot skriptu krāsu modeļus, ja nav pievienots Arduino. Man gandrīz šķiet, ka WS2812 (Adafruits NeoPixels ir lieliski) man būtu kalpojis labāk - diemžēl man nebija neviena. Lai pabeigtu aparatūras bitu, es nogriezu pretējā tipa A tipa USB spraudņa galu, izgriezu to caur iepriekš izurbtu caurumu netālu no mākoņu gaismas pamatnes un pielodēju vadus pie LeoStick (sarkans: 5V, balts: Dati, zaļš: Dati+, melni: Zeme).

3. solis: risinājumu arhitektūra

Risinājumu arhitektūra
Risinājumu arhitektūra
Risinājumu arhitektūra
Risinājumu arhitektūra

Vienīgā stingrā prasība, ko es sev izvirzīju, bija nodrošināt, lai monitors darbotos aiz ugunsmūra. Lai gan tā ir būtiska iezīme, tas padarīja tīmekļa āķus notikumu izmaiņām nepraktiskus. Aptaujas mehānisms ir dārgs TCP trafika ziņā un var aizkavēt notikumus atkarībā no aptaujas biežuma.

Risinājums ir atrodams WebSockets, kas nodrošina divpusēju saziņu. Amazones IoT pakalpojums nodrošina ziņojumu starpnieku, kas atbalsta MQTT, izmantojot WebSockets. Kā izrādās, pakalpojumu var izsaukt, nekonfigurējot lietas, ēnas, politikas vai noteikumus.

Arduino Yún ir pieejams ierīces SDK, un tiek mēģināts pārvietot SDK uz citām platformām, piemēram, ESP8266. Bet, tā kā monitors vienmēr tiks savienots ar seriālo interfeisu, es agri nolēmu izveidot NodeJS lietojumprogrammu (palaist galddatorā), lai ieviestu klienta API un izmantotu Arduino tikai krāsu kodu saņemšanai un parādīšanai. Tādā veidā JavaScript var viegli veikt izmaiņas, neuztraucoties par programmaparatūras augšupielādi. Lai pārbaudītu, ir nepieciešama neliela infrastruktūras piemērs. Pieņemsim, ka pieejamības zonās ir iespējots slodzes līdzsvarotājs, kas pārbauda tīmekļa servera instances veselības stāvokli un automātiskās mērogošanas politikas, pamatojoties uz CPU slodzi. Atbilstošo CloudFormation veidni var ▶ ️ apskatīt dizainera programmā vai ▶ ️ izveidot tieši no konsoles. Piezīme. Par dažiem pakalpojumiem šajā paketē var tikt piemērota maksa.

Es paplašināju veidni ar Lambda funkcijas rekvizītiem un nepieciešamajām atļaujām. Vēlāk pieprasīt IoT REST API galapunktu ievietot kā parametru. Lai to automatizētu, es uzrakstīju nelielu čaulas skriptu, kas izmanto CLI, lai pieprasītu ARN (> aws iot description-endpoint) un pēc tam izsauktu create-stack ar parametru rindā. Vai arī jūs joprojām varat to izdarīt ar savām rokām:

// RETRIVE IoT REST API ENDPOINT

aws iot aprakstīt-galapunkts

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

// DELETE STACK> aws cloudformation delete-stack-stack-name MiniCloudMonitor

Ideālā gadījumā man vajadzētu izmantot tos pašus trauksmes sliekšņus, kas aktivizē automātisko mērogošanu, lai izsauktu arī funkciju Lambda un tādējādi atjauninātu monitora statusu. Pašlaik tas ir iespējams tikai tad, ja SNS izmanto kā starpproduktu. Tajā laikā šis papildu slānis jutās lieks, un es nolēmu izmantot CloudWatch EC2 dzīves cikla noteikumus, lai tieši izsauktu Lambda. Tomēr es vēlos izpētīt SNS → Lambda iespēju nākotnē.

4. solis: programmatūra

Es sāku rakstīt Arduino skici. Galvenā cilpa () lasa rakstzīmes no sērijas savienojuma un veido virkni, līdz tā saņem jaunas rindas rakstzīmi. Pēc tam tiek pieņemts, ka tika nosūtīts heksadecimālais krāsu kods, un atbilstošā I2C komanda tiek ierakstīta BlinkM LED. Šeit nav runa tik daudz par efektivitāti, cik par ērtībām. Pilnus šīs skices un citu failu avotus var iegūt vietnē GitHub. Tālāk ir sniegti daži atbilstoši koda fragmenti.

void loop () {

kamēr (Serial.available ()) {

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

ja (inChar == '\ n') {

garš skaitlis = strtol (inputString.c_str (), NULL, 16);

baits r = skaitlis >> 16;

baits g = skaitlis >> 8 & 0xFF;

baits b = skaitlis & 0xFF;

BlinkM_fadeToRGB (blinkm_addr, r, g, b);

inputString = "";

} vēl {

inputString += inChar;

}

}

}

Lietotnei NodeJS ir jāievieš saskarnes ar AWS un Arduino. Vēlāk to var paveikt tikai dažās koda rindās, izmantojot izcilo seriālā porta paketi:

var serialport = prasīt ('serialport'); port = new serialport (PORT_COM_NAME, {

baudRate: SERIAL_BAUD_RATE

});

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

});

port.on ('kļūda', funkcija (kļūda) {

});

Arī savienošanās ar AWS IoT neprasa daudz pūļu. Vienīgā kļūda ir zināt, ka, izmantojot MQTT+WebSockets, izmantojot 443. portu, ir nepieciešama autentifikācija, izmantojot piekļuves atslēgas. SDK tos nolasīs no vides mainīgajiem. Var būt nepieciešams skaidri eksportēt AWS_ACCESS_KEY_ID un AWS_SECRET_ACCESS_KEY.

var awsiot = pieprasīt ('aws-iot-device-sdk'); var device = awsiot.device ({

clientId: 'MiniCloudMonitor-' + (Math.floor ((Math.random () * 100000) + 1)), reģions: AWS_REGION, protokols: "wss", osta: 443, atkļūdot: taisnība

});

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

device.subscribe (MQTT_TOPIC);

});

device.on ('ziņojums', funkcija (tēma, lietderīgā slodze) {

ja (ports && slodze && tēma == MQTT_TOPIC) {

var message = JSON.parse (lietderīgā slodze);

ja (message.hasOwnProperty (MQTT_JSON_KEY))

{atgriešanās;

}

}

});

Funkcija Lambda pieņem krāsu kodu kā ievades parametru - nav skaista, bet ļoti elastīga šajā posmā. Lai varētu publicēt tēmā MQTT, tā izveido IotData objektu, kuram ir nepieciešams IoT REST API galapunkts. CloudFormation veidne par to rūpējās kaudzes izveides laikā.

var AWS = prasīt ('aws-sdk'); var mqtt = jauns AWS. IotData ({

galapunkts: process.env. MQTT_ENDPOINT});

export.handler = funkcija (notikums, konteksts, atzvanīšana) {

var params = {

tēma: process.env. MQTT_TOPIC, lietderīgā slodze: '{ "color \": / "' + event.colour + '\"}', qos: 0

};

mqtt.publish (parametri, funkcija (kļūda, dati) {

atzvanīšana (kļūda);

});

};

5. darbība. Secinājums

Man patiesi patika ienest virtuālo notikumu, kas “dzimis” mākonī fiziskajā pasaulē. Un kā mans mazais mājdzīvnieku projekts tas bija daudz jautrības. Lai to paceltu nākamajā līmenī, es apsvērtu…

  • uzlabojot izturību un izņēmumu apstrādi
  • izpētīt labākus veidus, kā integrēt AWS mākoņa metriku
  • eksperimentējiet ar citiem fiziskiem rādītājiem, piemēram, mērierīcēm, joslu diagrammām,…
  • ir iespēja pāriet uz citām platformām, piemēram, Azure, Google, Heroku,…
  • pārraudzīt lietojumprogrammu notikumus Jenkins, GitHub,…

Es ceru, ka jums patika lasīt šo rokasgrāmatu un varbūt pat paņēmāt kaut ko jaunu. Ja jūs varat iedomāties citu/labāku veidu, kā rīkoties, lūdzu, kopīgojiet to zemāk esošajos komentāros. Un, protams, ja pamanīsit kļūdas, pacelšanās būs ļoti pateicīga. Paldies par tavu laiku.

Ieteicams: