Мазмұны:

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 жарық диоды (1 бірлік)

_ Шағын бұлтты жарық (1 бірлік)… немесе кез келген басқа мөлдір ыдыс

_ USB-A-B кабелі (1 бірлік)… немесе A типті ашасы бар кез келген ескі USB кабелі

ҚҰРАЛДАР ҚАЖЕТ

_ Пісіру үтігі (жалпы)

ҚОЛДАНУЛАР ЖӘНЕ ОНЛАЙН ҚЫЗМЕТ

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

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

2 -қадам: Жабдық

Аппараттық құрал
Аппараттық құрал
Аппараттық құрал
Аппараттық құрал

Түнгі жарық диодты жарық диодты шаммен бірге келеді - менің жағдайда суық ақ. Мен әр түрлі түстермен әр түрлі мәртебені көрсету жақсы деп ойладым. Сондықтан мен бұлт тәрізді корпусты ғана сақтадым. Операцияның миы үшін мен қолда бар Arduino -мен үйлесімді ең кішісін таңдадым: Freetronics LeoStick көптеген жылдар бойы менің таңдаулы прототиптік платформам болды және менде көптеген қосалқы бөлшектер бар. Ол жақсы заттармен толтырылған: пьезо динамигі, екі RGB светодиоды (біреуі қуатқа, RX және TX -ке байланған) және ең жақсысы, оны USB портына қосуға болады - сыртқы FTDI немесе кабель қажет емес. Ол сонымен қатар кішкене, бірақ нан тақтасына сәйкес келеді.

Мен неге ESP8266 таңдаған жоқпын? Шынында да, сымсыз болу үшін қуат сымын кесіп тастауға болады - бұл батареяны қосуды қиындатады және қайта зарядтауға ыңғайсыздық туғызады. Бұлтты монитор менің компьютерімнің жанында болатындықтан, USB қуатын пайдалану әлдеқайда жеңіл. ATmega32u4 негізінде Arduino Micro мен LeoStick Wi-Fi байланысын орнату әрқашан D2-де I2C деректері мен D3-тегі сағаттардың біркелкілігін бөліседі. Бұл BlinkM RGB жарықдиодты қосқанда маңызды болады. A2.. A5 тақырыптарына BlinkM қалқанын қосуға болатын қарапайым Atmega328 тақталарынан айырмашылығы, бұл жерде жұмыс істемейді (мен жұмсақ I2C кітапханасына алаңдамадым).

BlinkM-де ерлердің VCC және GND тақырыптарын ажырату арқылы мен оларды сыммен ұзартуға және бәрін штепсельдік пакетте сақтауға мүмкіндік берді. сценарий түс үлгілерін Arduino қосылмай ойнаңыз. Мен WS2812 (Adafruits NeoPixels тамаша) маған жақсырақ қызмет етер еді деп ойлаймын - өкінішке орай, менде жоқ. Аппараттық битті аяқтау үшін мен A типті USB штепсельдік ұшының қарама-қарсы ұшын кесіп алдым, оны бұлт жарығының негізіне жақын жерде алдын ала бұрғыланған тесіктен өткіздім және сымдарды LeoStick-ке дәнекерледім (қызыл: 5В, ақ: Деректер-, жасыл: Деректер+, қара: Жер).

3 -қадам: Шешім архитектурасы

Шешім архитектурасы
Шешім архитектурасы
Шешім архитектурасы
Шешім архитектурасы

Мен өзіме қойған жалғыз талап - монитордың брандмауэр артында жұмыс істеуі болды. Маңызды ерекшелігі болғанымен, бұл оқиғаға арналған веб -ілгектерді іс жүзінде өзгерте алмады. Дауыс беру механизмі TCP трафигі үшін қымбатқа түседі және сұрау жиілігіне байланысты оқиғаларды кейінге қалдыруы мүмкін.

Шешім толық дуплексті байланысты қамтамасыз ететін WebSockets-те табылған. Amazons IoT қызметі WebSockets арқылы MQTT қолдайтын хабарлама брокерін ұсынады. Белгілі болғандай, қызметке заттарды, көлеңкелерді, саясатты немесе ережелерді конфигурациялаусыз шақыруға болады.

Arduino Yún үшін SDK құрылғысы бар және SDK -ны ESP8266 сияқты басқа платформаларға тасымалдауға біраз күш жұмсалады. Бірақ монитор әрқашан сериялық интерфейс арқылы қосылатындықтан, мен клиенттік API -ді іске асыру үшін және Arduino -ды түс кодтарын қабылдау және көрсету үшін NodeJS қосымшасын (жұмыс үстелі компьютерінде іске қосылатын) ерте құруды шештім. Осылайша, бағдарламалық жасақтаманы жүктеуді қажет етпей, JavaScript -те оңай өзгертуге болады. Тексеру үшін инфрақұрылым қажет. Айталық, бізде қол жетімділік аймақтарында жүктеме теңгерімі қосылды, ол веб -сервер данасының денсаулығын тексереді және процессордың жүктелуіне негізделген автоматты түрде масштабтау саясатын жүргізеді. Сәйкес CloudFormation үлгісін ▶ ️ Дизайнерден көруге немесе ▶ ️ тікелей консольден жасауға болады. Ескерту: бұл бумадағы кейбір қызметтер ақылы болуы мүмкін.

Мен шаблонды Lambda функциясы мен қажетті рұқсаттары бар кеңейттім. Кейінірек IoT REST API соңғы нүктесін параметр ретінде енгізуді талап етеді. Мұны автоматтандыру үшін мен CLI көмегімен ARN (> aws iot сипаттау-соңғы нүкте) сұрауын қолданатын шағын қабық сценарийін жаздым, содан кейін желідегі параметрі бар create-stack шақырады. Немесе сіз оны қолмен жасай аласыз:

// RETRIVE IoT REST API ENDPOINT

aws iot сипаттаудың соңғы нүктесі

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

// DELETE STACK> aws бұлтты ақпаратты жою-стек-стек атауы MiniCloudMonitor

Ең дұрысы, мен Lambda функциясын шақыру үшін автоматты масштабтауды іске қосатын дабыл шегін қолдануым керек, осылайша монитордың күйін жаңартады. Қазіргі уақытта бұл SNS аралық өнім ретінде қолданылғанда ғана мүмкін. Сол кезде бұл қосымша қабат қажетсіз болды және мен Lambda -ға тікелей қоңырау шалу үшін CloudWatch EC2 өмірлік циклінің ережелерін қолдануды шештім. Дегенмен, мен болашақта SNS → Lambda опциясын зерттегім келеді.

4 -қадам: Бағдарламалық қамтамасыз ету

Мен Arduino эскизін жазудан бастадым. Негізгі цикл () - тізбекті қосылымнан Chars оқу және жаңа жол таңбасын алғанға дейін String құру. Содан кейін он алтылық түс коды жіберілді деп есептеледі және BlinkM жарық диодына тиісті I2C пәрмені жазылады. Бұл тиімділік туралы емес, ыңғайлылық. Бұл эскиз мен басқа файлдардың толық көздерін 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 қолданбасы 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 ('қосылу', функция () {

device.suboncribe (MQTT_TOPIC);

});

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

if (порт және& жүктеме && тақырып == MQTT_TOPIC) {

var message = JSON.parse (пайдалы жүктеме);

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

{қайтару;

}

}

});

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 үшін қосымшаларға қатысты оқиғаларды бақылаңыз …

Сізге бұл нұсқаулықты оқу ұнады деп үміттенемін, мүмкін сіз жол бойында жаңа нәрсе алдыңыз. Егер сіз басқаша/жақсы жолды ойласаңыз, оны төмендегі түсініктемелерде бөлісіңіз. Әрине, егер сіз қателіктерді байқасаңыз, жоғары бағалайтын боласыз. Уақыт бөлгеніңізге рахмет.

Ұсынылған: