Sadržaj:
- Korak 1: Komponente, potrošni materijal, potrebni alati, aplikacije i usluge na mreži
- Korak 2: Hardver
- Korak 3: Arhitektura rješenja
- Korak 4: Softver
- Korak 5: Zaključak
Video: OBLAKNI MONITOR S AWS & ARDUINO - Električni dječak: 6 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:08
To je jednostavan projekt - upalite svjetlo kada nešto pođe po zlu … Postajući sve otupljeniji prema obavijestima s toliko kontrolnih ploča na našim računarima ovih dana, kako možemo biti sigurni da nećemo propustiti one zaista važne. Odgovor je pokazatelj fizičkog statusa. Ili preciznije za zadatak, Cloud Monitor, koji može da sedi na vašem stolu - uvek na vidiku. Kao što ime sugerira, monitor će vam pomoći da pazite na zdravlje vaših cloud usluga (… ili bilo čega drugog, nebo je granica, izvinite zbog igre riječi). Čak i ti, poput mene, moraš napraviti jedan? Čak i ako niste, 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 usluge na mreži
KOMPONENTE I POTROŠNI MATERIJAL
_ Arduino Micro e Genuino Micro (1 jedinica) … ili bilo koja mala Arduino kompatibilna - 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
_ Lemilica (generičko)
APLIKACIJE I MREŽNI SERVIS
_ 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
Noćno svjetlo već dolazi sa 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 je već godinama moja omiljena platforma za izradu prototipova i imam dosta rezervnih dijelova. Isporučuje se s dobrim stvarima: piezo zvučnik, dvije RGB LED diode (jedna je vezana za 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đe je sićušan, ali kompatibilan sa matičnom pločom.
Zašto nisam odabrao ESP8266? Da biste bili zaista bežični, mogli biste presjeći i kabel za napajanje - što stvari čini malo kompliciranijima zbog dodavanja baterije i neugodnosti pri punjenju. Budući da će monitor u oblaku sjediti pored mog računara, mnogo je lakše koristiti USB napajanje. Također postavljanje Wi-Fi veze nije uvijek jednostavno. Na osnovu ATmega32u4, Arduino Micro i LeoStick dijele neobičnost posjedovanja I2C podataka na D2 i takta na D3. To postaje važno kada povežete 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 proširiti žicom i sve držati u malom pakiranju koje se može priključiti. BlinkM ima vlastiti mikro kontroler na ploči i omogućava napredne aplikacije: npr. reproducirajte skriptirane uzorke boja bez spojenog Arduina. Skoro 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
Jedini snažan zahtjev koji sam sebi nametnuo bio je da monitor radi iza zaštitnog zida. Iako ključna karakteristika, ovo je web kuke za promjene događaja učinilo nepraktičnim. Mehanizam ispitivanja je skup u smislu TCP prometa i može odgoditi događaje ovisno o učestalosti anketiranja.
Rješenje se nalazi u WebSocketsima koji pružaju potpunu dupleksnu komunikaciju. Amazons IoT usluga pruža posrednika za poruke koji podržava MQTT preko WebSockets. Ispostavilo se da se usluga može pozvati bez potrebe za konfiguriranjem stvari, sjena, pravila ili pravila.
Za Arduino Yún dostupan je SDK uređaja i uloženi su određeni napori u prenošenju SDK -a na druge platforme poput ESP8266. No, budući da će monitor uvijek biti povezan serijskim sučeljem, rano sam odlučio imati NodeJS aplikaciju (koja se pokreće 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 vrši provjere ispravnosti na instanci web servera i pravila automatskog skaliranja na osnovu opterećenja CPU -a. Odgovarajući predložak CloudFormation može se ▶ ️ pregledati u Designer -u ili ▶ ️ izraditi izravno iz konzole. Napomena: neke usluge u ovom nizu mogu se naplatiti.
Proširio sam predložak sa svojstvima Lambda funkcije i potrebnim dozvolama. Kasnije je potrebno da se krajnja tačka IoT REST API -ja umetne kao parametar. Da bih to automatizirao, napisao sam malu ljuskastu skriptu koja koristi CLI da zatraži ARN (> aws iot description-endpoint), a zatim poziva create-stack s parametrom u 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_
// IZBRIŠI STAK> 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 to vrijeme ovaj dodatni sloj se osjećao suvišnim i odlučio sam koristiti pravila životnog ciklusa CloudWatch EC2 za direktno 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 reda. 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 efikasnosti koliko o pogodnosti. Cjeloviti izvori za ovu Sketch i druge datoteke mogu se dobiti na GitHubu. Slijedi nekoliko relevantnih isječaka 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 redova koda kada se koristi odličan 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) {
});
Povezivanje na AWS IoT također ne zahtijeva mnogo truda. Jedina zamka je znati da korištenje MQTT+WebSockets preko porta 443 zahtijeva provjeru autentičnosti putem pristupnih ključeva. SDK će ih č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', port: 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 kod boje kao ulazni parametar - nije lijep, ali je u ovoj fazi vrlo fleksibilan. Da bi se moglo objaviti u temi MQTT, ona instancira IotData objekt, za koji je potrebna krajnja točka IoT REST API. Predložak CloudFormation se pobrinuo za to prilikom stvaranja steka.
var AWS = require ('aws-sdk'); var mqtt = novi AWS. IotData ({
krajnja tač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 (greš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 kućni ljubimac projekat je bio gomila zabave. Da ovo podignem na viši nivo, razmislio bih o…
- poboljšanje robusnosti i rukovanje iznimkama
- istražite bolje načine za integraciju AWS oblačnih metrika
- eksperimentirajte s više fizičkih pokazatelja poput mjerača, stupčastih grafikona, …
- imate mogućnost prelaska na druge platforme poput Azure, Google, Heroku,…
- pratiti događaje vezane za aplikaciju za Jenkins, GitHub,…
Nadam se da ste uživali u čitanju ovog vodiča i da ste možda čak i usput pokupili nešto novo. Ako mislite o drugačijem/boljem načinu rada, podijelite ga u komentarima ispod. I naravno, ako uočite greške, bilo bi dobro da se obratite pažnju. Hvala ti na tvom vremenu.
Preporučuje se:
Vizualizacija podataka iz Magicbita u AWS -u: 5 koraka
Vizualizacija podataka iz Magicbita u AWS -u: Podaci prikupljeni sa senzora povezanih na Magicbit bit će objavljeni u jezgri AWS IOT -a putem MQTT -a za grafičku vizualizaciju u stvarnom vremenu. Koristimo magicbit kao razvojnu ploču u ovom projektu koji se temelji na ESP32. Stoga bilo koji ESP32 d
Upozorenje o temperaturi i vlažnosti pomoću AWS i ESP32: 11 koraka
Upozorenje o temperaturi i vlažnosti pomoću AWS i ESP32: U ovom vodiču ćemo mjeriti različite podatke o temperaturi i vlažnosti zraka pomoću senzora temperature i vlažnosti. Naučit ćete i kako poslati te podatke AWS -u
Drop Raspberry Pi sa Alexa glasovnim upravljanjem sa IoT -om i AWS -om: 6 koraka (sa slikama)
Raspberry Pi Drone s glasovnom kontrolom Alexa s IoT -om i AWS -om: Zdravo! Moje ime je Armaan. Ja sam 13-godišnji dječak iz Massachusettsa. Ovaj vodič pokazuje, kao što možete zaključiti iz naslova, kako izgraditi Raspberry Pi Drone. Ovaj prototip demonstrira kako se dronovi razvijaju, kao i koliko bi mogli odigrati veliku ulogu u
Hydroponics Blynk Monitor & Control System: 4 koraka
Hydroponics Blynk Monitor & Control System: U ovom projektu sam stvorio kontrolni sistem koji prati i kontroliše sve aspekte sistema oseke i protoka hidroponike srednje veličine. Soba za koju sam je sagradio koristi 4 x 4'x4 '640W LM301B 8 bar sisteme. Ali ove upute se ne odnose na moja svjetla. Ja
Vjetro stanica za jedrenje na bazi MQTT & AWS: 3 koraka (sa slikama)
Vjetropostaja za jedrenje na bazi MQTT & AWS: U Shenzhenu postoji mnogo prekrasnih plaža. U ljetnim danima najomiljeniji sport mi je jedrenje. Za sport u jedrenju i dalje sam starter, sviđa mi se osjećaj morske vode koji mi dodiruje lice, i još više, dobio sam mnogo novih prijatelja sa ovim sportom. Ali za