Tartalomjegyzék:
- 1. lépés: Alkatrészek, kellékek, szükséges eszközök, alkalmazások és online szolgáltatás
- 2. lépés: Hardver
- 3. lépés: A megoldás felépítése
- 4. lépés: Szoftver
- 5. lépés: Következtetés
Videó: FÖLDMONITOR AWS és ARDUINO - elektromos fiúval: 6 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:42
Ez egy egyszerű projekt - kapcsolja fel a lámpát, ha valami baj történik … Manapság egyre zsibbad az értesítések felé, amelyeken annyi irányítópult található a számítógépünkön, hogyan biztosíthatjuk, hogy ne hagyjuk ki az igazán fontosakat. A válasz egy fizikai állapotjelző. Vagy pontosabban a feladathoz, egy felhőmonitorhoz, amely az asztalon ülhet - mindig látható. Ahogy a neve is sugallja, a monitor segít figyelemmel kísérni felhőszolgáltatásait (… vagy bármi mást, az ég a határ, bocs a szójátékért). Még neked is, mint nekem, el kell készítened egyet? Még ha nem is, elképzelései lehetnek a jövőbeli IoT -projektjéhez.
Nos, ha készen állsz, kezdjük!
1. lépés: Alkatrészek, kellékek, szükséges eszközök, alkalmazások és online szolgáltatás
ALKATRÉSZEK ÉS KELLÉKEK
_ Arduino Micro és Genuino Micro (1 egység)… vagy bármilyen kicsi Arduino -kompatibilis - az én esetemben egy freetronics LeoStick (https://www.freetronics.com.au/collections/arduino/products/leostick)
_ ThingM BlinkM - I2C vezérelt RGB LED (1 egység)
_ Mini felhőfény (1 egység)… vagy bármilyen más, áttetsző edény
_ USB-A – B kábel (1 egység)… vagy bármilyen régi USB-kábel, A típusú csatlakozóval
SZÜKSÉGES SZERSZÁMOK
_ Forrasztópáka (általános)
Alkalmazások és online szolgáltatás
_ Amazon Web Services AWS Lambda (https://aws.amazon.com/it/lambda/)
_ Amazon Web Services AWS IoT (https://aws.amazon.com/it/iot/)
2. lépés: Hardver
Az éjszakai fényhez már beépített LED is tartozik - esetemben hideg fehér. Úgy gondoltam, jó lenne különböző színekkel jelezni a különböző állapotokat. Így csak a felhő alakú burkolatot tartottam. A művelet agyához a rendelkezésre álló legkisebb Arduino kompatibilitást választottam: A Freetronics LeoStick évek óta a kedvenc prototípus -platformom, és rengeteg tartalékom van. Jót tartalmaz: piezo hangszórót, két RGB LED -et (az egyik a tápellátáshoz van kötve, RX és TX), és ami a legjobb, egyszerűen csatlakoztathatja az USB -porthoz - nincs szükség külső FTDI -re vagy kábelre. Ezenkívül kicsi, de kenyérsütő deszkával kompatibilis.
Miért nem ESP8266 -ot választottam? Annak érdekében, hogy valóban vezeték nélküli legyen, elvághatja a tápkábelt is - ami egy kicsit bonyolultabbá teszi az akkumulátor hozzáadását és az újratöltést. Mivel a felhőmonitor a számítógépem mellett fog ülni, sokkal könnyebb használni az USB -tápellátást. A Wi-Fi kapcsolat beállítása sem mindig egyszerű. Az ATmega32u4 alapján az Arduino Micro és a LeoStick megosztja azt a furcsaságot, hogy az I2C adatok a D2-n és az óra a D3-on vannak. Ez a BlinkM RGB LED csatlakoztatásakor válik relevánssá. Ellentétben a szokásos Atmega328 táblákkal, ahol egyszerűen csatlakoztathatja a BlinkM pajzsot az A2.. A5 fejlécekhez, ez itt nem fog működni (nem törődtem a puha I2C könyvtárral).
A BlinkM-en a VCC és GND fejlécek forrasztásával kihúzhatnám a vezetékeket, és mindent egy csatlakoztatható kis csomagban tarthatnék. A BlinkM saját mikrovezérlővel rendelkezik a fedélzeten, és lehetővé teszi a fejlett alkalmazásokat: pl. játszhat szkriptelt színmintákat Arduino csatlakoztatása nélkül. Szinte úgy érzem, hogy egy WS2812 (az Adafruits NeoPixels nagyszerűek) jobban szolgált volna nekem - sajnos nem volt elérhető. A hardver bit befejezéséhez levágtam az A típusú USB-csatlakozó másik végét, átfűztem egy előre fúrt lyukon a felhőfény alja közelében, és forrasztottam a vezetékeket a LeoStick-hez (piros: 5V, fehér: Data-, zöld: Data+, fekete: Ground).
3. lépés: A megoldás felépítése
Az egyetlen erős követelmény, amelyet magamnak támasztottam, az volt, hogy a monitort tűzfal mögé futtassam. Bár ez döntő jellemző, ez alkalmatlanná tette a webes kampókat az eseményváltozásokhoz. A lekérdezési mechanizmus költséges a TCP -forgalom szempontjából, és a lekérdezési gyakoriságtól függően késleltetheti az eseményeket.
A megoldás megtalálható a WebSocketekben, amelyek teljes duplex kommunikációt biztosítanak. Az Amazons IoT szolgáltatás üzenetközvetítőt biztosít, amely támogatja az MQTT -t a WebSockets -en keresztül. Mint kiderült, a szolgáltatás meghívható anélkül, hogy konfigurálnia kellene a dolgokat, árnyékokat, házirendeket vagy szabályokat.
Van egy eszköz SDK az Arduino Yún számára, és bizonyos erőfeszítéseket tesznek az SDK más platformokra, például az ESP8266 -ra történő átvitelére. De mivel a monitort mindig soros interfész fogja összekötni, korán úgy döntöttem, hogy rendelkezem egy NodeJS alkalmazással (futtatható az asztali számítógépen) az ügyfél API megvalósításához, és az Arduino -t csak színkódok fogadására és megjelenítésére használom. Így a változtatások könnyen elvégezhetők a JavaScriptben, anélkül, hogy a firmware feltöltésével kellene bajlódni. A teszteléshez egy kis példa infrastruktúra szükséges. Tegyük fel, hogy a rendelkezésre állási zónákban engedélyezve van egy terheléselosztó, amely állapot -ellenőrzéseket végez a webkiszolgáló -példányon, és automatikus méretezési szabályzatokat végez a CPU terhelése alapján. A megfelelő CloudFormation sablon ▶ ️ megtekinthető a tervezőben, vagy ▶ ️ közvetlenül a konzolról hozható létre. Megjegyzés: a verem egyes szolgáltatásai felmerülhetnek.
Kiterjesztettem a sablont a Lambda funkció tulajdonságaival és a szükséges engedélyekkel. Később megkövetelik, hogy az IoT REST API végpontját be kell illeszteni paraméterként. Ennek automatizálása érdekében írtam egy kis shell parancsfájlt, amely a CLI-t használja az ARN kérésére (> aws iot description-endpoint), majd meghívja a create-stack-et a paraméterrel együtt. Vagy kézzel is megteheti:
// RETRIVE IoT REST API ENDPOINT
aws iot leírni-végpont
// CREATE STACK> aws cloudformation create-stack-stack-name MiniCloudMonitor --template-body file: //cfn-template.json --parameters ParameterKey = IotRestApiEndpoint, ParameterValue = {IoT_REST_API_ENDPOINT}-Capability CAPABILAM
// STACK DELETE> aws cloudformation delete-stack-stack-name MiniCloudMonitor
Ideális esetben ugyanazokat a riasztási küszöbértékeket kell használnom, amelyek kiváltják az automatikus skálázást, a Lambda funkció hívásához, és így frissítem a monitor állapotát. Jelenleg ez csak akkor lehetséges, ha az SNS -t köztes termékként használják. Abban az időben ez az extra réteg feleslegesnek tűnt, és úgy döntöttem, hogy a CloudWatch EC2 életciklus szabályait használom a Lambda közvetlen hívásához. Ennek ellenére szeretném megvizsgálni az SNS → Lambda lehetőségét a jövőben.
4. lépés: Szoftver
Az Arduino vázlat megírásával kezdtem. A fő hurok () a karaktereket olvassa a soros kapcsolatból, és egy karakterláncot épít, amíg új sor karaktert nem kap. Ekkor feltételezzük, hogy hexadecimális színkódot küldtünk, és a megfelelő I2C parancsot a BlinkM LED -be írtuk. Ez nem annyira a hatékonyságról, mint a kényelemről szól. A vázlat és más fájlok teljes forrásai a GitHubon érhetők el. Íme néhány releváns kódrészlet:
void loop () {
while (Serial.available ()) {
char inChar = (char) Serial.read ();
if (inChar == '\ n') {
hosszú szám = strtol (inputString.c_str (), NULL, 16);
bájt r = szám >> 16;
bájt g = szám >> 8 & 0xFF;
b bájt = szám & 0xFF;
BlinkM_fadeToRGB (blinkm_addr, r, g, b);
inputString = "";
} más {
inputString += inChar;
}
}
}
A NodeJS alkalmazásnak interfészeket kell megvalósítania az AWS és az Arduino számára. Később néhány sornyi kóddal elvégezhető a kiváló soros portcsomag használatakor:
var serialport = igényel ('serialport'); port = new serialport (PORT_COM_NAME, {
baudRate: SERIAL_BAUD_RATE
});
port.on ('open', function () {
});
port.on ('hiba', function (err) {
});
Az AWS IoT -hoz való csatlakozás sem igényel sok erőfeszítést. Az egyetlen buktató az, hogy az MQTT+WebSockets 443 -as porton keresztül történő használatához hitelesítésre van szükség a hozzáférési kulcsokon keresztül. Az SDK ezeket kiolvassa a környezeti változókból. Szükség lehet az AWS_ACCESS_KEY_ID és AWS_SECRET_ACCESS_KEY kifejezett exportálására.
var awsiot = igényel ('aws-iot-device-sdk'); var device = awsiot.device ({
clientId: 'MiniCloudMonitor-' + (Math.floor ((Math.random () * 100000) + 1)), régió: AWS_REGION, protokoll: 'wss', port: 443, hibakeresés: igaz
});
device.on ('connect', function () {
device.subscribe (MQTT_TOPIC);
});
device.on ('üzenet', függvény (téma, hasznos terhelés) {
if (port && payload && topic == MQTT_TOPIC) {
var message = JSON.parse (hasznos terhelés);
ha (message.hasOwnProperty (MQTT_JSON_KEY))
{ Visszatérés;
}
}
});
A Lambda funkció színkódot fogad be bemeneti paraméterként - nem szép, de nagyon rugalmas ebben a szakaszban. Ahhoz, hogy közzétehesse az MQTT témában, létrehoz egy IotData objektumot, amelyhez szükség van az IoT REST API végpontra. A CloudFormation sablon gondoskodott erről a verem létrehozása során.
var AWS = igényel ('aws-sdk'); var mqtt = új AWS. IotData ({
végpont: process.env. MQTT_ENDPOINT});
export.handler = függvény (esemény, kontextus, visszahívás) {
var params = {
téma: process.env. MQTT_TOPIC, hasznos teher: '{ "color \": / "' + event.colour + '\"}', qos: 0
};
mqtt.publish (paraméter, függvény (hiba, adat) {
visszahívás (hiba);
});
};
5. lépés: Következtetés
Nagyon élveztem, hogy egy virtuális, a felhőben „született” eseményt hoztam a fizikai világba. És kis házi kedvencemként rengeteg szórakozás volt. Hogy ezt a következő szintre emeljem, fontolóra veszem…
- javítja a robusztusságot és a kivételkezelést
- fedezze fel az AWS felhőmetrikák integrálásának jobb módjait
- kísérletezzen több fizikai mutatóval, például mérőműszerekkel, oszlopdiagramokkal,…
- lehetőség van arra, hogy más platformokra, például az Azure, Google, Heroku,…
- figyelemmel kísérheti az alkalmazásspecifikus eseményeket a Jenkins, a GitHub,…
Remélem, élvezte az útmutató olvasását, és talán még újat is felvetett az út során. Ha más/jobb módszert tud elképzelni, ossza meg az alábbi megjegyzésekben. És persze, ha hibákat észlel, egy fejjel nagyra értékeljük. Köszönöm a rám szánt időt.
Ajánlott:
A Magicbit adatainak megjelenítése az AWS -ben: 5 lépés
A Magicbit adatainak megjelenítése az AWS -ben: A Magicbit -hez csatlakoztatott érzékelőkről gyűjtött adatokat közzétesszük az AWS IOT magjában az MQTT -n keresztül, hogy valós időben grafikusan megjeleníthessük őket. Ebben a projektben, amely az ESP32 -en alapul, fejlesztési táblaként a magicbit -et használjuk. Ezért minden ESP32 d
Hő- és páratartalom -riasztás AWS és ESP32 használatával: 11 lépés
Hő- és páratartalom -riasztás az AWS és az ESP32 használatával: Ebben az oktatóanyagban különböző hőmérséklet- és páratartalom -adatokat mérünk a hőmérséklet- és páratartalom -érzékelő segítségével. Azt is megtudhatja, hogyan küldheti el ezeket az adatokat az AWS -nek
Alexa hangvezérelt Raspberry Pi Drone IoT és AWS: 6 lépés (képekkel)
Alexa hangvezérelt Raspberry Pi drón IoT -vel és AWS -sel: Szia! A nevem Armaan. 13 éves Massachusetts-i fiú vagyok. Ez az oktatóanyag megmutatja, amint a címből következtetni tud, hogyan kell Raspberry Pi Drone -t építeni. Ez a prototípus bemutatja, hogyan fejlődnek a drónok, és azt is, hogy mekkora szerepet játszhatnak a
A Mosquitto MQTT beállítása az AWS -en: 8 lépés
A Mosquitto MQTT beállítása az AWS -en: Szia! Létrehozok egy privát MQTT közvetítőt jelszóval az AWS (amazon web service) fiókomban az IOT projektekhez. Ehhez létrehoztam egy ingyenes fiókot az AWS -en, amely 1 évig jó itt:
Hőmérséklet és páratartalom figyelése-AWS-ESP32: 8 lépés
Hőmérséklet és páratartalom figyelése-AWS-ESP32 használatával: Ebben az oktatóanyagban különböző hőmérséklet- és páratartalom-adatokat mérünk a hőmérséklet- és páratartalom-érzékelő segítségével. Azt is megtudhatja, hogyan küldheti el ezeket az adatokat az AWS -nek