Sadržaj:

OBLAKNI MONITOR S AWS & ARDUINO - Električni dječak: 6 koraka
OBLAKNI MONITOR S AWS & ARDUINO - Električni dječak: 6 koraka

Video: OBLAKNI MONITOR S AWS & ARDUINO - Električni dječak: 6 koraka

Video: OBLAKNI MONITOR S AWS & ARDUINO - Električni dječak: 6 koraka
Video: Бесплатное Видеонаблюдение.Будет ли работать камера без ОБЛАКА? 2024, Studeni
Anonim
OBLAKNI MONITOR S AWS & ARDUINO - Electric Boy
OBLAKNI MONITOR S AWS & ARDUINO - Electric Boy

To je jednostavan projekt - upalite svjetlo kad nešto pođe po zlu … Postajući sve otupljeniji prema obavijestima s toliko nadzornih ploča na našim računalima ovih dana, kako možemo biti sigurni da ne propuštamo one zaista važne. Odgovor je pokazatelj fizičkog statusa. Ili preciznije za zadatak, Cloud Monitor, koji može sjediti na vašem stolu - uvijek na vidiku. Kao što ime sugerira, monitor će vam pomoći pri praćenju zdravlja vaših usluga u oblaku (… ili bilo čemu drugom doista, nebo je granica, oprostite na dosjetki). Čak i vi, poput mene, trebate napraviti jedan? Čak i ako ne, možda imate ideju za svoj budući IoT projekt.

Pa, ako ste spremni, počnimo!

Korak 1: Komponente, potrošni materijal, potrebni alati, aplikacije i mrežne usluge

KOMPONENTE I Opskrba

_ Arduino Micro e Genuino Micro (1 jedinica) … ili bilo koja mala kompatibilna s Arduinom - u mom slučaju freetronics LeoStick (https://www.freetronics.com.au/collections/arduino/products/leostick)

_ ThingM BlinkM - I2C kontrolirana RGB LED (1 jedinica)

_ Mini svjetlo u oblaku (1 jedinica) … ili bilo koja druga prozirna posuda po vašem izboru

_ Kabel USB-A do B (1 jedinica) … ili bilo koji stari USB kabel s utikačem tipa A

POTREBNI ALATI

_ Lemilo (generičko)

APLIKACIJE I MREŽNE USLUGE

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

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

Korak 2: Hardver

Hardver
Hardver
Hardver
Hardver

Noćno svjetlo već dolazi s ugrađenom LED diodom - u mom slučaju hladno bijelo. Mislio sam da bi bilo lijepo označiti drugačiji status različitim bojama. Tako sam zadržao samo kućište u obliku oblaka. Za mozak operacije odabrao sam najmanji Arduino kompatibilan koji sam imao na raspolaganju: Freetronics LeoStick već godinama je moja omiljena platforma za izradu prototipova i imam puno rezervnih dijelova. Isporučuje se s dobrim stvarima: piezo zvučnik, dvije RGB LED diode (jedna je spojena na napajanje, iako RX i TX), a najbolje od svega je što je možete jednostavno priključiti na USB priključak - nisu potrebni vanjski FTDI ili kabel. Također je sićušan, ali kompatibilan s matičnom pločom.

Zašto nisam odabrao ESP8266? Da biste bili doista bežični, mogli biste odrezati i kabel za napajanje - što stvari čini malo kompliciranijima zbog dodavanja baterije i neugodnosti pri punjenju. Budući da će monitor u oblaku sjediti uz moje računalo, mnogo je lakše koristiti USB napajanje. Također postavljanje Wi-Fi veze nije uvijek jednostavno. Na temelju ATmega32u4, Arduino Micro i LeoStick dijele neobičnost posjedovanja I2C podataka na D2 i takta na D3. To postaje važno kada spojite BlinkM RGB LED. Za razliku od uobičajenih Atmega328 ploča na koje možete jednostavno priključiti BlinkM štit u zaglavlja A2.. A5, ovo ovdje neće raditi (nisam se zamarao soft softverom I2C).

Raspakiranjem muških zaglavlja VCC i GND na BlinkM-u, mogao sam ih produžiti žicom i sve držati u pakiranju koje se može priključiti. BlinkM ima vlastiti mikro kontroler na ploči i omogućuje napredne aplikacije: npr. reproducirajte skriptirane uzorke boja bez spojenog Arduina. Gotovo da osjećam da bi mi WS2812 (Adafruits NeoPixels odlični) bolje poslužio - nažalost nisam imao nijedan dostupan. Da bih dovršio hardverski dio, izrezao sam suprotni kraj muškog USB utikača tipa A, provukao ga kroz prethodno izbušenu rupu blizu baze svjetla oblaka i lemio žice na LeoSticku (crveno: 5V, bijelo: Podaci-, zeleno: Podaci+, crno: Uzemljenje).

Korak 3: Arhitektura rješenja

Arhitektura rješenja
Arhitektura rješenja
Arhitektura rješenja
Arhitektura rješenja

Jedini snažan zahtjev koji sam sebi nametnuo bio je da monitor radi iza vatrozida. Iako ključna značajka, web kuke za promjene događaja učinile su nepraktičnim. Mehanizam ispitivanja je skup u smislu TCP prometa i može odgoditi događaje ovisno o učestalosti prozivanja.

Rješenje se nalazi u WebSocketsima koji omogućuju potpunu dupleksnu komunikaciju. Amazons IoT usluga pruža posrednika u porukama koji podržava MQTT putem WebSockets. Ispostavilo se da se usluga može pozvati bez potrebe za konfiguriranjem stvari, sjena, pravila ili pravila.

Dostupan je SDK uređaja za Arduino Yún i uloženi su neki napori u prenošenju SDK -a na druge platforme poput ESP8266. No, budući da će monitor uvijek biti spojen serijskim sučeljem, rano sam odlučio imati NodeJS aplikaciju (pokrenutu na stolnom računalu) za implementaciju klijentskog API -ja i koristiti Arduino samo za primanje i prikaz kodova boja. Na taj način se mogu lako izvršiti promjene u JavaScriptu, a da se ne morate opterećivati postavljanjem firmvera. Za testiranje je potrebno malo primjera infrastrukture. Recimo da imamo omogućen balans opterećenja u svim zonama dostupnosti koji provjerava ispravnost instance web poslužitelja i pravila automatskog skaliranja na temelju opterećenja CPU -a. Odgovarajući predložak CloudFormation može se ▶ ️ prikazati u Designer -u ili ▶ ️ izravno iz konzole. Napomena: neke usluge u ovom hrpi mogu se naplatiti.

Proširio sam predložak sa svojstvima za Lambda funkciju i potrebnim dopuštenjima. Kasnije je potrebno da se krajnja točka IoT REST API -ja umetne kao parametar. Da bih to automatizirao, napisao sam malu ljuskastu skriptu koja koristi CLI za traženje ARN-a (> aws iot description-endpoint), a zatim poziva create-stack s parametrom na liniji. Ili to možete učiniti ručno:

// RETRIVE IoT REST API ENDPOINT

aws iot description-endpoint

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

// IZBRIŠI NIZ> aws cloudformation delete-stack --stack-name MiniCloudMonitor

U idealnom slučaju trebao bih koristiti iste pragove alarma koji pokreću automatsko skaliranje, za pozivanje Lambda funkcije i na taj način ažurirati status monitora. Trenutno je to moguće samo ako se SNS koristi kao posrednik. U vrijeme kada se ovaj dodatni sloj činio suvišnim i odlučio sam koristiti pravila životnog ciklusa CloudWatch EC2 za izravno pozivanje Lambde. Ipak, želim istražiti opciju SNS → Lambda u budućnosti.

Korak 4: Softver

Počeo sam s pisanjem Arduino skice. Glavna petlja () čita znakove iz serijske veze i gradi String sve dok ne primi znak novog retka. Tada se pretpostavlja da je poslan heksadecimalni kod boje i da se odgovarajuća I2C naredba zapisuje na BlinkM LED. Ovdje se ne radi toliko o učinkovitosti koliko o praktičnosti. Cjeloviti izvori za ovu skicu i druge datoteke mogu se dobiti na GitHubu. Slijede neki relevantni isječci koda:

void loop () {{100} {101}

while (Serial.available ()) {

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

if (inChar == '\ n') {

long number = strtol (inputString.c_str (), NULL, 16);

bajt r = broj >> 16;

bajt g = broj >> 8 & 0xFF;

bajt b = broj & 0xFF;

BlinkM_fadeToRGB (blinkm_addr, r, g, b);

inputString = "";

} else {

inputString += inChar;

}

}

}

Aplikacija NodeJS mora implementirati sučelja za AWS i Arduino. Kasnije se može postići u samo nekoliko redaka koda kada se koristi izvrstan paket serijskog porta:

var serialport = require ('serialport'); port = novi serijski port (PORT_COM_NAME, {

baudRate: SERIAL_BAUD_RATE

});

port.on ('open', function () {{100} {101}

});

port.on ('error', function (err) {{100} {101}

});

Povezivanje s AWS IoT -om također ne zahtijeva mnogo truda. Jedina zamka je znati da korištenje MQTT+WebSockets preko porta 443 zahtijeva autentifikaciju putem pristupnih ključeva. SDK će ih pročitati iz varijabli okruženja. Možda će biti potrebno eksplicitno izvesti AWS_ACCESS_KEY_ID i AWS_SECRET_ACCESS_KEY.

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

clientId: 'MiniCloudMonitor-' + (Math.floor ((Math.random () * 100000) + 1)), regija: AWS_REGION, protokol: 'wss', priključak: 443, debug: istina

});

device.on ('povezivanje', funkcija () {

device.subscribe (MQTT_TOPIC);

});

device.on ('poruka', funkcija (tema, korisni teret) {

if (port && korisni teret && topic == MQTT_TOPIC) {

var poruka = JSON.parse (korisni teret);

if (message.hasOwnProperty (MQTT_JSON_KEY))

{return;

}

}

});

Lambda funkcija prihvaća kôd boje kao ulazni parametar - nije lijep, ali u ovoj fazi vrlo fleksibilan. Da bi se moglo objaviti u temi MQTT, ona instancira objekt IotData, za koji je potrebna krajnja točka IoT REST API. Predložak CloudFormation pobrinuo se za to prilikom stvaranja hrpe.

var AWS = require ('aws-sdk'); var mqtt = novi AWS. IotData ({

krajnja točka: process.env. MQTT_ENDPOINT});

export.handler = funkcija (događaj, kontekst, povratni poziv) {

var params = {

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

};

mqtt.publish (parami, funkcija (greška, podaci) {

povratni poziv (pogreška);

});

};

Korak 5: Zaključak

Zaista sam uživao donijeti virtualni događaj "rođen" u oblaku u fizički svijet. I kao moj mali projekt kućnih ljubimaca bio je gomila zabave. Da ovo podignem na višu razinu, razmislio bih o…

  • poboljšanje robusnosti i rukovanje iznimkama
  • istražiti bolje načine integracije AWS oblačnih mjernih podataka
  • eksperimentirajte s više fizičkih pokazatelja poput mjerača, stupčastih grafikona, …
  • imate mogućnost prelaska na druge platforme poput Azure, Google, Heroku,…
  • nadzirati događaje specifične za aplikaciju za Jenkins, GitHub,…

Nadam se da ste uživali čitajući ovaj vodič i da ste možda čak i usput pokupili nešto novo. Ako se možete sjetiti drugačijeg/boljeg načina rada, podijelite ga u komentarima ispod. I naravno, ako uočite pogreške, bilo bi dobro da se obratite pažnju. Hvala na Vašem vremenu.

Preporučeni: