Sisukord:

PILVEMONITOR AWS ja ARDUINO - elektriline poiss: 6 sammu
PILVEMONITOR AWS ja ARDUINO - elektriline poiss: 6 sammu

Video: PILVEMONITOR AWS ja ARDUINO - elektriline poiss: 6 sammu

Video: PILVEMONITOR AWS ja ARDUINO - elektriline poiss: 6 sammu
Video: Building Apps for Mobile, Gaming, IoT, and more using AWS DynamoDB by Rick Houlihan 2024, November
Anonim
PILVEMONITOR AWS ja ARDUINO - Electric Boy abil
PILVEMONITOR AWS ja ARDUINO - Electric Boy abil

See on lihtne projekt - lülitage tuli põlema, kui midagi läheb valesti … Kuidas muutume üha tuimaks ja saada märguandeid, millel on tänapäeval meie arvutites nii palju armatuurlaudu, kuidas saaksime veenduda, et me ei jätaks tähelepanuta tõeliselt olulisi. Vastus on füüsilise seisundi näitaja. Või täpsemalt selle ülesande jaoks, pilvemonitor, mis võib teie laual istuda - alati nähtaval. Nagu nimigi ütleb, aitab monitor teie pilveteenuste tervisel silma peal hoida (… või miski muu, taevas on piir, vabandage sõnamängu). Isegi sina, nagu mina, pead selle tegema? Isegi kui mitte, võib teil olla idee oma tulevase IoT -projekti jaoks.

Noh, kui olete valmis, alustame!

Samm: komponendid, tarvikud, vajalikud tööriistad, rakendused ja võrguteenus

KOMPONENDID JA TARVIKUD

_ Arduino Micro ja Genuino Micro (1 ühik)… või mõni muu Arduinoga ühilduv - minu puhul freetronics LeoStick (https://www.freetronics.com.au/collections/arduino/products/leostick)

_ ThingM BlinkM - I2C juhitav RGB LED (1 ühik)

_ Minipilvvalgusti (1 ühik)… või mõni muu teie valitud poolläbipaistev anum

_ USB-A kuni B kaabel (1 ühik)… või mis tahes vana USB-kaabel, millel on A-tüüpi pistik

VAJALIKUD TÖÖRIISTAD

_ Jootekolb (üldine)

Rakendused ja võrguteenus

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

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

Samm: riistvara

Riistvara
Riistvara
Riistvara
Riistvara

Öövalgusega on juba sisse ehitatud LED - minu puhul külm valge. Mõtlesin, et oleks tore näidata erinevat olekut erinevate värvidega. Seega hoidsin ainult pilvekujulist ümbrist. Operatsiooni ajude jaoks valisin väikseima Arduino ühilduva, mis mul saadaval oli: Freetronics LeoStick on olnud minu eelistatud prototüüpimisplatvorm juba aastaid ja mul on palju varuosi. Kaasas on head kraami: piesokõlar, kaks RGB LED -i (üks on ühendatud toiteallikaga, RX ja TX) ja mis kõige parem - saate selle lihtsalt USB -porti ühendada - välist FTDI -d ega kaablit pole vaja. See on ka väike, kuid leivaplaadiga ühilduv.

Miks ma ei valinud ESP8266? Et olla tõeliselt juhtmevaba, võite ka toitejuhtme katkestada - see muudab aku lisamise ja laadimise ebamugavused pisut keerulisemaks. Kuna pilvemonitor asub minu arvuti kõrval, on USB -toite kasutamine palju lihtsam. Wi-Fi-ühenduse seadistamine ei ole alati lihtne. ATmega32u4 põhjal jagavad Arduino Micro ja LeoStick kummalisust, et D2-l on I2C-andmed ja D3-l kell. See muutub aktuaalseks BlinkM RGB LED -i ühendamisel. Erinevalt tavalistest Atmega328 tahvlitest, kus saate lihtsalt ühendada BlinkM -i kilbi päistega A2.. A5, ei tööta see siin (ma ei vaevunud pehme I2C raamatukoguga).

BlinkM-i meessoost päiste VCC ja GND desoldeerimisega saaksin neid juhtmetega pikendada ja hoida kõike ühendatavas väikeses pakendis. BlinkM-il on pardal oma mikrokontroller ja see võimaldab täiustatud rakendusi: nt mängida skriptitud värvimustreid ilma Arduino ühendamiseta. Ma peaaegu tunnen, et WS2812 (Adafruits NeoPixels on suurepärased) oleks mind paremini teeninud - kahjuks polnud mul ühtegi neist saadaval. Riistvaraosa lõpetamiseks lõikasin välja A-tüüpi USB-pistiku teise otsa, keerasin selle läbi pilvavalguse aluse lähedal asuva eelnevalt puuritud augu ja jootsin juhtmed LeoSticki külge (punane: 5V, valge: Andmed, roheline: andmed+, must: maapind).

3. samm: lahenduse ülesehitus

Lahenduse arhitektuur
Lahenduse arhitektuur
Lahenduse arhitektuur
Lahenduse arhitektuur

Ainus tugev nõue, mille ma endale seadsin, oli see, et monitor töötaks tulemüüri taga. Kuigi see on ülioluline omadus, muutis see sündmuste muutmise veebikonksud ebapraktiliseks. Küsitlusmehhanism on TCP liikluse seisukohalt kulukas ja võib sõltuvalt küsitluste sagedusest sündmusi edasi lükata.

Lahendus on saadaval WebSocketsis, mis pakub täisdupleksühendust. Amazoni IoT -teenus pakub sõnumimaaklerit, mis toetab MQTT -d WebSocketsi kaudu. Nagu selgub, saab teenust helistada ilma asju, varje, eeskirju või reegleid seadistamata.

Arduino Yúni jaoks on saadaval seadme SDK ja mõningaid jõupingutusi tehakse SDK teisaldamiseks teistele platvormidele, näiteks ESP8266. Kuid kuna monitor ühendatakse alati jadaliidese kaudu, otsustasin juba varakult, et mul on kliendi API rakendamiseks NodeJS -rakendus (töötab lauaarvutis) ja kasutan Arduino ainult värvikoodide vastuvõtmiseks ja kuvamiseks. Nii saab JavaScriptis hõlpsasti muudatusi teha, ilma et peaksite püsivara üleslaadimisega vaeva nägema. Testimiseks on vaja väikest näidistaristut. Oletame, et meil on kättesaadavuse tsoonides lubatud koormuse tasakaalustaja, mis kontrollib veebiserveri eksemplari seisundit ja protsessori koormusel põhinevaid automaatse skaleerimise reegleid. Vastavat CloudFormationi malli saab ▶ ️ vaadata Disaineris või ▶ ️ luua otse konsoolist. Märkus. Mõned selle virna teenused võivad olla tasulised.

Laiendasin malli Lambda funktsiooni omaduste ja vajalike õigustega. Hiljem nõutakse parameetrina IoT REST API lõpp -punkti sisestamist. Selle automatiseerimiseks kirjutasin väikese kestaskripti, mis kasutab CLI-d ARN-i taotlemiseks (> aws iot description-endpoint) ja kutsub seejärel parameetriga in-line looma-stack. Või saate seda siiski käsitsi teha:

// RETRIVE IoT REST API ENDPOINT

aws iot kirjeldada-lõpp-punkt

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

// Kustuta virn> aws cloudformation delete-stack-stack-name MiniCloudMonitor

Ideaalis peaksin kasutama samu häirelävesid, mis käivitavad automaatse skaleerimise, samuti Lambda funktsiooni helistamiseks ja sel viisil monitori oleku värskendamiseks. Praegu on see võimalik ainult siis, kui SNS -i kasutatakse vaheühendina. Tol ajal tundus see lisakiht ülearune ja otsustasin kasutada Lambda otse helistamiseks CloudWatch EC2 elutsükli reegleid. Sellegipoolest tahan tulevikus uurida võimalust SNS → Lambda.

4. samm: tarkvara

Alustasin Arduino visandi kirjutamisega. Põhisilmus () loeb jadaühendusest märke ja ehitab stringi, kuni saab uue rea märgi. Seejärel eeldatakse, et saadeti kuusnurkne värvikood ja BlinkM LED -ile kirjutatakse vastav käsk I2C. See ei puuduta niivõrd tõhusust kui mugavust. Selle visandi ja muude failide täielikud allikad on saadaval GitHubis. Siin on mõned asjakohased koodilõigud:

void loop () {

while (Serial.available ()) {

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

kui (inChar == '\ n') {

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

bait r = arv >> 16;

bait g = arv >> 8 & 0xFF;

bait b = arv & 0xFF;

BlinkM_fadeToRGB (blinkm_addr, r, g, b);

inputString = "";

} muud {

inputString += inChar;

}

}

}

Rakendus NodeJS peab rakendama liideseid AWS -i ja Arduinoga. Hiljem saab suurepärase jadapaketi kasutamisel seda teha vaid mõne koodiridaga:

var serialport = nõuda ('serialport'); port = new serialport (PORT_COM_NAME, {

baudRate: SERIAL_BAUD_RATE

});

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

});

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

});

Ka AWS IoT -ga ühenduse loomine ei nõua palju pingutusi. Ainus lõks on teada, et MQTT+WebSocketsi kasutamine üle pordi 443 nõuab autentimist juurdepääsuvõtmete kaudu. SDK loeb need keskkonnamuutujatest. AWS_ACCESS_KEY_ID ja AWS_SECRET_ACCESS_KEY võib osutuda vajalikuks selgesõnaliselt eksportida.

var awsiot = nõuda ('aws-iot-device-sdk'); var seade = awsiot.device ({

clientId: 'MiniCloudMonitor-' + (Math.floor ((Math.random () * 100000) + 1)), piirkond: AWS_REGION, protokoll: 'wss', sadam: 443, silumine: tõsi

});

device.on ('ühenda', function () {

device.subscribe (MQTT_TOPIC);

});

device.on ('sõnum', funktsioon (teema, kasulik koormus) {

if (port && payload && topic == MQTT_TOPIC) {

var message = JSON.parse (kasulik koormus);

kui (message.hasOwnProperty (MQTT_JSON_KEY))

{tagasipöördumine;

}

}

});

Funktsioon Lambda aktsepteerib sisendparameetrina värvikoodi - mitte ilus, kuid praeguses etapis väga paindlik. MQTT -teema avaldamiseks saab see luua IotData objekti, mis nõuab IoT REST API lõpp -punkti. CloudFormationi mall hoolitses selle eest virna loomise ajal.

var AWS = nõuda ('aws-sdk'); var mqtt = uus AWS. IotData ({

lõpp -punkt: process.env. MQTT_ENDPOINT});

export.handler = funktsioon (sündmus, kontekst, tagasihelistamine) {

var params = {

teema: process.env. MQTT_TOPIC, kasulik koormus: '{ "color \": / "' + event.colour + '\"}', qos: 0

};

mqtt.publish (parameetrid, funktsioon (viga, andmed) {

tagasihelistamine (viga);

});

};

5. samm: järeldus

Mulle meeldis tõeliselt tuua virtuaalne sündmus pilves "sündinud" füüsilisse maailma. Ja minu väikese lemmikloomaprojektina oli see hunnik lõbu. Selle järgmisele tasemele viimiseks kaaluksin…

  • töökindluse ja erandjuhtimise parandamine
  • uurige paremaid viise AWS -i pilvemõõdikute integreerimiseks
  • katsetage rohkem füüsiliste näitajatega, nagu näidikud, tulpdiagrammid,…
  • on võimalus liikuda teistele platvormidele, nagu Azure, Google, Heroku,…
  • jälgida rakendusespetsiifilisi sündmusi Jenkins, GitHub,…

Loodan, et teile meeldis seda juhendit lugeda ja võib -olla isegi võtsite teelt midagi uut. Kui leiate mõne muu/parema viisi asjade tegemiseks, jagage seda allolevates kommentaarides. Ja muidugi, kui märkate vigu, oleks kõrgelt hinnatud. Täname teie aja eest.

Soovitan: