Taula de continguts:
- Pas 1: components, subministraments, eines necessàries, aplicacions i servei en línia
- Pas 2: maquinari
- Pas 3: Arquitectura de solucions
- Pas 4: programari
- Pas 5: Conclusió
Vídeo: CLOUD MONITOR With AWS & ARDUINO - Electric Boy: 6 Passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:15
És un projecte senzill: enceneu la llum quan alguna cosa no funciona … Cada cop ens adormiu cap a les notificacions amb tants taulers de control als nostres ordinadors, com podem assegurar-nos que no ens perdin els realment importants. La resposta és un indicador d’estat físic. O més específic de la tasca, un Cloud Monitor, que pot seure a l’escriptori, sempre a la vista. Com el seu nom indica, el monitor us ajudarà a vigilar la salut dels vostres serveis al núvol (… o qualsevol altra cosa realment, el cel és el límit, disculpeu el joc de paraules). Fins i tot vosaltres, com jo, heu de fer-ne un? Encara que no, és possible que tingueu una idea per al vostre futur projecte IoT.
Bé, si esteu preparats, comencem!
Pas 1: components, subministraments, eines necessàries, aplicacions i servei en línia
COMPONENTS I SUBMINISTRAMENTS
_ Arduino Micro i Genuino Micro (1 unitat) … o qualsevol petit Arduino compatible - en el meu cas un freetronics LeoStick (https://www.freetronics.com.au/collections/arduino/products/leostick)
_ ThingM BlinkM - LED RGB controlat I2C (1 unitat)
_ Mini llum de núvol (1 unitat) … o qualsevol altre vas translúcid que trieu
_ Cable USB-A a B (1 unitat) … o qualsevol cable USB antic amb endoll tipus A.
ES NECESSITEN EINES
_ Soldador (genèric)
APLICACIONS I SERVEI EN LÍNIA
_ Serveis web d'Amazon AWS Lambda (https://aws.amazon.com/it/lambda/)
_ Amazon Web Services AWS IoT (https://aws.amazon.com/it/iot/)
Pas 2: maquinari
La llum de la nit ja ve amb un LED incorporat - blanc fred en el meu cas. Vaig pensar que seria bo indicar un estat diferent per colors diferents. Així que només vaig mantenir la carcassa en forma de núvol. Per al cervell de l’operació, vaig triar el més petit Arduino compatible que tenia disponible: el Freetronics LeoStick ha estat la meva plataforma de prototipatge preferida durant anys i tinc molts recanvis. Ve carregat de coses bones: un altaveu piezoelèctric, dos LED RGB (un està lligat a l’energia, RX i TX, però) i el millor de tot és que només podeu connectar-lo a un port USB, no necessiteu cap cable ni FTDI extern. També és petit però compatible amb la taula de treball.
Per què no he triat un ESP8266? Per ser realment sense fil, és possible que tanqueu el cable d’alimentació, cosa que fa que les coses siguin una mica més complicades per afegir una bateria i incomodar la recàrrega. Com que el monitor de núvol es troba al costat de l'ordinador, és molt més fàcil utilitzar l'alimentació USB. La configuració de la connexió Wi-Fi no sempre és senzilla: basat en l’ATmega32u4, l’Arduino Micro i el LeoStick comparteixen la curiositat de tenir dades I2C a D2 i rellotge a D3. Això esdevé rellevant en connectar el LED RGB de BlinkM. A diferència de les plaques Atmega328 habituals, on només podeu connectar l'escut BlinkM a les capçaleres A2.. A5, això no funcionarà aquí (no em vaig molestar amb la suau biblioteca I2C).
En desoldar les capçaleres masculines VCC i GND al BlinkM, podria estendre les amb cable i guardar-ho tot en un petit paquet endollable. El BlinkM té el seu propi microcontrolador a bord i permet aplicacions avançades: per exemple, reprodueix patrons de color amb guions sense Arduino connectat. Gairebé sento que un WS2812 (els NeoPixels d’Adafruits són fantàstics) m’hauria servit millor, per desgràcia, no en tenia cap. Per acabar el bit de maquinari, vaig tallar l’extrem oposat del connector USB tipus A masculí, el vaig passar per un forat preforat prop de la base de la llum del núvol i vaig soldar els cables al LeoStick (vermell: 5V, blanc: Dades, verd: Dades +, negre: terra).
Pas 3: Arquitectura de solucions
L’únic requisit fort que m’imposava era fer funcionar el monitor darrere d’un tallafoc. Tot i que és una característica crucial, això va fer que els enllaços web per als canvis d’esdeveniments fossin poc pràctics. Un mecanisme de votació és car en termes de trànsit TCP i pot endarrerir els esdeveniments en funció de la freqüència de votació.
La solució es troba als WebSockets que proporcionen comunicació dúplex completa. El servei IoT d’Amazons proporciona un agent de missatges que admet MQTT a través de WebSockets. Resulta que es pot trucar al servei sense haver de configurar coses, ombres, polítiques o regles.
Hi ha un dispositiu SDK disponible per a l'Arduino Yún i es fan alguns esforços per portar l'SDK a altres plataformes com l'ESP8266. Però, com que el monitor sempre estarà connectat mitjançant una interfície en sèrie, al principi vaig decidir tenir una aplicació NodeJS (executada a l’ordinador de sobretaula) per implementar l’API client i utilitzar l’Arduino només per rebre i mostrar codis de color. D’aquesta manera es poden fer canvis fàcilment a JavaScript, sense haver de molestar-se amb les càrregues de microprogramari. Per provar es necessita un petit exemple d’infraestructura. Suposem que tenim un equilibrador de càrrega habilitat a totes les zones de disponibilitat que fa controls de salut en una instància de servidor web i polítiques d’escala automàtica basades en la càrrega de la CPU. La plantilla corresponent de CloudFormation es pot ▶ ️ visualitzar al dissenyador o ▶ ️ crear-la directament des de la consola. Nota: alguns dels serveis d'aquesta pila poden comportar càrrecs.
He ampliat la plantilla amb propietats per a la funció Lambda i els permisos necessaris. Més endavant, cal que s'insereixi el punt final de l'API REST de l'IoT com a paràmetre. Per automatitzar això, vaig escriure un petit script de shell que utilitza la CLI per sol·licitar l'ARN (> aws iot describe-endpoint) i després crida create-stack amb el paràmetre in-line. O encara podeu fer-ho a mà:
// RETRIVE IoT REST API ENDPOINT
aws iot describe-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 PILA> aws cloudformation delete-stack --stack-name MiniCloudMonitor
Idealment hauria d’utilitzar els mateixos llindars d’alarma que activen l’escala automàtica, per trucar també a la funció Lambda i d’aquesta manera actualitzar l’estat del monitor. Actualment això només és possible quan s’utilitza SNS com a intermediari. En aquell moment, aquesta capa addicional es va sentir redundant i vaig decidir utilitzar les regles del cicle de vida de CloudWatch EC2 per trucar directament a la Lambda. Tot i així, vull explorar l'opció de SNS → Lambda en el futur.
Pas 4: programari
Vaig començar escrivint l'Arduino Sketch. El bucle principal () és llegir Chars des de la connexió serial i construir una cadena fins que rep un caràcter de línia nova. Aleshores, se suposa que s'ha enviat un codi de color hexadecimal i que s'escriu l'ordre I2C adequada al LED BlinkM. No es tracta tant d’eficiència com de comoditat. Les fonts completes d’aquest Sketch i altres fitxers es poden obtenir a GitHub. A continuació es mostren alguns fragments de codi rellevants:
bucle buit () {
while (Serial.available ()) {
char inChar = (char) Serial.read ();
if (inChar == '\ n') {
nombre llarg = strtol (inputString.c_str (), NULL, 16);
byte r = número >> 16;
byte g = número >> 8 & 0xFF;
byte b = nombre & 0xFF;
BlinkM_fadeToRGB (blinkm_addr, r, g, b);
inputString = "";
} més {
inputString + = inChar;
}
}
}
L'aplicació NodeJS ha d'implementar interfícies a AWS i Arduino. Més endavant es pot aconseguir en poques línies de codi quan s'utilitza l'excel·lent paquet serialport:
var serialport = require ('serialport'); port = nou port serial (PORT_COM_NAME, {
baudRate: SERIAL_BAUD_RATE
});
port.on ('obert', funció () {
});
port.on ('error', funció (err) {
});
La connexió a AWS IoT tampoc requereix gaire esforç. L’únic error és saber que l’ús de MQTT + WebSockets pel port 443 requereix autenticació mitjançant claus d’accés. L'SDK llegirà aquestes dades des de les variables d'entorn. Pot ser necessari exportar explícitament AWS_ACCESS_KEY_ID i AWS_SECRET_ACCESS_KEY.
var awsiot = require ('aws-iot-device-sdk'); var device = awsiot.device ({
clientId: 'MiniCloudMonitor-' + (Math.floor ((Math.random () * 100000) + 1)), regió: AWS_REGION, protocol: 'wss', port: 443, depurar: cert
});
device.on ('connect', function () {
device.subscribe (MQTT_TOPIC);
});
device.on ('missatge', funció (tema, càrrega útil) {
if (port && càrrega útil && topic == MQTT_TOPIC) {
var missatge = JSON.parse (càrrega útil);
if (message.hasOwnProperty (MQTT_JSON_KEY))
{tornar;
}
}
});
La funció Lambda accepta un codi de color com a paràmetre d’entrada; no és bonic, però és molt flexible en aquesta etapa. Per poder publicar al tema MQTT, instancia un objecte IotData, que requereix el punt final de l'API IoT REST. La plantilla CloudFormation es va encarregar d'això durant la creació de la pila.
var AWS = require ('aws-sdk'); var mqtt = new AWS. IotData ({
punt final: process.env. MQTT_ENDPOINT});
exportacions.handler = funció (esdeveniment, context, devolució de trucada) {
var params = {
topic: process.env. MQTT_TOPIC, càrrega útil: '{ "color \": / "' + event.colour + '\"}', qos: 0
};
mqtt.publish (paràmetres, funció (err, dades) {
devolució de trucada (err);
});
};
Pas 5: Conclusió
Em va agradar molt portar un esdeveniment virtual "nascut" al núvol al món físic. I, com el meu projecte de petita mascota, va ser molt divertit. Per portar-ho al següent nivell, consideraria …
- millora de la robustesa i el maneig de les excepcions
- exploreu maneres millors d’integrar mètriques al núvol d’AWS
- experimentar amb més indicadors físics com indicadors, gràfics de barres, …
- tenen l'opció de moure's a altres plataformes com Azure, Google, Heroku, …
- supervisar esdeveniments específics de l'aplicació per a Jenkins, GitHub, …
Espero que us hagi agradat llegir aquesta guia i que, fins i tot, pugueu recollir alguna cosa nova en el camí. Si se us acudeix una manera diferent / millor de fer les coses, compartiu-la als comentaris següents. I, per descomptat, si detecteu errors, el cap amunt seria molt apreciat. Gràcies pel teu temps.
Recomanat:
Restaurar Game Boy o aparells electrònics similars: 7 passos (amb imatges)
Restaura Game Boy o aparells electrònics similars: en primer lloc, gràcies per consultar el meu tutorial. Ets increïble. En segon lloc, dedico molt de temps al vídeo de YouTube, així que també el mires i ho explica tot. Vídeo:
Adaptador de teclat DIY PS / 2 per a LSDj (Game Boy): 7 passos
Adaptador de teclat DIY PS / 2 per a LSDj (Game Boy): NOTA: els cables d'enllaç tenen un disseny diferent. No podem garantir que aquest tutorial sigui aplicable per al vostre cable.Partes obligatòries: Gameboy & Cable Game Link Color Link (preferible al mercat secundari) Adaptador femella DIN 6 / PS / 2 - http: //www.digikey.com
Com instal·lar un frontal AGS-001 controlable en un Game Boy Advance original (sense LOCA!): 5 passos (amb imatges)
Com instal·lar un frontal AGS-001 controlable en un Game Boy Advance original (sense LOCA!): Esteu buscant il·luminar la pantalla de Game Boy Advance vella. No podeu trobar aquests kits IPS retroil·luminats recentment enlloc i els antics kits AGS-101 estan exhaurits o tenen un preu excessiu. A més, voleu poder veure la pantalla mentre esteu fora
Monitor de privadesa piratat des d'un antic monitor LCD: 7 passos (amb imatges)
Monitor de privadesa piratat des d’un antic monitor LCD: finalment podeu fer alguna cosa amb aquest antic monitor LCD que teniu al garatge. Podeu convertir-lo en un monitor de privadesa. Tothom es veu blanc, excepte vosaltres, perquè porteu " màgia " ulleres! Tot el que realment ha de tenir és un pa
Conversió del divisor de monitor VGA en un commutador de monitor controlat per ordinador: 4 passos
Conversió del divisor de monitor VGA en un commutador de monitor controlat per ordinador: aquest instructiu explica com un divisor de monitor VGA (20 EURO) que s’utilitza per connectar un PC a dos monitors es pot convertir en un commutador de monitor controlat per ordinador. El dispositiu final es controla a través del port paral·lel i permet