Inhoudsopgave:
- Stap 1: Componenten, benodigdheden, benodigde tools, apps en online service
- Stap 2: Hardware
- Stap 3: Oplossingsarchitectuur
- Stap 4: Software
- Stap 5: Conclusie
Video: CLOUD MONITOR met AWS & ARDUINO - Electric Boy - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:18
Het is een eenvoudig project - doe een lampje aan als er iets misgaat… Omdat we tegenwoordig steeds meer gevoelloos worden voor meldingen met zoveel dashboards op onze computers, hoe kunnen we ervoor zorgen dat we de echt belangrijke niet missen. Het antwoord is een fysieke statusindicator. Of specifieker voor de taak, een Cloud Monitor, die op je bureau kan staan - altijd in het zicht. Zoals de naam al doet vermoeden, helpt de monitor om de gezondheid van uw cloudservices in de gaten te houden (… of iets anders eigenlijk, the sky is the limit, excuseer de woordspeling). Zelfs jij, zoals ik, moet er een maken? Zelfs als dat niet het geval is, heeft u misschien een idee voor een toekomstig IoT-project.
Nou, als je er klaar voor bent, laten we beginnen!
Stap 1: Componenten, benodigdheden, benodigde tools, apps en online service
COMPONENTEN EN TOEDIENINGEN
_ Arduino Micro e Genuino Micro (1 eenheid) … of een kleine Arduino-compatibel - in mijn geval een freetronics LeoStick (https://www.freetronics.com.au/collections/arduino/products/leostick)
_ ThingM BlinkM - I2C gestuurde RGB LED (1 stuk)
_ Mini cloud light (1 unit) …of een ander doorschijnend vat naar keuze
_ USB-A naar B-kabel (1 stuk) … of een oude USB-kabel met een type-A-stekker
GEREEDSCHAP NODIG
_ Soldeerbout (generiek)
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/)
Stap 2: Hardware
Het nachtlampje wordt al geleverd met een ingebouwde LED - koud wit in mijn geval. Ik dacht dat het leuk zou zijn om verschillende statussen aan te geven met verschillende kleuren. Dus ik heb alleen de wolkvormige behuizing gehouden. Voor het brein van de operatie koos ik de kleinste Arduino-compatibele die ik beschikbaar had: de Freetronics LeoStick is al jaren mijn favoriete prototypeplatform en ik heb genoeg reserveonderdelen. Het zit boordevol goede dingen: een piëzo-luidspreker, twee RGB-LED's (een is echter verbonden met voeding, RX en TX) en het beste van alles is dat je hem eenvoudig op een USB-poort kunt aansluiten - geen externe FTDI of kabel nodig. Het is ook klein maar compatibel met breadboard.
Waarom heb ik geen ESP8266 gekozen? Om echt draadloos te zijn, kun je net zo goed het netsnoer doorknippen - wat het een beetje ingewikkelder maakt voor het toevoegen van een batterij en het ongemak van het opladen. Omdat de cloudmonitor naast mijn computer zal zitten, is het veel gemakkelijker om USB-stroom te gebruiken. Ook het opzetten van de Wi-Fi-verbinding is niet altijd eenvoudig. Op basis van de ATmega32u4 delen de Arduino Micro en LeoStick de eigenaardigheid van het hebben van I2C-gegevens op D2 en klok op D3. Dit wordt relevant bij het aansluiten van de BlinkM RGB LED. In tegenstelling tot de gewone Atmega328-borden waar je eenvoudig het BlinkM-schild in de headers A2.. A5 kunt steken, werkt dit hier niet (ik heb me niet beziggehouden met de zachte I2C-bibliotheek).
Door de mannelijke headers VCC en GND op de BlinkM te desolderen, kon ik die met draad verlengen en alles in een plug-able klein pakket houden. De BlinkM heeft een eigen microcontroller aan boord en maakt geavanceerde toepassingen mogelijk: b.v. speel gescripte kleurpatronen zonder een Arduino aangesloten. Ik heb bijna het gevoel dat een WS2812 (Adafruits NeoPixels zijn geweldig) me beter van dienst zou zijn geweest - helaas had ik er geen beschikbaar. Om het hardwarebit af te werken, heb ik het andere uiteinde van de mannelijke type-A USB-stekker doorgesneden, deze door een voorgeboord gat in de buurt van de basis van het wolkenlicht gestoken en de draden aan de LeoStick gesoldeerd (rood: 5V, wit: Data-, groen:Data+, zwart:Grond).
Stap 3: Oplossingsarchitectuur
De enige sterke eis die ik mezelf oplegde, was om de monitor achter een firewall te laten draaien. Hoewel dit een cruciale functie was, maakte dit webhaken voor evenementveranderingen onpraktisch. Een pollingmechanisme is kostbaar in termen van TCP-verkeer en kan gebeurtenissen vertragen, afhankelijk van de pollingfrequentie.
De oplossing is te vinden in WebSockets die full-duplex communicatie bieden. Amazons IoT-service biedt een berichtenmakelaar die MQTT via WebSockets ondersteunt. Het blijkt dat de service kan worden aangeroepen zonder dat u Things, Shadows, Policies of Rules hoeft te configureren.
Er is een SDK voor het apparaat beschikbaar voor de Arduino Yún en er worden enkele pogingen gedaan om de SDK over te zetten naar andere platforms zoals de ESP8266. Maar omdat de monitor altijd via een seriële interface zal worden aangesloten, heb ik al vroeg besloten om een NodeJS-toepassing (op de desktopcomputer) te hebben om de client-API te implementeren en de Arduino alleen te gebruiken om kleurcodes te ontvangen en weer te geven. Op die manier kunnen eenvoudig wijzigingen worden aangebracht in JavaScript, zonder dat u zich bezig hoeft te houden met firmware-uploads. Voor het testen van een klein voorbeeld is infrastructuur nodig. Laten we zeggen dat we een load balancer hebben ingeschakeld voor alle beschikbaarheidszones die statuscontroles uitvoert op een webserverinstantie en automatisch schalingsbeleid uitvoert op basis van CPU-belasting. De bijbehorende CloudFormation-sjabloon kan ▶️ worden bekeken in de Designer of ▶️ rechtstreeks vanuit de console worden gemaakt. Opmerking: voor sommige services in deze stack kunnen kosten in rekening worden gebracht.
Ik heb de sjabloon uitgebreid met eigenschappen voor de Lambda-functie en de benodigde machtigingen. Later moet het IoT REST API-eindpunt als parameter worden ingevoegd. Om dit te automatiseren, heb ik een klein shellscript geschreven dat de CLI gebruikt om de ARN op te vragen (> aws iot description-endpoint) en vervolgens create-stack aanroept met de parameter in-line. Of je kunt het nog steeds met de hand doen:
// RETRIVE IoT REST API-ENDPOINT
aws iot beschrijf-eindpunt
// 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
// STACK VERWIJDEREN> aws cloudformation delete-stack --stack-name MiniCloudMonitor
Idealiter zou ik dezelfde alarmdrempels moeten gebruiken die de automatische schaling activeren, om ook de Lambda-functie aan te roepen en op die manier de status van de monitor bij te werken. Momenteel is dit alleen mogelijk bij gebruik van SNS als tussenproduct. Op dat moment voelde deze extra laag overbodig en besloot ik CloudWatch EC2 lifecycle Rules te gebruiken om de Lambda rechtstreeks aan te roepen. Toch wil ik in de toekomst de mogelijkheid van SNS → Lambda verkennen.
Stap 4: Software
Ik begon met het schrijven van de Arduino Sketch. De hoofdlus() leest Chars uit de seriële verbinding en bouwt een String op totdat deze een teken voor een nieuwe regel ontvangt. Er wordt dan aangenomen dat er een hexadecimale kleurcode is verzonden en het juiste I2C-commando wordt naar de BlinkM LED geschreven. Het gaat niet zozeer om efficiëntie als wel om gemak. De volledige bronnen voor deze Sketch en andere bestanden zijn te vinden op GitHub. Hieronder volgen enkele relevante codefragmenten:
lege lus() {
while (Serial.available()) {
char inChar = (char)Serial.read();
if (inChar == '\n') {
lang getal = strtol(inputString.c_str(), NULL, 16);
byte r = getal >> 16;
byte g = getal >> 8 & 0xFF;
byte b = getal & 0xFF;
BlinkM_fadeToRGB(blinkm_addr, r, g, b);
invoerString = "";
} anders {
inputString += inChar;
}
}
}
De NodeJS-app moet interfaces naar AWS en Arduino implementeren. Later kan worden bereikt in slechts een paar regels code bij gebruik van het uitstekende serialport-pakket:
var seriële poort = vereisen('seriële poort');poort = nieuwe seriële poort(PORT_COM_NAME, {
baudrate: SERIAL_BAUD_RATE
});
poort.on('open', functie() {
});
port.on('error', function(err) {
});
Ook het verbinden met AWS IoT kost weinig moeite. De enige valkuil is om te weten dat het gebruik van MQTT+WebSockets via poort 443 authenticatie via toegangssleutels vereist. De SDK leest deze uit de omgevingsvariabelen. Het kan nodig zijn om AWS_ACCESS_KEY_ID en AWS_SECRET_ACCESS_KEY expliciet te exporteren.
var awsiot = vereisen('aws-iot-device-sdk');var device = awsiot.device({
clientId: 'MiniCloudMonitor-' + (Math.floor((Math.random() * 100000) + 1)), regio: AWS_REGION, protocol: 'wss', poort: 443, debug: waar
});
device.on('connect', function() {
apparaat.subscribe (MQTT_TOPIC);
});
device.on('message', function(topic, payload) {
if (poort && payload && onderwerp == MQTT_TOPIC) {
var bericht = JSON.parse(payload);
if (bericht.hasOwnProperty(MQTT_JSON_KEY))
{ opbrengst;
}
}
});
De Lambda-functie accepteert een kleurcode als invoerparameter - niet mooi, maar in dit stadium erg flexibel. Om te kunnen publiceren naar het MQTT-onderwerp, wordt een IotData-object geïnstantieerd, waarvoor het IoT REST API-eindpunt vereist is. De CloudFormation-sjabloon zorgde daarvoor tijdens het maken van de stapel.
var AWS = vereisen('aws-sdk');var mqtt = nieuwe AWS. IotData({
eindpunt: process.env. MQTT_ENDPOINT});
exports.handler = function(event, context, callback) {
var parameters = {
onderwerp: proces.env. MQTT_TOPIC, laadvermogen: '{"color\":\"' + event.colour + '\"}', qos: 0
};
mqtt.publish(params, function(err, data) {
terugbellen (fout);
});
};
Stap 5: Conclusie
Ik heb er echt van genoten om een virtueel evenement 'geboren' in de cloud naar de fysieke wereld te brengen. En als mijn kleine huisdierenproject was het enorm leuk. Om dit naar een hoger niveau te tillen, zou ik overwegen…
- verbetering van robuustheid en afhandeling van uitzonderingen
- verken betere manieren om AWS-cloudstatistieken te integreren
- experimenteer met meer fysieke indicatoren zoals meters, staafdiagrammen, …
- hebben de mogelijkheid om te verhuizen naar andere platformen zoals Azure, Google, Heroku, …
- monitor applicatie-specifieke gebeurtenissen voor Jenkins, GitHub, …
Ik hoop dat je deze gids met plezier hebt gelezen en misschien zelfs iets nieuws hebt opgepikt. Als je een andere/betere manier kunt bedenken om dingen te doen, deel deze dan in de reacties hieronder. En natuurlijk, als u fouten ontdekt, wordt een waarschuwing zeer op prijs gesteld. Bedankt voor uw tijd.
Aanbevolen:
Temperatuur- en vochtigheidsbewaking met behulp van de ESP-01 & DHT en de AskSensors Cloud: 8 stappen
Temperatuur- en vochtigheidsbewaking met behulp van de ESP-01 & DHT en de AskSensors Cloud: in deze instructie gaan we leren hoe we de temperatuur- en vochtigheidsmetingen kunnen bewaken met behulp van het IOT-MCU/ESP-01-DHT11-bord en het AskSensors IoT-platform .Ik kies de IOT-MCU ESP-01-DHT11-module voor deze toepassing omdat het
Arduino WiFi verbinden met de cloud met ESP8266: 7 stappen:
Arduino WiFi verbinden met de cloud met behulp van ESP8266: in deze tutorial leggen we u uit hoe u uw Arduino via WiFi met de IoT-cloud kunt verbinden. We zullen een setup die is samengesteld uit een Arduino en een ESP8266 WiFi-module als een IoT Thing configureren en gereed maken om te communiceren met de AskSensors cloud.L
IoT Basics: uw IoT verbinden met de cloud met behulp van Mongoose OS: 5 stappen
IoT Basics: uw IoT verbinden met de cloud met behulp van Mongoose OS: als u een persoon bent die van knutselen en elektronica houdt, komt u vaker wel dan niet de term Internet of Things tegen, meestal afgekort als IoT, en dat het verwijst naar een reeks apparaten die verbinding kunnen maken met internet! Zo iemand zijn
Een DHT11/DHT22-sensor verbinden met de cloud met een op ESP8266 gebaseerd bord: 9 stappen
Een DHT11/DHT22-sensor verbinden met de cloud met een op ESP8266 gebaseerd bord: In het vorige artikel heb ik mijn op ESP8266 gebaseerde NodeMCU-bord aangesloten op een Cloud4RPi-service. Nu is het tijd voor een echt project
Draadloze afstandsbediening met 2,4 GHz NRF24L01-module met Arduino - Nrf24l01 4-kanaals / 6-kanaals zenderontvanger voor quadcopter - RC Helikopter - RC-vliegtuig met Arduino: 5 stappen (met afbeeldingen)
Draadloze afstandsbediening met 2,4 GHz NRF24L01-module met Arduino | Nrf24l01 4-kanaals / 6-kanaals zenderontvanger voor quadcopter | RC Helikopter | Rc-vliegtuig met Arduino: een Rc-auto besturen | Quadcopter | Drone | RC vliegtuig | RC-boot, we hebben altijd een ontvanger en zender nodig, stel dat we voor RC QUADCOPTER een 6-kanaals zender en ontvanger nodig hebben en dat type TX en RX is te duur, dus we gaan er een maken op onze