Talaan ng mga Nilalaman:

CLOUD MONITOR Sa AWS at ARDUINO - Electric Boy: 6 na Hakbang
CLOUD MONITOR Sa AWS at ARDUINO - Electric Boy: 6 na Hakbang

Video: CLOUD MONITOR Sa AWS at ARDUINO - Electric Boy: 6 na Hakbang

Video: CLOUD MONITOR Sa AWS at ARDUINO - Electric Boy: 6 na Hakbang
Video: Run ANY OS on iPad or iPhone! 2024, Nobyembre
Anonim
CLOUD MONITOR Sa AWS & ARDUINO - Electric Boy
CLOUD MONITOR Sa AWS & ARDUINO - Electric Boy

Ito ay isang simpleng proyekto - i-on ang isang ilaw kapag may mali … Nagiging lalong manhid sa mga abiso sa maraming mga dashboard sa aming mga computer sa mga panahong ito, paano natin matiyak na hindi natin pinalalampas ang talagang mga mahahalagang bagay. Ang sagot ay isang tagapagpahiwatig ng katayuan ng pisikal. O mas tiyak sa gawain, isang Cloud Monitor, na maaaring umupo sa iyong desk - laging nakikita. Tulad ng iminungkahi ng pangalan, makakatulong ang monitor upang mabantayan ang kalusugan ng iyong mga serbisyo sa cloud (… o anupaman talaga, ang langit ang limitasyon, patawarin ang pun). Kahit na ikaw, tulad ko, kailangan mong gumawa ng isa? Kahit na hindi, maaari kang magkaroon ng isang ideya para sa iyong hinaharap na proyekto ng IoT.

Kaya, kung handa ka na, magsimula na tayo!

Hakbang 1: Mga Bahagi, Kailangan, Mga Tool na Kinakailangan, Mga App at Serbisyo sa Online

Mga sangkap at suplay

_ Arduino Micro e Genuino Micro (1 unit) … o anumang maliit na Arduino na katugma - sa aking kaso isang freetronics LeoStick (https://www.freetronics.com.au/collection/arduino/products/leostick)

_ ThingM BlinkM - I2C Controlled RGB LED (1 unit)

_ Mini cloud light (1 unit)… o anumang iba pang translucent vessel na iyong pinili

_ USB-A to B Cable (1 unit)… o anumang lumang USB cable na may isang plug na type-A

KAILANGAN NG TOOLS

_ Panghinang na bakal (generic)

APPS & ONLINE SERVICE

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

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

Hakbang 2: Hardware

Hardware
Hardware
Hardware
Hardware

Ang ilaw sa gabi ay mayroon nang naka-built na LED - malamig na puti sa aking kaso. Naisip ko na masarap na ipahiwatig ang iba't ibang katayuan sa pamamagitan ng iba't ibang mga kulay. Kaya't iningatan ko lamang ang pormang cloud casing. Para sa talino ng operasyon Kinuha ko ang pinakamaliit na katugmang Arduino na magagamit ko: Ang Freetronics LeoStick ang aking ginustong platform ng prototyping sa loob ng maraming taon at marami akong spares. Ito ay puno ng magagandang bagay: isang piezo speaker, dalawang RGB LEDs (ang isa ay nakatali sa kapangyarihan, kahit na ang RX at TX) at ang pinakamaganda sa lahat, maaari mo lamang itong mai-plug sa isang USB port - walang kinakailangang panlabas na FTDI o cable. Maliit din ito ngunit tugma sa breadboard.

Bakit hindi ako pumili ng isang ESP8266? Upang maging tunay na wireless, maaari mo ring i-cut ang kurdon ng kuryente - na ginagawang mas kumplikado ang mga bagay para sa pagdaragdag ng baterya at abala ng muling pag-recharging. Dahil ang cloud monitor ay uupo sa tabi ng aking computer mas madaling gamitin ang USB power. Ang pagse-set up din ng koneksyon sa Wi-Fi ay hindi laging tuwid pasulong. Batay sa ATmega32u4, ang Arduino Micro at LeoStick ay nagbabahagi ng kakatwa ng pagkakaroon ng data ng I2C sa D2 at orasan sa D3. Nagiging may kaugnayan ito kapag kumokonekta sa BlinkM RGB LED. Hindi tulad ng karaniwang mga board ng Atmega328 kung saan maaari mong i-plug ang BlinkM na kalasag sa mga header A2.. A5, hindi ito gagana dito (Hindi ako nag-abala sa malambot na I2C library).

Sa pamamagitan ng pagkasira ng mga lalaking header ng VCC at GND sa BlinkM, maaari kong palawakin ang mga may kawad at itago ang lahat sa isang maliit na putol na maaaring mag-plug. Ang BlinkM ay may sariling micro controller sa board at pinapayagan para sa mga advanced na application: hal. maglaro ng mga pattern ng kulay ng script nang walang koneksyon sa Arduino. Nararamdaman ko ang isang WS2812 (ang Adafruits NeoPixels ay mahusay) ay mas mahusay na maghatid sa akin - sayang wala akong magagamit. Upang tapusin ang bit ng hardware, pinutol ko ang kabaligtaran na dulo ng male type-A USB plug, sinulid ito sa pamamagitan ng isang paunang drill na butas malapit sa base ng ilaw ng ulap at na-solder ang mga wire sa LeoStick (pula: 5V, puti: Data-, berde: Data +, itim: Ground).

Hakbang 3: Solution Architecture

Solution Architecture
Solution Architecture
Solution Architecture
Solution Architecture

Ang tanging malakas na kinakailangan na ipinataw ko sa aking sarili, ay ang magpatakbo ng monitor sa likod ng isang firewall. Bagaman isang mahalagang tampok, ginawa nitong mga kawit sa web para sa mga pagbabago sa kaganapan na hindi praktikal. Ang mekanismo ng botohan ay magastos sa mga tuntunin ng trapiko ng TCP at maaaring maantala ang mga kaganapan depende sa dalas ng botohan.

Ang solusyon ay matatagpuan sa WebSockets na nagbibigay ng buong-duplex na komunikasyon. Nagbibigay ang serbisyo ng Amazons IoT ng isang broker ng mensahe na sumusuporta sa MQTT sa paglipas ng WebSockets. Bilang ito ay naging, ang serbisyo ay maaaring tawagan nang hindi kinakailangang i-configure ang Mga Bagay, Mga Anino, Mga Patakaran o Mga Panuntunan.

Mayroong isang aparato SDK na magagamit para sa Arduino Yún at ang ilang mga pagsisikap ay ginawa ng paglilipat ng SDK sa iba pang mga platform tulad ng ESP8266. Ngunit dahil ang monitor ay palaging konektado sa pamamagitan ng serial interface, maaga akong nagpasya na magkaroon ng isang application na NodeJS (tatakbo sa desktop computer) upang ipatupad ang client API at gamitin lamang ang Arduino upang makatanggap at magpakita ng mga code ng kulay. Sa ganoong paraan ang mga pagbabago ay maaaring madaling gawin sa JavaScript, nang hindi kinakailangang mag-abala sa mga pag-upload ng firmware. Para sa pagsubok ng kaunting halimbawa kailangan ng imprastraktura. Sabihin nating mayroon kaming isang naka-load na balancer sa mga zone ng kakayahang magamit na gumagawa ng mga pagsusuri sa kalusugan sa isang halimbawa ng web server at mga patakaran sa pag-scale ng auto batay sa pagkarga ng CPU. Ang katumbas na template ng CloudFormation ay maaaring ▶ ️ tiningnan sa taga-disenyo o ▶ ️ direktang nilikha mula sa console. Tandaan: ang ilan sa mga serbisyo sa stack na ito ay maaaring magkaroon ng singil.

Pinahaba ko ang template na may mga katangian para sa pag-andar ng Lambda at mga kinakailangang pahintulot. Sa paglaon ay kinakailangan ang IoT REST API endpoint upang maipasok bilang isang parameter. Upang i-automate ito, nagsulat ako ng isang maliit na script ng shell na gumagamit ng CLI upang hilingin ang ARN (> aws iot describe-endpoint) at pagkatapos ay tumawag sa create-stack na may parameter na in-line. O maaari mo pa rin itong gawin sa pamamagitan ng kamay:

// RETRIVE IoT REST API ENDPOINT

aws iot describes-endpoint

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

// DELETE STACK> aws cloudformation delete-stack --stack-name MiniCloudMonitor

Mainam na dapat kong gumamit ng parehong mga threshold ng alarma na nagpapalitaw sa pag-scale ng auto, para sa pagtawag din sa pag-andar ng Lambda at sa ganoong paraan i-update ang katayuan ng monitor. Sa kasalukuyan posible lamang ito kapag gumagamit ng SNS bilang isang intermediate. Sa oras na ang labis na layer na ito ay nadama na kalabisan at nagpasya akong gamitin ang Mga Patakaran sa lifecycle ng CloudWatch EC2 upang direktang tawagan ang Lambda. Gayunpaman, nais kong galugarin ang pagpipilian ng SNS → Lambda sa hinaharap.

Hakbang 4: Software

Nagsimula ako sa pamamagitan ng pagsulat ng Arduino Sketch. Ang pangunahing loop () ay ang pagbabasa ng Chars mula sa serial connection at pagbuo ng isang String hanggang sa makatanggap ito ng bagong character. Pagkatapos ay ipinapalagay na isang hex color code ay ipinadala at ang naaangkop na utos ng I2C ay nakasulat sa BlinkM LED. Hindi ito gaanong tungkol sa kahusayan bilang kaginhawaan. Ang mga kumpletong mapagkukunan para sa Sketch na ito at iba pang mga file ay maaaring makuha sa GitHub. Ang sumusunod ay ilang mga nauugnay na mga snippet ng code:

void loop () {

habang (Serial.available ()) {

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

kung (inChar == '\ n') {

mahabang numero = strtol (inputString.c_str (), NULL, 16);

byte r = number >> 16;

byte g = number >> 8 & 0xFF;

byte b = number & 0xFF;

BlinkM_fadeToRGB (blinkm_addr, r, g, b);

inputString = "";

} iba pa {

inputString + = inChar;

}

}

}

Ang NodeJS App ay kailangang magpatupad ng mga interface sa AWS at Arduino. Sa paglaon ay maaaring magawa sa ilang mga linya lamang ng code kapag gumagamit ng mahusay na serialportpackage:

var serialport = nangangailangan ('serialport'); port = bagong serialport (PORT_COM_NAME, {

baudRate: SERIAL_BAUD_RATE

});

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

});

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

});

Ang pagkonekta sa AWS IoT ay humihingi ng halos hindi rin pagsisikap. Ang tanging pitfall ay upang malaman na ang paggamit ng MQTT + WebSockets sa paglipas ng port 443 ay nangangailangan ng pagpapatotoo sa pamamagitan ng Access Keys. Basahin ng SDK ang mga ito mula sa mga variable ng kapaligiran. Maaaring kailanganin upang tahasang i-export ang AWS_ACCESS_KEY_ID at AWS_SECRET_ACCESS_KEY.

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

clientId: 'MiniCloudMonitor-' + (Math.floor ((Math.random () * 100000) + 1)), rehiyon: AWS_REGION, protocol: 'wss', daungan: 443, debug: totoo

});

aparato.on ('kumonekta', pagpapaandar () {

aparato.subscribe (MQTT_TOPIC);

});

device.on ('mensahe', pagpapaandar (paksa, payload) {

kung (port && payload && paksa == MQTT_TOPIC) {

var message = JSON.parse (payload);

kung (message.hasOwnProperty (MQTT_JSON_KEY))

{bumalik;

}

}

});

Ang pag-andar ng Lambda ay tumatanggap ng isang color code bilang isang input parameter - hindi maganda, ngunit napaka-kakayahang umangkop sa yugtong ito. Upang mai-publish sa paksa ng MQTT, nagsisimula ito ng isang bagay na IotData, na nangangailangan ng endpoint ng IoT REST API. Pinangalagaan iyon ng template ng CloudFormation sa panahon ng paglikha ng stack.

var AWS = nangangailangan ('aws-sdk'); var mqtt = bagong AWS. IotData ({

endpoint: process.env. MQTT_ENDPOINT});

exports.handler = pagpapaandar (kaganapan, konteksto, callback) {

var params = {

paksa: process.env. MQTT_TOPIC, payload: '{ "color \": / "' + event.colour + '\"}', qos: 0

};

mqtt.publish (params, function (err, data) {

callback (err);

});

};

Hakbang 5: Konklusyon

Talagang nasiyahan ako sa pagdala ng isang virtual na kaganapan na "ipinanganak" sa ulap sa pisikal na mundo. At bilang aking maliit na proyekto sa alagang hayop ito ay tambak ng kasiyahan. Upang madala ito sa susunod na antas ay isasaalang-alang ko …

  • pagpapabuti sa pagiging matatag at paghawak ng pagbubukod
  • galugarin ang mas mahusay na mga paraan upang isama ang mga sukatan ng ulap ng AWS
  • mag-eksperimento sa higit pang mga pisikal na tagapagpahiwatig tulad ng mga gauge, bar graph,…
  • may pagpipilian na lumipat sa iba pang mga platform tulad ng Azure, Google, Heroku,…
  • subaybayan ang mga partikular na kaganapan sa application para sa Jenkins, GitHub,…

Inaasahan kong nasiyahan ka sa pagbabasa ng patnubay na ito at marahil ay nakakakuha ka rin ng bagong bagay. Kung maaari kang mag-isip ng ibang / mas mahusay na paraan upang magawa ang mga bagay mangyaring ibahagi ito sa mga komento sa ibaba. At syempre, kung nakita mo ang mga pagkakamali ang isang ulo ay lubos na pahalagahan. Salamat sa oras mo.

Inirerekumendang: