Sisällysluettelo:

PILVEMONITORI AWS & ARDUINO - Sähköpoika: 6 vaihetta
PILVEMONITORI AWS & ARDUINO - Sähköpoika: 6 vaihetta

Video: PILVEMONITORI AWS & ARDUINO - Sähköpoika: 6 vaihetta

Video: PILVEMONITORI AWS & ARDUINO - Sähköpoika: 6 vaihetta
Video: Голубая стрела (1958) фильм 2024, Marraskuu
Anonim
PILVIMONITORI AWS & ARDUINO - Electric Boy
PILVIMONITORI AWS & ARDUINO - Electric Boy

Se on yksinkertainen projekti - sytytä valo, kun jokin menee pieleen… Kun tunnet yhä enemmän tunnelmia ilmoituksille, joissa on niin paljon kojelautoja tietokoneissamme, kuinka voimme varmistaa, ettemme unohda todella tärkeitä. Vastaus on fyysisen tilan indikaattori. Tai tarkemmin tehtävään, Cloud Monitor, joka voi istua työpöydälläsi - aina näkyvillä. Kuten nimestä voi päätellä, näyttö auttaa pitämään silmällä pilvipalveluidesi terveyttä (… tai mitä tahansa muuta, taivas on rajana, anteeksi sananlasku). Jopa sinun, kuten minun, täytyy tehdä sellainen? Vaikka ei, sinulla voi olla idea tulevaa IoT -projektiasi varten.

No, jos olet valmis, aloitetaan!

Vaihe 1: Komponentit, tarvikkeet, tarvittavat työkalut, sovellukset ja online -palvelu

KOMPONENTIT JA TARVIKKEET

_ Arduino Micro ja Genuino Micro (1 yksikkö)… tai mikä tahansa pieni Arduino -yhteensopiva - minun tapauksessani freetronics LeoStick (https://www.freetronics.com.au/collections/arduino/products/leostick)

_ ThingM BlinkM - I2C -ohjattu RGB -LED (1 yksikkö)

_ Minipilvivalo (1 yksikkö)… tai mikä tahansa muu valitsemasi läpikuultava astia

_ USB-A-B-kaapeli (1 yksikkö)… tai mikä tahansa vanha USB-kaapeli, jossa on A-tyypin pistoke

TARVITTAVAT TYÖKALUT

_ Juotosrauta (yleinen)

SOVELLUKSET JA VERKKOPALVELU

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

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

Vaihe 2: Laitteisto

Laitteisto
Laitteisto
Laitteisto
Laitteisto

Yövalossa on jo sisäänrakennettu LED - kylmä valkoinen minun tapauksessani. Ajattelin, että olisi mukava ilmaista eri tila eri väreillä. Joten pidin vain pilven muotoista koteloa. Operaation aivoihin valitsin pienimmän käytettävissä olevan Arduino -yhteensopivan: Freetronics LeoStick on ollut suosikki prototyyppialustani vuosia ja minulla on paljon varaosia. Siinä on paljon hyvää: pietsokaiutin, kaksi RGB -LEDiä (yksi on kytketty virtalähteeseen, RX ja TX) ja mikä parasta, voit liittää sen USB -porttiin - ulkoista FTDI: tä tai kaapelia ei tarvita. Se on myös pieni, mutta leipälauta yhteensopiva.

Miksi en valinnut ESP8266? Jos haluat olla todella langaton, voit myös katkaista virtajohdon - mikä tekee asioista hieman monimutkaisempia akun lisäämisen ja lataamisen haitan vuoksi. Koska pilvimonitori istuu tietokoneen vieressä, USB -virran käyttö on paljon helpompaa. Myös Wi-Fi-yhteyden määrittäminen ei ole aina suoraviivaista. ATmega32u4: n perusteella Arduino Micro ja LeoStick jakavat sen kummallisuuden, että I2C-data on D2: ssa ja kello D3: ssa. Tästä tulee merkityksellistä, kun liität BlinkM RGB LED -valon. Toisin kuin tavalliset Atmega328 -levyt, joissa voit yksinkertaisesti liittää BlinkM -suojan otsikoihin A2.. A5, tämä ei toimi täällä (en vaivautunut pehmeän I2C -kirjaston kanssa).

Irrottamalla BlinkM: n urospuoliset otsikot VCC ja GND, voisin sitten laajentaa johdoilla ja pitää kaiken liitettävissä pienessä pakkauksessa. BlinkM: ssä on oma mikro-ohjain ja se mahdollistaa kehittyneet sovellukset: esim. pelata käsikirjoitettuja värikuvioita ilman Arduinoa. Minusta melkein tuntuu, että WS2812 (Adafruits NeoPixels ovat mahtavia) olisi palvellut minua paremmin - valitettavasti minulla ei ollut saatavilla. Laitteiston bitin viimeistelyyn leikkasin urospuolisen A-tyypin USB-pistokkeen vastakkaisen pään, pujotin sen esiporatun reiän läpi pilvivalon pohjan lähellä ja juotin johdot LeoStickiin (punainen: 5V, valkoinen: Data-, vihreä: Data+, musta: maa).

Vaihe 3: Ratkaisuarkkitehtuuri

Ratkaisuarkkitehtuuri
Ratkaisuarkkitehtuuri
Ratkaisuarkkitehtuuri
Ratkaisuarkkitehtuuri

Ainoa vahva vaatimus, jonka asetin itselleni, oli saada näyttö toimimaan palomuurin takana. Vaikka tämä on tärkeä ominaisuus, se teki verkkokoukut tapahtumamuutoksiin epäkäytännöllisiksi. Äänestysmekanismi on kallista TCP -liikenteen kannalta ja voi viivästyttää tapahtumia äänestystaajuudesta riippuen.

Ratkaisu löytyy WebSocketsista, joka tarjoaa kaksisuuntaisen tiedonsiirron. Amazonin IoT -palvelu tarjoaa viestinvälittäjän, joka tukee MQTT: tä WebSocketsin kautta. Kuten käy ilmi, palvelu voidaan kutsua tarvitsematta määrittää asioita, varjoja, käytäntöjä tai sääntöjä.

Arduino Yúnille on saatavilla laitteen SDK, ja SDK: n siirtäminen muihin alustoihin, kuten ESP8266, on pyritty. Mutta koska näyttö yhdistetään aina sarjaliitännällä, päätin varhain hankkia NodeJS -sovelluksen (ajettava pöytätietokoneella) asiakassovellusliittymän toteuttamiseksi ja käyttää Arduinoa vain värikoodien vastaanottamiseen ja näyttämiseen. Näin JavaScriptin muutokset voidaan tehdä helposti ilman, että sinun tarvitsee huolehtia laiteohjelmistojen lataamisesta. Oletetaan, että meillä on käytössä kuormantasaaja kaikkialla käytettävyysvyöhykkeillä, joka tarkistaa verkkopalvelimen instanssin terveystarkastukset ja automaattiset skaalauskäytännöt suorittimen kuormituksen perusteella. Vastaava CloudFormation -malli voidaan ▶ ️ tarkastella Designerissa tai ▶ ️ luoda suoraan konsolista. Huomaa: joistakin tämän pinon palveluista saatetaan veloittaa.

Laajensin mallia Lambda -toiminnon ominaisuuksilla ja tarvittavilla käyttöoikeuksilla. Myöhemmin vaaditaan IoT REST API -päätepisteen lisäämistä parametriksi. Tämän automatisoimiseksi kirjoitin pienen komentosarjan komentosarjan, joka käyttää CLI: tä ARN: n pyytämiseen (> aws iot description-endpoint) ja kutsuu sitten create-stackin parametrin ollessa rivissä. Tai voit silti tehdä sen käsin:

// RETRIVE IoT REST API ENDPOINT

aws iot kuvaus-päätepiste

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

// POISTA PINA> aws cloudformation delete-stack-stack-name MiniCloudMonitor

Ihannetapauksessa minun pitäisi käyttää samoja hälytyskynnyksiä, jotka laukaisevat automaattisen skaalauksen, myös Lambda -toiminnon kutsumiseen ja siten näytön tilan päivittämiseen. Tällä hetkellä tämä on mahdollista vain käytettäessä SNS: ää välituotteena. Tuolloin tämä ylimääräinen kerros tuntui tarpeettomalta, ja päätin käyttää CloudWatch EC2: n elinkaaren sääntöjä soittaaksesi suoraan lambdaan. Haluan kuitenkin tutkia SNS → Lambda -vaihtoehtoa tulevaisuudessa.

Vaihe 4: Ohjelmisto

Aloitin kirjoittamalla Arduino -luonnoksen. Pääsilmukka () lukee merkkejä sarjayhteydestä ja rakentaa merkkijonon, kunnes se saa uuden rivin merkin. Tämän jälkeen oletetaan, että heksadesimaalikoodi lähetettiin ja asianmukainen I2C -komento kirjoitetaan BlinkM -LED -valolle. Kyse ei ole niinkään tehokkuudesta vaan mukavuudesta. Tämän luonnoksen ja muiden tiedostojen täydelliset lähteet ovat saatavana GitHubista. Seuraavassa on joitain asiaankuuluvia koodinpätkiä:

void loop () {

while (Serial.available ()) {

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

jos (inChar == '\ n') {

pitkä luku = strtol (inputString.c_str (), NULL, 16);

tavu r = luku >> 16;

tavu g = luku >> 8 & 0xFF;

tavu b = luku & 0xFF;

BlinkM_fadeToRGB (blinkm_addr, r, g, b);

inputString = "";

} muuta {

inputString += inChar;

}

}

}

NodeJS -sovelluksen on toteutettava rajapinnat AWS: lle ja Arduinolle. Myöhemmin voidaan suorittaa vain muutamalla koodirivillä, kun käytetään erinomaista sarjaporttipakettia:

var serialport = vaatia ('serialport'); port = new serialport (PORT_COM_NAME, {

baudRate: SERIAL_BAUD_RATE

});

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

});

port.on ('virhe', function (err) {

});

Liittäminen AWS IoT: hen ei myöskään vaadi paljon vaivaa. Ainoa sudenkuoppa on tietää, että MQTT+WebSocketsin käyttäminen portin 443 yli vaatii todennuksen käyttöavainten kautta. SDK lukee nämä ympäristömuuttujista. Saattaa olla tarpeen viedä nimenomaisesti AWS_ACCESS_KEY_ID ja AWS_SECRET_ACCESS_KEY.

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

clientId: 'MiniCloudMonitor-' + (Math.floor ((Math.random () * 100000) + 1)), alue: AWS_REGION, protokolla: 'wss', portti: 443, debug: totta

});

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

device.subscribe (MQTT_TOPIC);

});

device.on ('viesti', toiminto (aihe, hyötykuorma) {

if (portti & hyötykuorma && aihe == MQTT_TOPIC) {

var message = JSON.parse (hyötykuorma);

jos (message.hasOwnProperty (MQTT_JSON_KEY))

{paluu;

}

}

});

Lambda -toiminto hyväksyy värikoodin syöttöparametriksi - ei kaunis, mutta erittäin joustava tässä vaiheessa. Voidakseen julkaista MQTT -aiheessa se luo IotData -objektin, joka vaatii IoT REST API -päätepisteen. CloudFormation -malli huolehti siitä pinon luomisen aikana.

var AWS = vaatia ('aws-sdk'); var mqtt = uusi AWS. IotData ({

päätepiste: process.env. MQTT_ENDPOINT});

export.handler = toiminto (tapahtuma, konteksti, takaisinsoitto) {

var params = {

aihe: process.env. MQTT_TOPIC, hyötykuorma: '{ "color \": / "' + event.colour + '\"}', qos: 0

};

mqtt.publish (parametrit, toiminto (virhe, data) {

takaisinsoitto (virhe);

});

};

Vaihe 5: Johtopäätös

Nautin todella tuodessani virtuaalisen tapahtuman, joka "syntyi" pilvessä fyysiseen maailmaan. Ja pienenä lemmikkiprojektina se oli kasa hauskaa. Jos haluat viedä tämän seuraavalle tasolle, harkitsen…

  • parantaa kestävyyttä ja poikkeusten käsittelyä
  • tutkia parempia tapoja integroida AWS -pilvimittarit
  • kokeile enemmän fyysisiä indikaattoreita, kuten mittareita, pylväskaavioita,…
  • sinulla on mahdollisuus siirtyä muille alustoille, kuten Azure, Google, Heroku,…
  • seurata sovelluskohtaisia tapahtumia Jenkinsille, GitHubille,…

Toivottavasti pidit tämän oppaan lukemisesta ja ehkä jopa keksit jotain uutta matkan varrella. Jos voit ajatella erilaista/parempaa tapaa tehdä asioita, jaa se alla oleviin kommentteihin. Ja tietysti, jos huomaat virheitä, heads up olisi erittäin arvostettu. Kiitos ajastasi.

Suositeltava: