Სარჩევი:

CLOUD MONITOR AWS & ARDUINO - ელექტრო ბიჭი: 6 ნაბიჯი
CLOUD MONITOR AWS & ARDUINO - ელექტრო ბიჭი: 6 ნაბიჯი

ვიდეო: CLOUD MONITOR AWS & ARDUINO - ელექტრო ბიჭი: 6 ნაბიჯი

ვიდეო: CLOUD MONITOR AWS & ARDUINO - ელექტრო ბიჭი: 6 ნაბიჯი
ვიდეო: CS50 2015 - Week 10 2024, ნოემბერი
Anonim
CLOUD MONITOR AWS & ARDUINO - ელექტრო ბიჭი
CLOUD MONITOR AWS & ARDUINO - ელექტრო ბიჭი

ეს არის მარტივი პროექტი - აანთეთ, როდესაც რაღაც არასწორედ მიდის … დღითიდღე სულ უფრო დაბუჟდება ჩვენი კომპიუტერების ამდენი დაფის მქონე შეტყობინებების მიმართ, როგორ შეგვიძლია დავრწმუნდეთ, რომ არ გამოვტოვებთ მართლაც მნიშვნელოვანებს. პასუხი არის ფიზიკური სტატუსის მაჩვენებელი. ან უფრო კონკრეტულად ამოცანისთვის, Cloud Monitor, რომელსაც შეუძლია იჯდეს თქვენს სამუშაო მაგიდაზე - ყოველთვის მხედველობაში. როგორც სახელი გვთავაზობს, მონიტორი დაგეხმარებათ თვალყური ადევნოთ თქვენს ღრუბლოვან სერვისებს (… შენც კი, ჩემნაირი, გჭირდებათ ამის გაკეთება? თუნდაც არა, შეიძლება გქონდეთ იდეა თქვენი მომავალი IoT პროექტისთვის.

კარგი, თუ მზად ხარ, დავიწყოთ!

ნაბიჯი 1: კომპონენტები, მასალები, საჭირო ინსტრუმენტები, პროგრამები და ონლაინ სერვისი

კომპონენტები და მიწოდებები

_ Arduino Micro e Genuino Micro (1 ერთეული)… ან ნებისმიერი პატარა Arduino თავსებადი - ჩემს შემთხვევაში freetronics LeoStick (https://www.freetronics.com.au/collections/arduino/products/leostick)

_ ThingM BlinkM - I2C კონტროლირებადი RGB LED (1 ერთეული)

_ მინი ღრუბლის შუქი (1 ერთეული)… ან ნებისმიერი სხვა გამჭვირვალე ჭურჭელი თქვენი არჩევანით

_ USB-A to B კაბელი (1 ერთეული)… ან ნებისმიერი ძველი USB კაბელი ტიპის A დანამატით

ინსტრუმენტები საჭიროა

_ შედუღების რკინა (ზოგადი)

აპლიკაციები და ონლაინ სერვისი

_ ამაზონის ვებ სერვისები AWS Lambda (https://aws.amazon.com/it/lambda/)

_ ამაზონის ვებ სერვისები AWS IoT (https://aws.amazon.com/it/iot/)

ნაბიჯი 2: აპარატურა

ტექნიკა
ტექნიკა
ტექნიკა
ტექნიკა

ღამის შუქს უკვე მოყვება ჩამონტაჟებული LED - ჩემს შემთხვევაში ცივი თეთრი. ვფიქრობდი, რომ კარგი იქნებოდა განსხვავებული ფერის მიხედვით განსხვავებული სტატუსის მითითება. ასე რომ, მე მხოლოდ ღრუბლის ფორმის გარსაცმები შევინახე. ოპერაციის ტვინისთვის ავირჩიე ყველაზე პატარა Arduino თავსებადი, რაც მე მქონდა: Freetronics LeoStick წლების განმავლობაში იყო ჩემი სასურველი პროტოტიპების პლატფორმა და მე მაქვს ბევრი სათადარიგო ნაწილი. ის დატვირთულია კარგი ნივთებით: პიეზო სპიკერი, ორი RGB LED (ერთი მიბმულია ძალაზე, თუმცა RX და TX) და რაც მთავარია, შეგიძლიათ უბრალოდ შეაერთოთ იგი USB პორტში - გარე FTDI ან კაბელი არ არის საჭირო. ის ასევე პატარაა, მაგრამ მაინც დაფარულია დაფაზე.

რატომ არ ავირჩიე ESP8266? ჭეშმარიტად უკაბელო რომ იყო, შეიძლება ასევე გათიშო დენის კაბელი - რაც ცოტათი ართულებს ბატარეის დამატებას და დატენვის უხერხულობას. მას შემდეგ, რაც ღრუბლოვანი მონიტორი იჯდება ჩემს კომპიუტერთან, ბევრად უფრო ადვილია USB ენერგიის გამოყენება. ასევე Wi-Fi კავშირის დაყენება ყოველთვის არ არის სწორი. ATmega32u4– ზე დაფუძნებული, Arduino Micro და LeoStick იზიარებენ უცნაურობას I2C მონაცემების D2– ზე და საათის D3– ზე. ეს აქტუალური ხდება BlinkM RGB LED- ის შეერთებისას. განსხვავებით ჩვეულებრივი Atmega328 დაფებისგან, სადაც შეგიძლიათ უბრალოდ შეაერთოთ BlinkM ფარი სათაურებში A2.. A5, ეს აქ არ იმუშავებს (მე არ შემაწუხეთ რბილი I2C ბიბლიოთეკით).

BlinkM– ზე მამრობითი სათაურების VCC და GND– ის დაშლით, მე შემიძლია გავაგრძელო ისინი მავთულხლართებით და შევინახო ყველაფერი პატარა პაკეტში. BlinkM– ს აქვს საკუთარი მიკრო კონტროლერი ბორტზე და იძლევა გაფართოებულ პროგრამებს: მაგ. ითამაშეთ სკრიპტირებული ფერის შაბლონები Arduino– ს გარეშე. მე თითქმის ვგრძნობ, რომ WS2812 (Adafruits NeoPixels შესანიშნავია) უკეთესად მომემსახურებოდა - სამწუხაროდ, მე არცერთი არ მქონდა ხელმისაწვდომი. ტექნიკური ნაწილის დასასრულებლად, მე დავჭერი მამრობითი ტიპის A USB დანამატის საპირისპირო ბოლო, გავატარე იგი წინასწარ გაბურღულ ხვრელში ღრუბლის შუქის ძირთან და მავთულები შევაერთე LeoStick- ს (წითელი: 5V, თეთრი: მონაცემები-, მწვანე: მონაცემები+, შავი: გრუნტი).

ნაბიჯი 3: არქიტექტურის გადაწყვეტა

გამოსავალი არქიტექტურა
გამოსავალი არქიტექტურა
გამოსავალი არქიტექტურა
გამოსავალი არქიტექტურა

ერთადერთი ძლიერი მოთხოვნა, რაც საკუთარ თავს დავაკისრე, იყო მონიტორის გაშვება ბუხრის უკან. მიუხედავად იმისა, რომ გადამწყვეტი თვისებაა, ამან ვებგვერდები მოვლენების ცვლილებებისთვის არაპრაქტიკული გახადა. კენჭისყრის მექანიზმი ძვირია TCP ტრაფიკის თვალსაზრისით და შეიძლება მოვლენების გადადება კენჭისყრის სიხშირის მიხედვით.

გამოსავალი ნაპოვნია WebSockets– ში, რომელიც უზრუნველყოფს სრულ დუპლექსურ კომუნიკაციას. ამაზონის IoT სერვისი გთავაზობთ შეტყობინებების ბროკერს, რომელიც მხარს უჭერს MQTT– ს WebSockets– ზე. როგორც ირკვევა, სერვისს შეიძლება დაურეკო საგნების, ჩრდილების, პოლიტიკისა თუ წესების კონფიგურაციის გარეშე.

Arduino Yún– ისთვის ხელმისაწვდომია მოწყობილობის SDK და გარკვეული ძალისხმევაა საჭირო SDK– ს გადასაყვანად სხვა პლატფორმებზე, როგორიცაა ESP8266. მაგრამ რადგან მონიტორი ყოველთვის იქნება დაკავშირებული სერიული ინტერფეისით, მე ადრევე გადავწყვიტე მქონოდა NodeJS პროგრამა (გაშვებული დესკტოპის კომპიუტერზე) კლიენტის API განსახორციელებლად და Arduino- ს გამოყენება მხოლოდ ფერადი კოდების მისაღებად და ჩვენებისთვის. ამ გზით ცვლილებები შეიძლება ადვილად მოხდეს JavaScript– ში, firmware– ის ატვირთვით შეწუხების გარეშე. ტესტირებისთვის საჭიროა ინფრასტრუქტურის მცირე მაგალითი. ვთქვათ, ჩვენ გვაქვს დატვირთვის შემწოვი ჩართული ხელმისაწვდომობის ზონებში, რომელიც ახდენს ჯანმრთელობის შემოწმებას ვებ სერვერის მაგალითზე და ავტომატური სკალირების პოლიტიკას CPU დატვირთვის საფუძველზე. შესაბამისი CloudFormation შაბლონი შეიძლება ▶ ️ ნახოთ დიზაინერში ან ▶ ️ პირდაპირ კონსოლიდან შეიქმნას. შენიშვნა: ამ დასტის ზოგიერთ სერვისს შეიძლება ჰქონდეს საფასური.

მე გავაფართოვე შაბლონი ლამბდა ფუნქციის თვისებებით და საჭირო ნებართვებით. მოგვიანებით მოითხოვეთ IoT REST API საბოლოო წერტილი, როგორც პარამეტრი. ამის ავტომატიზაციის მიზნით, მე დავწერე პატარა სკრიპტი, რომელიც იყენებს CLI- ს ARN- ის მოთხოვნისათვის (> aws iot აღწერა-საბოლოო წერტილი) და შემდეგ მოვუწოდებ შექმნა-დასტის პარამეტრს ხაზში. ან შეგიძლიათ ამის გაკეთება ხელით:

// IoT REST API ENDPOINT RETRIVE IoT REST APP 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_ENDPOINABILIT_AM_CAP_INABILITY_APARINABILITY_APARINABILITY_COM

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

იდეალურ შემთხვევაში, მე უნდა გამოვიყენო იგივე სიგნალიზაციის ზღურბლები, რაც იწვევს ავტომატურ სკალირებას, ასევე ლამბდა ფუნქციის გამოძახებისთვის და ამ გზით მონიტორის სტატუსის განახლების მიზნით. ამჟამად ეს შესაძლებელია მხოლოდ SNS– ის შუალედური გამოყენებისას. იმ დროს ეს ზედმეტი ფენა ზედმეტად მეჩვენა და მე გადავწყვიტე გამოვიყენო CloudWatch EC2 სასიცოცხლო ციკლის წესები, რომ ლამბდას პირდაპირ მოვუწოდო. მიუხედავად ამისა, მე მსურს მომავალში შეისწავლო SNS → Lambda- ს ვარიანტი.

ნაბიჯი 4: პროგრამული უზრუნველყოფა

დავიწყე არდუინოს სკეტჩის წერით. მთავარი მარყუჟი () კითხულობს სიმბოლოებს სერიული კავშირიდან და აყალიბებს სტრიქონს, სანამ არ მიიღებს ახალი ხაზის სიმბოლოს. შემდეგ ვარაუდობენ, რომ გაგზავნილია ექვსკუთხა ფერის კოდი და შესაბამისი I2C ბრძანება ჩაწერილია BlinkM LED- ზე. ეს არ ეხება იმდენად ეფექტურობას, რამდენადაც მოხერხებულობას. ამ ესკიზისა და სხვა ფაილების სრული წყაროების მოპოვება შესაძლებელია GitHub– ზე. ქვემოთ მოცემულია რამოდენიმე შესაბამისი კოდის ნაწყვეტი:

ბათილი მარყუჟი () {

ხოლო (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 სერიული პორტი = მოითხოვს ('სერიული პორტი'); პორტი = ახალი სერიული პორტი (PORT_COM_NAME, {

BaudRate: SERIAL_BAUD_RATE

});

port.on ('ღია', ფუნქცია () {

});

port.on ('შეცდომა', ფუნქცია (შეცდომა) {

});

AWS IoT– თან დაკავშირება არც დიდ ძალისხმევას მოითხოვს. ერთადერთი ნაკლი არის იმის ცოდნა, რომ MQTT+WebSockets 443 პორტზე გამოყენება მოითხოვს ავტორიზაციას წვდომის ღილაკების საშუალებით. SDK წაიკითხავს მათ გარემოს ცვლადებიდან. შეიძლება საჭირო გახდეს AWS_ACCESS_KEY_ID და AWS_SECRET_ACCESS_KEY მკაფიოდ ექსპორტი.

var awsiot = მოითხოვს ('aws-iot-device-sdk'); var მოწყობილობა = awsiot.device ({

clientId: 'MiniCloudMonitor-' + (Math.floor ((Math.random () * 100000) + 1)), რეგიონი: AWS_REGION, პროტოკოლი: 'wss', პორტი: 443, გამართვა: მართალია

});

device.on ('დაკავშირება', ფუნქცია () {

მოწყობილობა. გამოწერა (MQTT_TOPIC);

});

device.on ('შეტყობინება', ფუნქცია (თემა, დატვირთვა) {

თუ (პორტი && დატვირთვა && თემა == MQTT_TOPIC) {

var შეტყობინება = JSON.parse (დატვირთვა);

if (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, დატვირთვა: '{ "ფერი \": / "' + event.colour + '\"}', qos: 0

};

mqtt.publish (params, function (err, data) {

გამოძახება (შეცდომა);

});

};

ნაბიჯი 5: დასკვნა

მე ნამდვილად მსიამოვნებდა ღრუბელში "დაბადებული" ვირტუალური მოვლენის შემოტანა ფიზიკურ სამყაროში. და როგორც ჩემი პატარა ცხოველის პროექტი, ეს იყო სახალისო. ამის შემდეგ საფეხურზე გადასასვლელად განვიხილავ…

  • გამძლეობისა და გამონაკლისის დამუშავების გაუმჯობესება
  • შეისწავლეთ AWS ღრუბლოვანი მეტრიკის ინტეგრირების უკეთესი გზები
  • ექსპერიმენტი ჩაატარეთ უფრო მეტ ფიზიკურ ინდიკატორებთან, როგორიცაა საზომი, სვეტოვანი გრაფიკი,…
  • აქვს შესაძლებლობა გადავიდეს სხვა პლატფორმებზე, როგორიცაა Azure, Google, Heroku,…
  • აკონტროლეთ პროგრამის სპეციფიკური მოვლენები Jenkins, GitHub,…

ვიმედოვნებ, რომ მოგეწონათ ამ სახელმძღვანელოს კითხვა და იქნებ რაიმე ახალი შეარჩიოთ ამ გზაზე. თუ თქვენ შეგიძლიათ იფიქროთ სხვაგვარად/უკეთეს გზაზე, გაუზიარეთ იგი ქვემოთ მოცემულ კომენტარებში. და რა თქმა უნდა, თუ შეცდომებს შეამჩნევთ, თავები მაღლა დაფასდება. მადლობა თქვენი დროისათვის.

გირჩევთ: