Агуулгын хүснэгт:

AWS & ARDUINO -той CLOUD MONITOR - Цахилгаан хүү: 6 алхам
AWS & ARDUINO -той CLOUD MONITOR - Цахилгаан хүү: 6 алхам

Видео: AWS & ARDUINO -той CLOUD MONITOR - Цахилгаан хүү: 6 алхам

Видео: AWS & ARDUINO -той CLOUD MONITOR - Цахилгаан хүү: 6 алхам
Видео: RemoteXY IoT Cloud Control 2024, Арваннэгдүгээр
Anonim
AWS & ARDUINO -той CLOUD MONITOR - Цахилгаан хүү
AWS & ARDUINO -той CLOUD MONITOR - Цахилгаан хүү

Энэ бол энгийн төсөл юм - ямар нэг зүйл буруу болоход гэрэл асаагаарай … Өнөө үед бидний компьютер дээр маш олон хяналтын самбар байгаа тул мэдэгдэл хүлээн авах нь улам бүр цөөрч байгаа тул бид үнэхээр чухал зүйлийг алдахгүйн тулд яаж баталгаажуулах вэ. Хариулт нь биеийн байдлын үзүүлэлт юм. Эсвэл даалгаварт илүү тодорхой, үүл монитор нь таны ширээн дээр үргэлж харагдах боломжтой. Нэрнээс нь харахад монитор нь таны үүл үйлчилгээний эрүүл мэндийг ажиглахад туслах болно (эсвэл үнэхээр өөр зүйл бол тэнгэр бол хязгаар юм, үгийг уучлаарай). Та ч гэсэн над шиг нэгийг хийх хэрэгтэй байна уу? Үгүй ч гэсэн танд ирээдүйн IoT төслөө хэрэгжүүлэх санаа байна.

За, хэрэв та бэлэн бол эхэлье!

Алхам 1: Бүрэлдэхүүн хэсгүүд, хангамж, шаардлагатай багажууд, програмууд болон онлайн үйлчилгээ

Бүрэлдэхүүн хэсгүүд ба хангамж

_ Arduino Micro e Genuino Micro (1 нэгж)… эсвэл жижиг хэмжээтэй Arduino нийцтэй - миний хувьд LeoStick freetronics (https://www.freetronics.com.au/collections/arduino/products/leostick)

_ ThingM BlinkM - I2C хяналттай RGB LED (1 нэгж)

_ Мини үүл гэрэл (1 нэгж)… эсвэл таны хүссэн бусад тунгалаг сав

_ USB-A-B кабель (1 нэгж)… эсвэл А төрлийн залгууртай хуучин USB кабель

Хэрэгсэл хэрэгтэй

_ Гагнуурын төмөр (ерөнхий)

APPS & ОНЛАЙН ҮЙЛЧИЛГЭЭ

_ Amazon Web Services AWS Lambda (https://aws.amazon.com/it/lambda/)

_ Amazon Web Services AWS IoT (https://aws.amazon.com/it/iot/)

Алхам 2: Техник хангамж

Техник хангамж
Техник хангамж
Техник хангамж
Техник хангамж

Шөнийн гэрэл аль хэдийн LED -тэй ирдэг - миний хувьд хүйтэн цагаан. Өөр өөр статусыг өөр өнгөөр зааж өгөх нь сайхан байх болно гэж би бодсон. Тиймээс би зөвхөн үүл хэлбэртэй бүрхүүлийг хадгалсан. Үйл ажиллагааны тархины хувьд би өөрт байгаа хамгийн жижиг Arduino нийцтэй хувилбарыг сонгосон: Freetronics LeoStick нь олон жилийн турш миний загварчлах платформ байсан бөгөөд надад маш их сэлбэг хэрэгсэл бий. Энэ нь сайн зүйлээр дүүрэн байдаг: пьезо чанга яригч, хоёр RGB LED (нэг нь тэжээлд холбогдсон, RX ба TX), хамгийн сайн нь та үүнийг USB порт руу залгаж болно - гадны FTDI эсвэл кабель шаардлагагүй. Энэ нь бас жижигхэн боловч талхны самбартай нийцдэг.

Би яагаад ESP8266 сонгоогүй юм бэ? Үнэхээр утасгүй байхын тулд та цахилгааны утсыг таслах боломжтой бөгөөд энэ нь батерей нэмэх, цэнэглэхэд хүндрэл учруулдаг. Үүл дэлгэц нь миний компьютерийн хажууд байх тул USB хүчийг ашиглах нь илүү хялбар болно. ATmega32u4 дээр суурилсан Arduino Micro болон LeoStick нь D2 дээр I2C өгөгдөл, D3 дээр цагтай байх нь хачирхалтай байдгийг хуваалцаж байна. BlinkM RGB LED -ийг холбоход энэ нь хамааралтай болно. BlinkM бамбайг A2.. A5 толгой руу залгах боломжтой энгийн Atmega328 самбараас ялгаатай нь энэ нь энд ажиллахгүй (би зөөлөн I2C номын санд санаа зовсонгүй).

BlinkM дээр эрэгтэй толгойн VCC ба GND-ийг салгаснаар би утастай утаснуудаа сунгаж, бүгдийг нь залгууртай жижиг саванд хийж хадгалах боломжтой болно. Arduino холболтгүйгээр скриптчилсэн өнгөний загварыг тоглуулах. Би бараг л WS2812 (Adafruits NeoPixels гайхалтай) надад илүү сайн үйлчлэх байсан гэж бодож байна, гэхдээ надад байхгүй байсан. Тоног төхөөрөмжийн битийг дуусгахын тулд би эрэгтэй төрлийн USB залгуурын эсрэг талын төгсгөлийг огтолж, үүлний гэрлийн ойролцоо урьдчилан өрөмдсөн нүхээр дамжуулж, утсыг LeoStick руу гагнав (улаан: 5V, цагаан: Өгөгдөл-, ногоон: Өгөгдөл+, хар: Газар).

Алхам 3: Шийдлийн архитектур

Шийдлийн архитектур
Шийдлийн архитектур
Шийдлийн архитектур
Шийдлийн архитектур

Миний өөртөө тавьсан цорын ганц хатуу шаардлага бол мониторыг галт хананы ард ажиллуулах явдал байв. Хэдийгээр чухал шинж чанар боловч энэ нь үйл явдлын өөрчлөлтийг вэб дэгээгээр хийх боломжгүй болгосон. Санал авах механизм нь TCP урсгалын хувьд үнэтэй бөгөөд санал авах давтамжаас хамааран үйл явдлыг хойшлуулж болзошгүй юм.

Энэхүү шийдлийг бүрэн дуплекс холболтоор хангадаг WebSockets дээрээс олж болно. Amazons IoT үйлчилгээ нь WebSockets дээр MQTT -ийг дэмждэг мессеж зуучлагчаар хангадаг. Эндээс харахад үйлчилгээ, зүйл, сүүдэр, бодлого, дүрмийг тохируулахгүйгээр дуудаж болно.

Arduino Yún -д зориулсан SDK төхөөрөмж байдаг бөгөөд SDK -ийг ESP8266 гэх мэт бусад платформ руу шилжүүлэхийн тулд бага зэрэг хүчин чармайлт гаргадаг. Гэхдээ монитор үргэлж цуваа интерфейсээр холбогддог тул би үйлчлүүлэгчийн API -ийг хэрэгжүүлэхийн тулд NodeJS програмыг (ширээний компьютер дээр ажиллуулах), зөвхөн өнгөт кодыг хүлээн авах, харуулахын тулд Arduino -ийг ашиглахаар шийдсэн. Ийм байдлаар JavaScript дээр програм хангамжийн байршуулалтад төвөг учруулахгүйгээр хялбархан өөрчлөлт хийх боломжтой. Туршилтын хувьд дэд бүтэц хэрэгтэй болно. Вэб серверийн жишээ, CPU ачаалал дээр суурилсан автомат масштабын бодлогын эрүүл мэндийн байдлыг шалгадаг ачааллын тэнцвэржүүлэгчийг бэлэн байгаа гэж үзье. Холбогдох CloudFormation загварыг ▶ ️ дизайнер дээрээс үзэх эсвэл ▶ ️ консолоос шууд үүсгэх боломжтой. Анхаарна уу: энэ стек дэх зарим үйлчилгээ төлбөртэй байж болно.

Би загварыг Lambda функцын шинж чанар, шаардлагатай зөвшөөрлүүдээр өргөтгөсөн. Хожим нь IoT REST API төгсгөлийн цэгийг параметр болгон оруулахыг шаарддаг. Үүнийг автоматжуулахын тулд би CLI ашиглан ARN (> aws iot description-endpoint) хүсэлт гаргаж, дараа нь in-line параметртэй create-stack-ийг дууддаг жижиг бүрхүүлийн скрипт бичсэн. Эсвэл та үүнийг гараар хийж болно:

// IoT REST API ENDPOINT -ийг дахин авах

aws iot тайлбарлах төгсгөлийн цэг

// CREATE STACK> aws cloudformation create-stack --stack-name MiniCloudMonitor --template-body file: //cfn-template.json --parameters ParameterKey = IotRestApiEndpoint, ParameterValue = {IoT_REST_API_ENDPOINT}-чадавхийн чадавхи

// STECK DELETE> aws cloudformation delete-stack-стекийн нэр MiniCloudMonitor

Хамгийн тохиромжтой нь би Lambda функцийг дуудахын тулд автоматаар масштабыг идэвхжүүлдэг дохиоллын босгыг ашиглах ёстой бөгөөд ингэснээр дэлгэцийн статусыг шинэчлэх ёстой. Одоогийн байдлаар энэ нь зөвхөн SNS -ийг завсрын хувьд ашиглах үед л боломжтой юм. Тэр үед энэ нэмэлт давхарга нь илүүдэл санагдаж, би CloudWatch EC2 -ийн амьдралын мөчлөгийн дүрмийг ашиглан Ламбда руу шууд залгахаар шийдсэн юм. Гэсэн хэдий ч би ирээдүйд SNS → Lambda сонголтыг судлахыг хүсч байна.

Алхам 4: Програм хангамж

Би Arduino Sketch бичиж эхэллээ. Гол давталт () нь цуваа холболтоос Chars -ийг уншиж, мөрийг шинэ мөр авах хүртэл String үүсгэх явдал юм. Дараа нь зургаан өнцөгт өнгөний кодыг илгээсэн гэж үзээд I2C -ийн зохих командыг BlinkM LED дээр бичнэ. Энэ бол үр ашигтай байдлын тухай биш харин тохь тух юм. Энэхүү Sketch болон бусад файлуудын бүрэн эх сурвалжийг GitHub дээрээс авах боломжтой. Холбогдох кодын зарим хэсгийг энд харуулав.

void loop () {

while (Serial.available ()) {

char inChar = (char) Serial.read ();

хэрэв (inChar == '\ n') {

урт тоо = strtol (inputString.c_str (), NULL, 16);

байт r = тоо >> 16;

байт g = тоо >> 8 & 0xFF;

байт b = тоо & 0xFF;

BlinkM_fadeToRGB (blinkm_addr, r, g, b);

inputString = "";

} өөр {

inputString += inChar;

}

}

}

NodeJS App нь AWS болон Arduino -д интерфэйсийг хэрэгжүүлэх ёстой. Хожим нь маш сайн цуваа багцыг ашиглахдаа хэдхэн мөр кодоор хийж болно.

var serialport = шаарддаг ('serialport'); порт = шинэ цуваа порт (PORT_COM_NAME, {

baudRate: SERIAL_BAUD_RATE

});

port.on ('нээлттэй', функц () {

});

port.on ('алдаа', функц (алдаа) {

});

AWS IoT -тэй холбогдох нь тийм ч их хүчин чармайлт шаарддаггүй. 443 порт дээр MQTT+WebSockets ашиглах нь нэвтрэх түлхүүрээр дамжуулан баталгаажуулалт шаарддаг гэдгийг мэдэх явдал юм. SDK нь орчны хувьсагчдаас эдгээрийг унших болно. AWS_ACCESS_KEY_ID болон AWS_SECRET_ACCESS_KEY -ийг тодорхой экспортлох шаардлагатай байж магадгүй.

var awsiot = шаарддаг ('aws-iot-device-sdk'); var device = awsiot.device ({

clientId: 'MiniCloudMonitor-' + (Math.floor ((Math.random () * 100000) + 1)), бүс нутаг: AWS_REGION, протокол: 'wss', порт: 443, дибаг хийх: үнэн

});

device.on ('холбох', function () {

device.subscribe (MQTT_TOPIC);

});

device.on ('мессеж', функц (сэдэв, ачаа) {

хэрэв (порт && ачаалал && сэдэв == MQTT_TOPIC) {

var message = JSON.parse (ачаалал);

хэрэв (message.hasOwnProperty (MQTT_JSON_KEY))

{буцах;

}

}

});

Lambda функц нь өнгөний кодыг оролтын параметр болгон хүлээн авдаг - тийм ч үзэсгэлэнтэй биш боловч энэ үе шатанд маш уян хатан байдаг. MQTT сэдвээр нийтлэх боломжтой байхын тулд энэ нь IotData объектыг үүсгэдэг бөгөөд үүнд IoT REST API -ийн төгсгөлийн цэг шаардлагатай болно. CloudFormation загвар нь стек үүсгэх явцад үүнийг анхаарч үзсэн.

var AWS = шаарддаг ('aws-sdk'); var mqtt = шинэ AWS. IotData ({

төгсгөлийн цэг: process.env. MQTT_ENDPOINT});

export.handler = функц (үйл явдал, контекст, дуудлага) {

var params = {

сэдэв: process.env. MQTT_TOPIC, ачаалал: '{ "color \": / "' + event.colour + '\"}', Qos: 0

};

mqtt.publish (параметрүүд, функц (алдаа, өгөгдөл) {

дуудлага хийх (алдаа);

});

};

Алхам 5: Дүгнэлт

Үүлэнд "төрсөн" виртуал үйл явдлыг биет ертөнцөд авчрах надад үнэхээр таалагдсан. Миний бяцхан гэрийн тэжээвэр амьтдын төсөл бол маш их хөгжилтэй байсан. Үүнийг дараагийн түвшинд гаргахын тулд би бодож үзэх болно …

  • бат бөх байдал, онцгой байдлын зохицуулалтыг сайжруулах
  • AWS үүл хэмжигдэхүүнийг нэгтгэх илүү сайн арга замыг судлах
  • хэмжигч, бар график гэх мэт илүү олон физик үзүүлэлтүүдийг туршиж үзээрэй.
  • Azure, Google, Heroku, бусад платформ руу шилжих боломжтой.
  • Jenkins, GitHub, … програмын онцлог үйл явдлыг хянах

Энэхүү гарын авлагыг унших танд таалагдсан гэж найдаж байна, магадгүй замдаа шинэ зүйл олж авсан байх гэж найдаж байна. Хэрэв та өөр/илүү сайн хийх арга бодож олсон бол доорх сэтгэгдлээр хуваалцана уу. Мэдээжийн хэрэг, хэрэв та алдаа олж харсан бол толгойгоо дээшлүүлэх нь маш их талархах болно. Цаг гаргасанд баярлалаа.

Зөвлөмж болгож буй: