Sommario:
- Passaggio 1: componenti, forniture, strumenti necessari, app e servizio online
- Passaggio 2: hardware
- Passaggio 3: architettura della soluzione
- Passaggio 4: software
- Passaggio 5: conclusione
Video: MONITOR CLOUD Con AWS & ARDUINO - Electric Boy: 6 Steps
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:03
È un progetto semplice: accendere una luce quando qualcosa va storto… Al giorno d'oggi, diventando sempre più insensibili alle notifiche con così tante dashboard sui nostri computer, come possiamo assicurarci di non perdere quelle veramente importanti. La risposta è un indicatore di stato fisico. O più specifico per l'attività, un Cloud Monitor, che può stare sulla tua scrivania, sempre in vista. Come suggerisce il nome, il monitor ti aiuterà a tenere d'occhio lo stato di salute dei tuoi servizi cloud (…o qualsiasi altra cosa, il cielo è il limite, scusa il gioco di parole). Anche tu, come me, hai bisogno di farne uno? Anche in caso contrario, potresti avere un'idea per un tuo futuro progetto IoT.
Bene, se sei pronto, cominciamo!
Passaggio 1: componenti, forniture, strumenti necessari, app e servizio online
COMPONENTI E FORNITURE
_ Arduino Micro e Genuino Micro (1 unità) …o qualsiasi piccolo Arduino compatibile - nel mio caso un LeoStick freetronics (https://www.freetronics.com.au/collections/arduino/products/leostick)
_ ThingM BlinkM - LED RGB controllato I2C (1 unità)
_ Mini cloud light (1 unità) …o qualsiasi altro contenitore traslucido a tua scelta
_ Cavo da USB-A a B (1 unità) …o qualsiasi vecchio cavo USB con una spina di tipo A
STRUMENTI NECESSARI
_ Saldatore (generico)
APP E SERVIZI ONLINE
_ Amazon Web Services AWS Lambda (https://aws.amazon.com/it/lambda/)
_ Amazon Web Services AWS IoT (https://aws.amazon.com/it/iot/)
Passaggio 2: hardware
La luce notturna è già dotata di un LED integrato, nel mio caso bianco freddo. Ho pensato che sarebbe stato carino indicare uno stato diverso con colori diversi. Quindi ho tenuto solo l'involucro a forma di nuvola. Per il cervello dell'operazione ho scelto il più piccolo Arduino compatibile che avevo a disposizione: Freetronics LeoStick è stata la mia piattaforma di prototipazione preferita per anni e ho molti pezzi di ricambio. Viene caricato con cose buone: un altoparlante piezoelettrico, due LED RGB (uno è legato all'alimentazione, RX e TX però) e, soprattutto, puoi semplicemente collegarlo a una porta USB, senza bisogno di FTDI o cavo esterno. È anche piccolo ma compatibile con breadboard.
Perché non ho scelto un ESP8266? Per essere veramente wireless, potresti anche tagliare il cavo di alimentazione, il che rende le cose un po' più complicate per l'aggiunta di una batteria e l'inconveniente della ricarica. Poiché il monitor cloud si troverà accanto al mio computer, è molto più semplice utilizzare l'alimentazione USB. Anche la configurazione della connessione Wi-Fi non è sempre semplice. Basandosi su ATmega32u4, Arduino Micro e LeoStick condividono la stranezza di avere dati I2C su D2 e clock su D3. Ciò diventa rilevante quando si collega il LED BlinkM RGB. A differenza delle comuni schede Atmega328 in cui puoi semplicemente collegare lo shield BlinkM alle intestazioni A2.. A5, questo non funzionerà qui (non mi sono preoccupato della libreria soft I2C).
Dissaldando le intestazioni maschio VCC e GND sul BlinkM, potrei quindi estendere quelle con filo e mantenere tutto in un piccolo pacchetto collegabile. Il BlinkM ha il suo micro controller a bordo e consente applicazioni avanzate: ad es. riprodurre modelli di colore script senza un Arduino collegato. Mi sento quasi che un WS2812 (Adafruits NeoPixels sono fantastici) mi avrebbe servito meglio - purtroppo non ne avevo nessuno disponibile. Per completare la parte hardware, ho tagliato l'estremità opposta della spina USB di tipo A maschio, l'ho infilata in un foro preforato vicino alla base della luce nuvola e ho saldato i fili al LeoStick (rosso: 5 V, bianco: Dati-, verde: Dati+, nero: Terra).
Passaggio 3: architettura della soluzione
L'unico forte requisito che mi sono imposto era di far funzionare il monitor dietro un firewall. Sebbene fosse una caratteristica cruciale, ciò rendeva impraticabili i web hook per le modifiche agli eventi. Un meccanismo di polling è costoso in termini di traffico TCP e può ritardare gli eventi a seconda della frequenza di polling.
La soluzione si trova nei WebSocket che forniscono una comunicazione full-duplex. Il servizio IoT di Amazon fornisce un broker di messaggi che supporta MQTT su WebSocket. A quanto pare, il servizio può essere chiamato senza dover configurare Things, Shadows, Policy o Rules.
È disponibile un SDK del dispositivo per Arduino Yún e vengono fatti alcuni sforzi per portare l'SDK su altre piattaforme come ESP8266. Ma poiché il monitor sarà sempre connesso tramite interfaccia seriale, ho deciso presto di avere un'applicazione NodeJS (eseguita sul computer desktop) per implementare l'API client e utilizzare Arduino solo per ricevere e visualizzare i codici colore. In questo modo è possibile apportare facilmente modifiche in JavaScript, senza doversi preoccupare dei caricamenti del firmware. Per testare è necessaria una piccola infrastruttura di esempio. Supponiamo di avere un sistema di bilanciamento del carico abilitato tra le zone di disponibilità che esegue controlli di integrità su un'istanza del server Web e criteri di ridimensionamento automatico in base al carico della CPU. Il modello CloudFormation corrispondente può essere ▶️ visualizzato nel Designer o ▶️ creato direttamente dalla console. Nota: alcuni dei servizi in questo stack potrebbero essere soggetti a costi.
Ho esteso il modello con le proprietà per la funzione Lambda e le autorizzazioni necessarie. Successivamente richiedere l'inserimento dell'endpoint dell'API REST IoT come parametro. Per automatizzare questo, ho scritto un piccolo script di shell che utilizza la CLI per richiedere l'ARN (> aws iot description-endpoint) e quindi chiama create-stack con il parametro in linea. Oppure puoi ancora farlo a mano:
// RECUPERA ENDPOINT API REST IoT
aws iot descrivere-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
// ELIMINA STACK> aws cloudformation delete-stack --stack-name MiniCloudMonitor
Idealmente dovrei usare le stesse soglie di allarme che attivano l'auto scaling, per chiamare anche la funzione Lambda e in questo modo aggiornare lo stato del monitor. Attualmente questo è possibile solo quando si utilizza SNS come intermediario. All'epoca questo livello aggiuntivo sembrava ridondante e ho deciso di utilizzare le regole del ciclo di vita EC2 di CloudWatch per chiamare direttamente Lambda. Tuttavia, voglio esplorare l'opzione di SNS → Lambda in futuro.
Passaggio 4: software
Ho iniziato scrivendo Arduino Sketch. Il ciclo principale() sta leggendo i caratteri dalla connessione seriale e costruendo una stringa finché non riceve un carattere di nuova riga. Si presume quindi che sia stato inviato un codice colore esadecimale e che il comando I2C appropriato venga scritto sul LED BlinkM. Non si tratta tanto di efficienza quanto di convenienza. I sorgenti completi per questo Sketch e altri file possono essere ottenuti su GitHub. Di seguito sono riportati alcuni frammenti di codice pertinenti:
ciclo vuoto() {
while (Serial.available()) {
char inChar = (char)Serial.read();
if (inChar == '\n') {
numero lungo = strtol(inputString.c_str(), NULL, 16);
byte r = numero >> 16;
byte g = numero >> 8 & 0xFF;
byte b = numero & 0xFF;
BlinkM_fadeToRGB(blinkm_addr, r, g, b);
inputString = "";
} altro {
inputString += inChar;
}
}
}
L'app NodeJS deve implementare interfacce per AWS e Arduino. Successivamente può essere realizzato in poche righe di codice quando si utilizza l'eccellente pacchetto serialport:
var serialport = require('serialport');port = new serialport(PORT_COM_NAME, {
baudRate: SERIAL_BAUD_RATE
});
port.on('open', function() {
});
port.on('error', function(err) {
});
Anche la connessione ad AWS IoT non richiede molto sforzo. L'unico problema è sapere che l'utilizzo di MQTT+WebSockets sulla porta 443 richiede l'autenticazione tramite chiavi di accesso. L'SDK li leggerà dalle variabili di ambiente. Potrebbe essere necessario esportare esplicitamente AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY.
var awsiot = require('aws-iot-device-sdk');var device = awsiot.device({
clientId: 'MiniCloudMonitor-' + (Math.floor((Math.random() * 100000) + 1)), regione: AWS_REGION, protocollo: 'wss', porto: 443, debug: vero
});
device.on('connect', function() {
device.subscribe(MQTT_TOPIC);
});
device.on('message', function(topic, payload) {
if (porta && payload && argomento == MQTT_TOPIC) {
var messaggio = JSON.parse(carico utile);
if (message.hasOwnProperty(MQTT_JSON_KEY))
{ Restituzione;
}
}
});
La funzione Lambda accetta un codice colore come parametro di input - non carino, ma molto flessibile in questa fase. Per poter pubblicare nell'argomento MQTT, crea un'istanza di un oggetto IotData, che richiede l'endpoint dell'API REST IoT. Il modello CloudFormation si è occupato di questo durante la creazione dello stack.
var AWS = require('aws-sdk');var mqtt = new AWS. IotData({
endpoint: process.env. MQTT_ENDPOINT});
exports.handler = function(event, context, callback) {
var parametri = {
argomento: process.env. MQTT_TOPIC, payload: '{"color\":\"' + event.colour + '\"}', qos: 0
};
mqtt.publish(params, function(err, data) {
richiamata(err);
});
};
Passaggio 5: conclusione
Mi è davvero piaciuto portare un evento virtuale "nato" nel cloud nel mondo fisico. E come mio piccolo progetto da compagnia è stato molto divertente. Per portare questo al livello successivo prenderei in considerazione…
- miglioramento della robustezza e della gestione delle eccezioni
- esplora modi migliori per integrare i parametri cloud di AWS
- sperimenta con più indicatori fisici come indicatori, grafici a barre, …
- avere la possibilità di passare ad altre piattaforme come Azure, Google, Heroku, …
- monitorare eventi specifici dell'applicazione per Jenkins, GitHub, …
Spero che ti sia piaciuto leggere questa guida e che forse hai anche imparato qualcosa di nuovo lungo la strada. Se riesci a pensare a un modo diverso/migliore di fare le cose, condividilo nei commenti qui sotto. E, naturalmente, se hai individuato degli errori, un avvertimento sarebbe molto apprezzato. Grazie per il tuo tempo.
Consigliato:
Ripristinare Game Boy o dispositivi simili: 7 passaggi (con immagini)
Ripristina Game Boy o dispositivi simili: prima di tutto, grazie per aver guardato il mio tutorial! Sei fantastico. In secondo luogo, ho dedicato molto tempo al video di YouTube, quindi guardalo anche tu, spiega tutto. Video:
Drone Raspberry Pi a controllo vocale Alexa con IoT e AWS: 6 passaggi (con immagini)
Drone Raspberry Pi a controllo vocale Alexa con IoT e AWS: Ciao! Mi chiamo Armaan. Sono un ragazzo di 13 anni del Massachusetts. Questo tutorial mostra, come puoi dedurre dal titolo, come costruire un Raspberry Pi Drone. Questo prototipo dimostra come si stanno evolvendo i droni e anche quanto grande ruolo potrebbero svolgere nel
Come installare un faro anteriore AGS-001 controllabile in un Game Boy Advance originale (nessun LOCA!): 5 passaggi (con immagini)
Come installare un faro anteriore AGS-001 controllabile in un Game Boy Advance originale (nessun LOCA!): Stai cercando di illuminare lo schermo del tuo vecchio Game Boy Advance. Non puoi trovare quei nuovissimi kit IPS retroilluminati da nessuna parte e i vecchi kit AGS-101 sono esauriti o troppo cari. Inoltre, vuoi essere in grado di vedere lo schermo mentre sei fuori
Privacy Monitor hackerato da un vecchio monitor LCD: 7 passaggi (con immagini)
Privacy Monitor hackerato da un vecchio monitor LCD: finalmente puoi fare qualcosa con quel vecchio monitor LCD che hai in garage. Puoi trasformarlo in un monitor della privacy! Sembra tutto bianco a tutti tranne che a te, perché indossi "magic" bicchieri! Tutto quello che devi davvero avere è un pa
Monitoraggio della qualità dell'acqua con MKR1000 e ARTIK Cloud: 13 passaggi (con immagini)
Monitoraggio della qualità dell'acqua utilizzando MKR1000 e ARTIK Cloud: Introduzione L'obiettivo principale di questo progetto è utilizzare MKR1000 e Samsung ARTIK Cloud per monitorare i livelli di pH e temperatura delle piscine. Useremo il sensore di temperatura e il sensore di pH o potenza dell'idrogeno per misurare il alcalinità un