Obsah:

CLOUD MONITOR s AWS & ARDUINO - Electric Boy: 6 kroků
CLOUD MONITOR s AWS & ARDUINO - Electric Boy: 6 kroků

Video: CLOUD MONITOR s AWS & ARDUINO - Electric Boy: 6 kroků

Video: CLOUD MONITOR s AWS & ARDUINO - Electric Boy: 6 kroků
Video: When you switch your petrol scooter with an electric one 😂 2024, Červenec
Anonim
CLOUD MONITOR With AWS & ARDUINO - Electric Boy
CLOUD MONITOR With AWS & ARDUINO - Electric Boy

Je to jednoduchý projekt - rozsvítit, když se něco pokazí … V dnešní době stále více otupělí vůči upozorněním s tolika řídicími panely na našich počítačích, jak se můžeme ujistit, že nám neuniknou ty opravdu důležité. Odpovědí je indikátor fyzického stavu. Nebo konkrétněji pro daný úkol, cloudový monitor, který může sedět na vašem stole - vždy na očích. Jak naznačuje název, monitor vám pomůže sledovat stav vašich cloudových služeb (… nebo cokoli jiného, obloha je limit, omluvte slovní hříčku). I vy, stejně jako já, potřebujete nějaký vyrobit? I když ne, můžete mít představu o svém budoucím projektu IoT.

Pokud jste připraveni, můžeme začít!

Krok 1: Komponenty, spotřební materiál, potřebné nástroje, aplikace a online služba

KOMPONENTY A DODÁVKY

_ Arduino Micro e Genuino Micro (1 jednotka)… nebo jakýkoli menší Arduino kompatibilní - v mém případě Freetronics LeoStick (https://www.freetronics.com.au/collections/arduino/products/leostick)

_ ThingM BlinkM - I2C ovládaná RGB LED (1 jednotka)

_ Mini cloudové světlo (1 jednotka)… nebo jakákoli jiná průsvitná nádoba podle vašeho výběru

_ Kabel USB-A na B (1 jednotka)… nebo jakýkoli starý kabel USB s konektorem typu A.

POTŘEBY NÁŘADÍ

_ Páječka (obecná)

APLIKACE A ONLINE SLUŽBA

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

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

Krok 2: Hardware

Hardware
Hardware
Hardware
Hardware

Noční světlo již má vestavěnou LED - v mém případě studená bílá. Říkal jsem si, že by bylo hezké ukázat odlišný stav různými barvami. Nechal jsem tedy pouze plášť ve tvaru mraku. Pro mozek operace jsem vybral nejmenší kompatibilní Arduino, které jsem měl k dispozici: Freetronics LeoStick je moje oblíbená prototypovací platforma už léta a mám spoustu náhradních dílů. Dodává se s dobrými věcmi: piezo reproduktor, dvě RGB LED diody (jedna je vázána na napájení, RX a TX) a nejlepší ze všeho je, že ji jednoduše zapojíte do portu USB - není třeba externí FTDI ani kabel. Je také malý, ale kompatibilní s prkénkem.

Proč jsem nevybral ESP8266? Chcete -li být skutečně bezdrátoví, můžete také odpojit napájecí kabel - což trochu zkomplikovalo přidání baterie a nepohodlí při nabíjení. Vzhledem k tomu, že cloudový monitor bude sedět vedle mého počítače, je použití USB napájení mnohem snazší. Také nastavení připojení Wi-Fi není vždy přímočaré. Na základě ATmega32u4 sdílejí Arduino Micro a LeoStick zvláštnost dat I2C na D2 a hodin na D3. To je důležité při připojení LED BlinkM RGB. Na rozdíl od běžných desek Atmega328, kde můžete štít BlinkM jednoduše zapojit do záhlaví A2.. A5, zde to nepůjde (neobtěžoval jsem se s měkkou knihovnou I2C).

Odpojením mužských hlaviček VCC a GND na BlinkM jsem pak mohl rozšířit ty s drátem a udržet vše v zásuvném malém balení. BlinkM má na desce vlastní mikrořadič a umožňuje pokročilé aplikace: např. hrajte skriptované barevné vzory bez připojeného Arduina. Skoro mám pocit, že by mi WS2812 (Adafruits NeoPixels jsou skvělé) posloužil lépe - bohužel jsem žádný neměl k dispozici. Abych dokončil hardwarový bit, přeřízl jsem opačný konec zástrčky USB typu A, provlékl ji předvrtaným otvorem poblíž základny cloudového světla a připájel jsem vodiče k LeoStick (červená: 5V, bílá: Data-, zelená: Data+, černá: Ground).

Krok 3: Architektura řešení

Architektura řešení
Architektura řešení
Architektura řešení
Architektura řešení

Jediným silným požadavkem, který jsem na sebe kladl, bylo nechat monitor běžet za firewallem. Ačkoli to byla zásadní funkce, díky tomu byly webové háčky pro změny událostí nepraktické. Mechanismus dotazování je nákladný z hlediska provozu TCP a může zpozdit události v závislosti na frekvenci dotazování.

Řešení se nachází ve WebSocketech, které poskytují plně duplexní komunikaci. Služba Amazon IoT poskytuje zprostředkovatele zpráv, který podporuje MQTT přes WebSockets. Jak se ukázalo, službu lze volat, aniž byste museli konfigurovat věci, stíny, zásady nebo pravidla.

Pro Arduino Yún je k dispozici SDK pro zařízení a vynakládá se určité úsilí na přenesení SDK na jiné platformy, jako je ESP8266. Ale protože monitor bude vždy připojen sériovým rozhraním, rozhodl jsem se brzy mít aplikaci NodeJS (spuštěnou na stolním počítači) k implementaci klientského API a používání Arduina pouze k přijímání a zobrazování barevných kódů. Tímto způsobem lze snadno provádět změny v JavaScriptu, aniž byste se museli obtěžovat s nahráváním firmwaru. Pro testování je zapotřebí malá ukázková infrastruktura. Řekněme, že máme povolený nástroj pro vyrovnávání zatížení napříč zónami dostupnosti, který provádí kontrolu stavu instance webového serveru a zásady automatického škálování na základě zatížení procesoru. Odpovídající šablonu CloudFormation lze ▶ ️ zobrazit v Návrháři nebo ▶ ️ vytvořit přímo z konzoly. Poznámka: za některé služby v tomto balíčku mohou být účtovány poplatky.

Šablonu jsem rozšířil o vlastnosti pro funkci Lambda a nezbytná oprávnění. Později požadujte, aby byl jako parametr vložen koncový bod API IoT REST. Abych to zautomatizoval, napsal jsem malý shell skript, který pomocí CLI požaduje ARN (> aws iot description-endpoint) a poté zavolá create-stack s parametrem in-line. Nebo to ještě můžete udělat ručně:

// 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 CAPABILITY_NAMED_IAM

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

V ideálním případě bych měl použít stejné prahové hodnoty alarmu, které spouští automatické škálování, také pro volání funkce Lambda a tímto způsobem aktualizovat stav monitoru. V současné době je to možné pouze při použití SNS jako meziproduktu. V té době se tato další vrstva cítila nadbytečná a rozhodl jsem se použít pravidla životního cyklu CloudWatch EC2 k přímému volání na Lambdu. Přesto chci v budoucnu prozkoumat možnost SNS → Lambda.

Krok 4: Software

Začal jsem napsáním skici Arduino. Hlavní smyčka () čte znaky ze sériového připojení a vytváří řetězec, dokud neobdrží znak nového řádku. Poté se předpokládá, že byl odeslán hexadecimální barevný kód a na LED BlinkM je zapsán příslušný příkaz I2C. Nejde ani tak o účinnost, jako o pohodlí. Úplné zdroje pro tento Sketch a další soubory lze získat na GitHubu. Následuje několik relevantních fragmentů kódu:

prázdná smyčka () {

while (Serial.available ()) {

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

if (inChar == '\ n') {

dlouhé číslo = strtol (inputString.c_str (), NULL, 16);

bajt r = číslo >> 16;

byte g = číslo >> 8 & 0xFF;

bajt b = číslo & 0xFF;

BlinkM_fadeToRGB (blinkm_addr, r, g, b);

inputString = "";

} else {

inputString += inChar;

}

}

}

Aplikace NodeJS musí implementovat rozhraní pro AWS a Arduino. Později je možné dosáhnout pouze několika řádky kódu při použití vynikajícího balíčku serialportpackage:

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

baudRate: SERIAL_BAUD_RATE

});

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

});

port.on ('chyba', funkce (err) {

});

Propojení s AWS IoT nevyžaduje téměř žádné úsilí. Jediným úskalím je vědět, že používání MQTT+WebSocket přes port 443 vyžaduje autentizaci pomocí přístupových klíčů. SDK je přečte z proměnných prostředí. Může být nutné explicitně exportovat AWS_ACCESS_KEY_ID a AWS_SECRET_ACCESS_KEY.

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

clientId: 'MiniCloudMonitor-' + (Math.floor ((Math.random () * 100000) + 1)), oblast: AWS_REGION, protokol: 'wss', přístav: 443, ladění: pravda

});

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

device.subscribe (MQTT_TOPIC);

});

device.on ('message', function (topic, payload) {

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

var zpráva = JSON.parse (užitečné zatížení);

if (message.hasOwnProperty (MQTT_JSON_KEY))

{ vrátit se;

}

}

});

Funkce Lambda přijímá jako vstupní parametr barevný kód - není hezký, ale v této fázi velmi flexibilní. Aby bylo možné publikovat na téma MQTT, vytvoří instanci objektu IotData, který vyžaduje koncový bod API IoT REST. Při vytváření zásobníku se o to postarala šablona CloudFormation.

var AWS = require ('aws-sdk'); var mqtt = new AWS. IotData ({

koncový bod: process.env. MQTT_ENDPOINT});

exports.handler = funkce (událost, kontext, zpětné volání) {

var params = {

téma: process.env. MQTT_TOPIC, užitečné zatížení: '{ "color \": / "' + event.colour + '\"}', otázky: 0

};

mqtt.publish (parametry, funkce (chyba, data) {

zpětné volání (err);

});

};

Krok 5: Závěr

Opravdu se mi líbilo přivést virtuální událost „zrozenou“v cloudu do fyzického světa. A jako můj projekt malého mazlíčka to byla hromada zábavy. Abych to posunul na další úroveň, zvažoval bych…

  • zlepšení robustnosti a zpracování výjimek
  • prozkoumejte lepší způsoby integrace cloudových metrik AWS
  • experimentujte s více fyzickými ukazateli, jako jsou měřidla, sloupcové grafy, …
  • mají možnost přejít na jiné platformy jako Azure, Google, Heroku,…
  • sledovat události specifické pro aplikace pro Jenkins, GitHub,…

Doufám, že jste si přečetli tuto příručku a možná jste si po cestě dokonce vybrali něco nového. Pokud vás napadne jiný/lepší způsob, jak věci dělat, podělte se o to v níže uvedených komentářích. A samozřejmě, pokud byste si všimli chyb, bylo by velmi oceněno. Díky za váš čas.

Doporučuje: