Tartalomjegyzék:

FÖLDMONITOR AWS és ARDUINO - elektromos fiúval: 6 lépés
FÖLDMONITOR AWS és ARDUINO - elektromos fiúval: 6 lépés

Videó: FÖLDMONITOR AWS és ARDUINO - elektromos fiúval: 6 lépés

Videó: FÖLDMONITOR AWS és ARDUINO - elektromos fiúval: 6 lépés
Videó: Голубая стрела (1958) фильм 2024, November
Anonim
FÖLDMONITOR AWS & ARDUINO - Electric Boy -val
FÖLDMONITOR AWS & ARDUINO - Electric Boy -val

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

Hardver
Hardver
Hardver
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

Megoldás architektúra
Megoldás architektúra
Megoldás architektúra
Megoldás architektúra

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: