Kazalo:
- Korak: Komponente, potrošni material, potrebna orodja, aplikacije in spletne storitve
- 2. korak: Strojna oprema
- 3. korak: Arhitektura rešitev
- 4. korak: Programska oprema
- 5. korak: Zaključek
Video: OBLAKNI MONITOR Z AWS & ARDUINO - Electric Boy: 6 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:06
To je preprost projekt - prižgite luč, ko gre kaj narobe … V teh dneh postaja vse bolj otopelo do obvestil s toliko nadzornimi ploščami v naših računalnikih, kako lahko poskrbimo, da ne zamudimo resnično pomembnih. Odgovor je kazalnik fizičnega stanja. Ali bolj natančno za nalogo, Cloud Monitor, ki lahko sedi na vaši mizi - vedno na vidiku. Kot že ime pove, bo monitor pomagal spremljati zdravje vaših storitev v oblaku (… ali karkoli drugega, nebo je meja, oprostite besedni igri). Tudi vi, tako kot jaz, morate to narediti? Tudi če ne, imate morda idejo za svoj prihodnji projekt IoT.
No, če ste pripravljeni, začnimo!
Korak: Komponente, potrošni material, potrebna orodja, aplikacije in spletne storitve
SESTAVINE IN SREDSTVA
_ Arduino Micro e Genuino Micro (1 enota) … ali kateri koli manjši Arduino združljiv - v mojem primeru freetronics LeoStick (https://www.freetronics.com.au/collections/arduino/products/leostick)
_ ThingM BlinkM - I2C krmiljena LED RGB (1 enota)
_ Mini oblak (1 enota) … ali katero koli drugo prosojno posodo po vaši izbiri
_ Kabel USB-A do B (1 enota) … ali kateri koli stari kabel USB z vtičem tipa A.
POTREBNA ORODJA
_ Spajkalnik (generično)
APLIKACIJE IN SPLETNE STORITVE
_ Amazon Web Services AWS Lambda (https://aws.amazon.com/it/lambda/)
_ Amazon Web Services AWS IoT (https://aws.amazon.com/it/iot/)
2. korak: Strojna oprema
Nočna luč že ima vgrajeno LED - v mojem primeru hladno belo. Mislil sem, da bi bilo lepo označiti drugačen status z različnimi barvami. Tako sem ohranil samo ohišje v obliki oblaka. Za možgane operacije sem izbral najmanjši kompatibilen Arduino, ki sem ga imel na voljo: Freetronics LeoStick je že leta moja najljubša platforma za izdelavo prototipov in imam veliko rezervnih delov. Opremljen je z dobrimi stvarmi: piezo zvočnikom, dvema RGB LED diodama (ena je povezana z napajanjem, čeprav RX in TX), najbolje pa je, da ga preprosto priključite na vrata USB - zunanji FTDI ali kabel ni potreben. Je tudi majhen, vendar združljiv s ploščami.
Zakaj nisem izbral ESP8266? Če želite biti resnično brezžični, lahko prerežete tudi napajalni kabel, kar nekoliko oteži dodajanje baterije in neprijetnosti pri polnjenju. Ker bo monitor v oblaku sedel poleg mojega računalnika, je veliko lažje uporabiti napajanje USB. Tudi vzpostavitev povezave Wi-Fi ni vedno preprosta. Na podlagi ATmega32u4 Arduino Micro in LeoStick delita nenavadnost podatkov I2C na D2 in ure na D3. To postane pomembno pri priključitvi LED -diode BlinkM RGB. Za razliko od običajnih plošč Atmega328, kjer lahko preprosto priključite ščit BlinkM v glave A2.. A5, to tukaj ne bo delovalo (nisem se obremenjeval z mehko knjižnico I2C).
Z razpakiranjem moških glav VCC in GND na BlinkM-u bi jih lahko nato podaljšal z žico in vse shranil v majhnem paketu. BlinkM ima svoj mikro krmilnik in omogoča napredne aplikacije: npr. predvajajte scenarijske barvne vzorce brez priključenega Arduina. Skoraj se mi zdi, da bi mi WS2812 (Adafruits NeoPixels super) bolj služil - žal nisem imel na voljo nobenega. Za dokončanje nastavka strojne opreme sem prerezal nasprotni konec moškega vtiča USB tipa A, ga napeljal skozi predhodno izvrtano luknjo blizu podnožja luči oblaka in žice spajkal na LeoStick (rdeča: 5 V, bela: Podatki-, zeleno: Podatki+, črno: Ozemljeno).
3. korak: Arhitektura rešitev
Edina močna zahteva, ki sem si jo naložil, je bila, da monitor deluje za požarnim zidom. Čeprav je to ključna lastnost, so spletne kljuke za spremembe dogodkov postale nepraktične. Mehanizem glasovanja je drag v smislu prometa TCP in lahko odloži dogodke, odvisno od pogostosti glasovanja.
Rešitev je v WebSockets, ki zagotavljajo popolno obojestransko komunikacijo. Storitev Amazons IoT ponuja posrednika sporočil, ki podpira MQTT prek WebSockets. Izkazalo se je, da je storitev mogoče poklicati, ne da bi morali konfigurirati stvari, sence, politike ali pravila.
Za Arduino Yún je na voljo SDK za napravo, kar nekaj truda pa si prizadeva za prenos SDK -ja na druge platforme, kot je ESP8266. Ker pa bo monitor vedno povezan s serijskim vmesnikom, sem se že zgodaj odločil za aplikacijo NodeJS (ki se izvaja na namiznem računalniku) za izvajanje odjemalčevega API -ja in uporabljal Arduino samo za sprejemanje in prikaz barvnih kod. Na ta način je mogoče v JavaScript preprosto narediti spremembe, ne da bi se morali ukvarjati z nalaganjem vdelane programske opreme. Za testiranje je potreben majhen primer infrastrukture. Recimo, da imamo na območjih razpoložljivosti omogočen izravnalnik obremenitve, ki preverja stanje na primerku spletnega strežnika in pravilnike o samodejnem prilagajanju glede na obremenitev procesorja. Ustrezno predlogo CloudFormation si lahko ▶ ️ ogledate v Oblikovalcu ali ▶ ️ ustvarite neposredno iz konzole. Opomba: nekatere storitve v tem nizu se lahko zaračunajo.
Razširil sem predlogo z lastnostmi za funkcijo Lambda in potrebnimi dovoljenji. Kasneje je treba kot parameter vstaviti končno točko API -ja REST IoT. Za avtomatizacijo sem napisal majhen skript lupine, ki uporablja CLI za zahtevo ARN (> aws iot description-endpoint) in nato pokliče create-stack s parametrom v vrstici. Ali pa lahko to storite še ročno:
// KONČNA TOČKA RETRIVE IoT REST API
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 NOS> aws cloudformation delete-stack --stack-name MiniCloudMonitor
V idealnem primeru bi moral uporabiti iste alarmne pragove, ki sprožijo samodejno skaliranje, tudi za klicanje funkcije Lambda in na ta način posodobiti stanje monitorja. Trenutno je to mogoče le, če uporabljate SNS kot vmesni izdelek. Takrat se mi je zdelo, da je ta dodatna plast odveč, zato sem se odločil, da bom s pravili življenjskega cikla CloudWatch EC2 poklical neposredno Lambdo. Kljub temu želim v prihodnosti raziskati možnost SNS → Lambda.
4. korak: Programska oprema
Začel sem s pisanjem skice Arduino. Glavna zanka () bere znake iz zaporedne povezave in gradi niz, dokler ne prejme znaka nove vrstice. Nato se domneva, da je bila poslana šestnajstiška barvna koda in da je ustrezen ukaz I2C zapisan na LED BlinkM. Ne gre toliko za učinkovitost kot za udobje. Celotne vire za to skico in druge datoteke lahko dobite na GitHubu. Sledi nekaj ustreznih delčkov kode:
void loop () {
medtem ko (Serial.available ()) {
char inChar = (char) Serial.read ();
if (inChar == '\ n') {
dolga številka = strtol (inputString.c_str (), NULL, 16);
bajt r = število >> 16;
bajt g = število >> 8 & 0xFF;
bajt b = število & 0xFF;
BlinkM_fadeToRGB (blinkm_addr, r, g, b);
inputString = "";
} drugo {
inputString += inChar;
}
}
}
Aplikacija NodeJS mora izvajati vmesnike za AWS in Arduino. Kasneje je to mogoče doseči v le nekaj vrsticah kode pri uporabi odličnega paketa serijskih portov:
var serialport = require ('serialport'); port = novo serijsko pristanišče (PORT_COM_NAME, {
baudRate: SERIAL_BAUD_RATE
});
port.on ('open', function () {
});
port.on ('error', function (err) {
});
Tudi povezava z AWS IoT ne zahteva veliko truda. Edina napaka je vedeti, da uporaba MQTT+WebSockets prek vrat 443 zahteva preverjanje pristnosti prek ključev za dostop. SDK jih bo prebral iz spremenljivk okolja. Morda bo treba izrecno izvoziti AWS_ACCESS_KEY_ID in 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', vrata: 443, debug: res
});
device.on ('connect', function () {
device.subscribe (MQTT_TOPIC);
});
device.on ('sporočilo', funkcija (tema, koristna obremenitev) {
if (vrata && koristna obremenitev && topic == MQTT_TOPIC) {
var sporočilo = JSON.parse (koristna obremenitev);
if (message.hasOwnProperty (MQTT_JSON_KEY))
{return;
}
}
});
Lambda funkcija kot vhodni parameter sprejme barvno kodo - ni lepa, a na tej stopnji zelo prilagodljiva. Za objavo v temi MQTT instancira objekt IotData, za katerega je potrebna končna točka IoT REST API. Predloga CloudFormation je za to poskrbela med ustvarjanjem sklada.
var AWS = require ('aws-sdk'); var mqtt = nov AWS. IotData ({
končna točka: process.env. MQTT_ENDPOINT});
export.handler = funkcija (dogodek, kontekst, povratni klic) {
var params = {
tema: process.env. MQTT_TOPIC, koristna obremenitev: '{ "color \": / "' + event.colour + '\"}', qos: 0
};
mqtt.publish (parami, funkcija (napaka, podatki) {
povratni klic (napaka);
});
};
5. korak: Zaključek
Resnično sem užival, ko sem virtualni dogodek, "rojen" v oblaku, prinesel v fizični svet. In kot moj mali hišni projekt je bilo veliko zabave. Za prehod na naslednjo stopnjo bi razmislil …
- izboljšanje robustnosti in ravnanja z izjemami
- raziščite boljše načine za vključitev meritev v oblaku AWS
- eksperimentirajte z več fizikalnimi kazalniki, kot so merilniki, stolpčni grafikoni, …
- imate možnost, da se premaknete na druge platforme, kot so Azure, Google, Heroku,…
- spremljati dogodke, specifične za aplikacijo za Jenkins, GitHub,…
Upam, da ste uživali v branju tega priročnika in ste morda ob tem tudi pobrali kaj novega. Če razmišljate o drugačnem/boljšem načinu dela, ga delite v spodnjih komentarjih. In seveda, če bi opazili napake, bi bil head up zelo cenjen. Hvala za vaš čas.
Priporočena:
DIY adapter za tipkovnico PS/2 za LSDj (Game Boy): 7 korakov
DIY adapter za tipkovnico PS/2 za LSDj (Game Boy): OPOMBA: Povezovalni kabli se razlikujejo po zasnovi. Ne moremo jamčiti, da bo ta vadnica veljala za vaš kabel. Potrebni deli: Gameboy & Gameboy Color Link kabel (prednostno poprodajno) Ženski adapter DIN 6/PS/2 - http: //www.digikey.com
Vetrna postaja za jadranje na deski na podlagi MQTT & AWS: 3 koraki (s slikami)
Vetrna postaja za jadranje na deski, ki temelji na MQTT & AWS: V Shenzhenu je veliko lepih plaž. V poletnih dneh je moj najljubši šport jadranje. Za jadranje sem še vedno starter, všeč mi je občutek morske vode, ki se mi dotika obraza, in še več, s tem športom sem dobil veliko novih prijateljev
Še ena vremenska postaja Arduino (ESP-01 & BMP280 & DHT11 & OneWire): 4 koraki
Še ena vremenska postaja Arduino (ESP-01 & BMP280 & DHT11 & OneWire): Tu najdete eno ponovitev uporabe OneWire z zelo malo zatiči ESP-01. Naprava, ustvarjena v tem navodilu, se poveže z omrežjem Wi-Fi vašega izbira (morate imeti poverilnice …) Zbira senzorične podatke iz BMP280 in DHT11
Monitor Raspberry Pi Impact Force Monitor!: 16 korakov (s slikami)
Raspberry Pi Impact Force Monitor !: Koliko vpliva lahko prenese človeško telo? Ne glede na to, ali gre za nogomet, plezanje ali kolesarsko nesrečo, je zelo pomembno, da po trčenju takoj poiščete zdravniško pomoč, še posebej, če ni očitnih znakov trama
Arduino CPU+RAM Monitor Monitor LCD: 5 korakov
Arduino CPU+RAM Monitor Monitor LCD: Pozdravljeni, vseeno sem naredil monitor za uporabo Arduino CPU+RAM z uporabo preproste skice Arduino in programa VB.net. V tem navodilu vam bom pokazal, kako to narediti. Program vb.net vsebuje preizkuševalnik povezav Arduino in lahko napišete besedilo po meri v