Мазмуну:

AWS & ARDUINO менен CLOUD MONITOR - Электр бала: 6 кадам
AWS & ARDUINO менен CLOUD MONITOR - Электр бала: 6 кадам

Video: AWS & ARDUINO менен CLOUD MONITOR - Электр бала: 6 кадам

Video: AWS & ARDUINO менен CLOUD MONITOR - Электр бала: 6 кадам
Video: 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 кабели

КУРАЛДАР КЕРЕК

_ Ширетүүчү темир (жалпы)

КОЛДОНМОЛОР & ОНЛАЙН КЫЗМАТ

_ 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 светодиод (бири бийликке, RX жана TXке байланган) жана эң башкысы, аны USB портуна туташтырсаңыз болот - тышкы FTDI же кабель кереги жок. Бул ошондой эле кичинекей, бирок нанга ылайыктуу.

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

BlinkMдеги VCC жана GND эркектердин башын өчүрүү менен, мен аларды зым менен узартып, баарын кичинекей пакетте сактай алмакмын. BlinkMдин бортунда өзүнүн микро контроллери бар жана өнүккөн колдонмолорго мүмкүнчүлүк берет: мис. сценарийлердин түс схемаларын Arduino туташпастан ойнотуу. Мен дээрлик WS2812 (Adafruits NeoPixels сонун) мага жакшыраак кызмат кылаарын сезем - тилекке каршы, менде эч ким жок болчу. Аппараттык битти бүтүрүү үчүн, мен эркектин USB плагинин карама-каршы учун кесип, булуттун жарыгына жакын жерде алдын ала бургуланган тешиктен өткөрдүм жана зымдарды LeoStickке (кызыл: 5V, ак: Data-, жашыл: Data+, кара: Ground).

3 -кадам: Чечим архитектурасы

Чечим архитектурасы
Чечим архитектурасы
Чечим архитектурасы
Чечим архитектурасы

Мен өзүмө койгон жалгыз күчтүү талап - монитордун файервалдын артында иштөөсү. Маанилүү өзгөчөлүк болсо да, бул окуяны өзгөртүү үчүн веб -илгичтерди практикалык эмес кылып койду. Сурамжылоо механизми TCP трафиги үчүн кымбатка турат жана добуш берүү жыштыгына жараша окуяларды кечеңдетиши мүмкүн.

Чечим толук дуплекстүү байланышты камсыз кылган WebSockets-те табылган. Amazons IoT кызматы MQTTти WebSockets аркылуу колдогон билдирүү брокерин камсыздайт. Көрүнүп тургандай, кызматты нерселерди, көлөкөлөрдү, саясатты же эрежелерди конфигурация кылбастан чакырса болот.

Arduino Yún үчүн SDK түзмөгү бар жана SDKти ESP8266 сыяктуу башка платформаларга ташуу үчүн бир аз аракеттер көрүлөт. Бирок монитор дайыма сериялык интерфейс менен туташып тургандыктан, мен кардар API'син ишке ашыруу үчүн NodeJS тиркемесин (рабочий компьютерде иштетүү) жана Arduinoну түстүү коддорду алуу жана көрсөтүү үчүн гана колдонууну чечтим. Ошентип, программалык камсыздоону жүктөө менен убара болбостон, JavaScriptке оңой эле өзгөртүүлөрдү киргизсе болот. Бир аз мисал үчүн инфраструктура керек. Келгиле, бизде жеткиликтүүлүк зоналарында иштетилген жүктөө балансы бар, ал веб -сервердин ден соолугун текшерет жана CPU жүктөөсүнө негизделген автоматтык масштабдоо саясатын жүргүзөт. Тиешелүү CloudFormation шаблонун Дизайнерден ▶ ️ көрүүгө же ▶ ️ консолдон түз түзүүгө болот. Эскертүү: бул кабаттагы кээ бир кызматтар акы алышы мүмкүн.

Мен шаблонду Lambda функциясынын касиеттери жана керектүү уруксаттар менен кеңейттим. Кийинчерээк IoT REST API акыркы чекитин параметр катары киргизүүнү талап кылат. Муну автоматташтыруу үчүн, мен CLIди колдонуп, ARN (> aws iot description-endpoint) талап кылган кичинекей кабык сценарийин жаздым, андан кийин линиядагы параметр менен стек-стекти чакырат. Же дагы эле кол менен жасай аласыз:

// RETRIVE IoT REST API ENDPOINT

aws iot сүрөттөөчү чекит

// CREATE STACK> aws булутту түзүү-стек-стек аты MiniCloudMonitor --template-body file: //cfn-template.json --parameters ParameterKey = IotRestApiEndpoint, ParameterValue = {IoT_REST_API_ENDPOINT}-жөндөмдүүлүктөрү

// STECK DELETE> aws cloudformation delete-stack --stack-name MiniCloudMonitor

Идеалында, мен автоматтык масштабды иштетүүчү сигналдын босогосун колдонушум керек, ошондой эле Lambda функциясын чакыруу үчүн жана монитордун статусун жаңыртуу үчүн. Учурда бул SNSти ортомчу катары колдонууда гана мүмкүн. Ошол убакта бул кошумча катмар ашыкча сезилчү жана мен Lambda түз чакыруу үчүн CloudWatch EC2 жашоо циклинин эрежелерин колдонууну чечтим. Ошентсе да, мен келечекте SNS → Lambda вариантын изилдегим келет.

4 -кадам: Программалык камсыздоо

Мен Arduino эскизин жазуудан баштадым. Негизги цикл () - Charsти сериялык туташуудан окуу жана жаңы саптын белгисин алганга чейин String түзүү. Андан кийин алтылык түстүү код жөнөтүлгөн деп болжолдонот жана тиешелүү I2C буйругу BlinkM LEDине жазылат. Бул ыңгайлуулук эмес, натыйжалуулук жөнүндө эмес. Бул эскиздин жана башка файлдардын толук булактарын 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'); порт = жаңы serialport (PORT_COM_NAME, {

baudRate: SERIAL_BAUD_RATE

});

port.on ('ачык', function () {

});

port.on ('ката', функция (ката) {

});

AWS IoTге туташуу деле көп күчтү талап кылбайт. Бирден -бир тузак - MQTT+WebSocketsти 443 портунда колдонуу Access Keys аркылуу аутентификацияны талап кыларын билүү. 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 ('туташуу', функция () {

device.subscribe (MQTT_TOPIC);

});

device.on ('билдирүү', функция (тема, пайдалуу жүк) {

эгер (порт жана& жүктөм && тема == MQTT_TOPIC) {

var message = JSON.parse (пайдалуу жүк);

эгер (message.hasOwnProperty (MQTT_JSON_KEY))

{return;

}

}

});

Lambda функциясы түс параметрин киргизүү параметр катары кабыл алат - бул этапта сулуу эмес, бирок абдан ийкемдүү. MQTT темасына жарыялоо үчүн, ал IotTata объектисин жаратат, ал 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 үчүн колдонмодогу өзгөчө окуяларды көзөмөлдөңүз …

Бул колдонмону окуу сизге жакты деп үмүттөнөм жана, балким, жолдон жаңы нерсени алдыңыз. Эгерде сиз башка/жакшыраак жолду ойлонсоңуз, аны төмөндөгү комментарийлерде бөлүшүңүз. Анан, албетте, эгер сиз каталарды байкасаңыз, анда башыңыз жогору бааланат. Убактыңыз үчүн рахмат.

Сунушталууда: