فهرست مطالب:

مانیتور ابر با AWS & ARDUINO - Electric Electric: 6 Step
مانیتور ابر با AWS & ARDUINO - Electric Electric: 6 Step

تصویری: مانیتور ابر با AWS & ARDUINO - Electric Electric: 6 Step

تصویری: مانیتور ابر با AWS & ARDUINO - Electric Electric: 6 Step
تصویری: CS50 2015 - Week 10 2024, نوامبر
Anonim
مانیتور ابر با AWS & ARDUINO - پسر بچه
مانیتور ابر با AWS & ARDUINO - پسر بچه

این یک پروژه ساده است - هنگامی که مشکلی پیش می آید ، چراغ را روشن کنید … این روزها با تعداد زیادی داشبورد در رایانه های خود ، نسبت به اعلان ها بی حس می شوید ، چگونه می توانیم مطمئن شویم که موارد مهم را از دست نمی دهیم. پاسخ یک شاخص وضعیت فیزیکی است. یا به طور خاص برای کار ، یک مانیتور ابری ، که می تواند روی میز شما بنشیند - همیشه در دید. همانطور که از نامش پیداست ، مانیتور به مراقبت از سلامت سرویس های ابری شما کمک می کند (… حتی شما نیز مانند من نیاز به تهیه آن دارید؟ حتی اگر نه ، ممکن است ایده ای برای پروژه آینده IoT خود داشته باشید.

خوب ، اگر آماده هستید ، بیایید شروع کنیم!

مرحله 1: اجزا ، لوازم ، ابزارهای مورد نیاز ، برنامه ها و سرویس آنلاین

اجزاء و تأمین کننده ها

_ Arduino Micro e Genuino Micro (1 واحد)…

_ ThingM BlinkM - LED RGB کنترل شده I2C (1 واحد)

_ نور مینی ابر (1 واحد) … یا هر ظرف شفاف دیگری به انتخاب شما

_ کابل USB-A به B (1 واحد) … یا هر کابل USB قدیمی با یک فیش نوع A

ابزار مورد نیاز

_ لحیم کاری (عمومی)

برنامه ها و خدمات آنلاین

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

_ خدمات وب آمازون AWS IoT (https://aws.amazon.com/it/iot/)

مرحله 2: سخت افزار

سخت افزار
سخت افزار
سخت افزار
سخت افزار

چراغ شب از قبل با LED ساخته شده است - در مورد من سفید سرد است. من فکر کردم خوب است که وضعیت متفاوت را با رنگ های مختلف نشان دهیم. بنابراین من فقط محفظه ابر را حفظ کردم. برای مغز این عملیات ، کوچکترین سازگار با آردوینو را که در دسترس داشتم ، انتخاب کردم: Freetronics LeoStick سالهاست که سکوی نمونه سازی مورد علاقه من بوده است و من لوازم یدکی زیادی دارم. این دستگاه دارای موارد خوبی است: بلندگوی پیزو ، دو LED RGB (یکی به برق متصل است ، هر چند RX و TX) و از همه مهمتر ، می توانید آن را به سادگی به پورت USB وصل کنید - بدون FTDI خارجی یا کابل مورد نیاز. همچنین بسیار کوچک و در عین حال سازگار با نان برد است.

چرا ESP8266 را انتخاب نکردم؟ برای بی سیم بودن واقعاً ، ممکن است سیم برق را قطع کنید - که کار را برای افزودن باتری و ناراحتی هنگام شارژ کمی پیچیده تر می کند. از آنجا که مانیتور ابری در کنار رایانه من قرار می گیرد ، استفاده از برق USB بسیار ساده تر است. همچنین راه اندازی اتصال Wi-Fi همیشه مستقیم نیست. بر اساس ATmega32u4 ، Arduino Micro و LeoStick عجیب بودن داده های I2C در D2 و ساعت در D3 را به اشتراک می گذارند. این امر هنگام اتصال LED BlinkM RGB اهمیت می یابد. برخلاف بردهای رایج Atmega328 که می توانید سپر BlinkM را به هدرهای A2.. A5 وصل کنید ، این مورد در اینجا کار نمی کند (من با کتابخانه نرم I2C اذیت نشدم).

با جدا کردن سرصفحه های مردانه VCC و GND در BlinkM ، می توانم آنها را با سیم گسترش دهم و همه چیز را در یک بسته کوچک قابل اتصال نگه دارم. BlinkM دارای میکرو کنترلر مخصوص خود است و برنامه های پیشرفته را امکان پذیر می کند: پخش الگوهای رنگی اسکریپت شده بدون اتصال به آردوینو. تقریباً احساس می کنم WS2812 (Adafruits NeoPixels عالی هستند) بهتر به من کمک می کرد - افسوس که هیچکدام در دسترس نبود. برای پایان بخشیدن به سخت افزار ، انتهای مخالف دوشاخه USB نوع A A مردانه را بریدم ، آن را از طریق یک سوراخ از پیش سوراخ شده در نزدیکی نور ابر عبور دادم و سیم ها را به LeoStick لحیم کردم (قرمز: 5 ولت ، سفید: داده- ، سبز: Data+، سیاه: Ground).

مرحله 3: معماری راه حل

معماری راه حل
معماری راه حل
معماری راه حل
معماری راه حل

تنها شرط قوی ای که به خودم تحمیل کردم ، این بود که مانیتور پشت فایروال کار کند. اگرچه یک ویژگی مهم است ، اما این امر باعث می شود که قلاب های وب برای تغییرات رویداد غیر عملی شوند. مکانیسم نظرسنجی از نظر ترافیک TCP پرهزینه است و بسته به فرکانس نظرسنجی ممکن است رویدادها را به تاخیر بیندازد.

راه حل در WebSockets یافت می شود که ارتباطات دو طرفه را ارائه می دهد. سرویس آمازون IoT یک کارگزار پیام ارائه می دهد که از MQTT روی WebSockets پشتیبانی می کند. همانطور که پیداست ، سرویس را می توان بدون نیاز به پیکربندی Things ، Shadows ، Policies یا Rules فراخوانی کرد.

SDK دستگاهی برای Arduino Yún موجود است و تلاش می شود SDK را به پلت فرم های دیگر مانند ESP8266 منتقل کند. اما از آنجا که مانیتور همیشه با رابط سریال متصل می شود ، من اوایل تصمیم گرفتم که یک برنامه NodeJS (روی رایانه رومیزی) برای پیاده سازی API سرویس گیرنده داشته باشم و از Arduino فقط برای دریافت و نمایش کدهای رنگی استفاده کنم. به این ترتیب تغییرات را می توان به راحتی در جاوا اسکریپت انجام داد ، بدون این که نیازی به زحمت بارگذاری سیستم عامل نداشته باشید. برای آزمایش به زیرساخت نمونه ای کوچک نیاز است. فرض کنید ما یک تنظیم کننده بار را در مناطق در دسترس فعال کرده ایم که بر روی نمونه وب سرور و سیاست های مقیاس خودکار بر اساس بار CPU ، بررسی سلامت می کند. قالب CloudFormation مربوطه را می توان در Designer مشاهده کرد یا مستقیماً از کنسول ایجاد شد. توجه: برخی از خدمات موجود در این پشته ممکن است هزینه داشته باشند.

من الگو را با ویژگی های عملکرد لامبدا و مجوزهای لازم گسترش دادم. بعداً نیاز است که نقطه پایانی IoT REST API به عنوان پارامتر درج شود. برای خودکار کردن ، من یک اسکریپت پوسته کوچک نوشتم که از CLI برای درخواست ARN (> aws iot description-endpoint) و سپس فراخوانی create-stack با پارامتر خطی استفاده می کند. یا هنوز می توانید این کار را با دست انجام دهید:

// RETRIVE IoT REST API ENDPOINT

aws iot description-endpoint

// CREATE STACK> aws cloud-create-stack --stack-name MiniCloudMonitor --template-body file: //cfn-template.json --parameters ParameterKey = IotRestApiEndpoint، ParameterValue = {IoT_REST_API_ENDPOINAB}-قابلیتها

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

در حالت ایده آل ، من باید از آستانه های زنگ هشدار دهنده ای که مقیاس خودکار را فعال می کند ، برای فراخوانی عملکرد Lambda و به روز رسانی وضعیت مانیتور استفاده کنم. در حال حاضر این تنها زمانی امکان پذیر است که از SNS به عنوان واسطه استفاده کنید. در آن زمان این لایه اضافی احساس زائد شد و من تصمیم گرفتم از قوانین چرخه عمر CloudWatch EC2 برای تماس مستقیم با لامبدا استفاده کنم. با این وجود ، من می خواهم در آینده گزینه SNS → Lambda را بررسی کنم.

مرحله 4: نرم افزار

من با نوشتن طرح آردوینو شروع کردم. حلقه اصلی () خواندن کاراکترها از اتصال سریال و ساختن یک رشته تا زمانی که یک کاراکتر خط جدید را دریافت کند. سپس فرض می شود که یک کد رنگ شش ضلعی ارسال شده است و دستور مناسب I2C روی LED BlinkM نوشته می شود. این موضوع به کارآیی و راحتی مربوط نمی شود. منابع کامل این Sketch و سایر فایلها را می توانید در GitHub دریافت کنید. در زیر چند قطعه کد مربوطه آمده است:

حلقه خالی () {

در حالی که (Serial.available ()) {

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

if (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 = require ('serialport')؛ port = new serialport (PORT_COM_NAME ، {

BaudRate: SERIAL_BAUD_RATE

});

port.on ('باز' ، عملکرد () {

});

port.on ('error'، function (err) {

});

اتصال به AWS IoT نیز به سختی تلاش زیادی می طلبد. تنها مشکل این است که بدانید استفاده از MQTT+WebSockets روی پورت 443 نیاز به احراز هویت از طریق کلیدهای دسترسی دارد. 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 ('connect'، function () {

device.subscribe (MQTT_TOPIC)؛

});

device.on ('پیام' ، عملکرد (موضوع ، بار) {

if (port && payload && topic == 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 = تابع (رویداد ، زمینه ، تماس تلفنی) {

پار پارام = {

موضوع: process.env. MQTT_TOPIC ،

payload: '{ "color \": / "' + event.colour + '\"}'،

qos: 0

};

mqtt.publish (پارامترها ، عملکرد (خطا ، داده)) {

تماس تلفنی (خطا) ؛

});

};

مرحله 5: نتیجه گیری

من واقعاً از آوردن یک رویداد مجازی "متولد" در ابر به دنیای فیزیکی لذت بردم. و به عنوان پروژه حیوان خانگی کوچک من بسیار سرگرم کننده بود. برای اینکه بتوانم این موضوع را به سطح بعدی برسانم ، باید در نظر بگیرم…

  • بهبود استحکام و مدیریت استثنا
  • راههای بهتری را برای ادغام معیارهای ابری AWS کشف کنید
  • آزمایش با شاخص های فیزیکی بیشتر مانند اندازه گیری ها ، نمودارهای میله ای ،…
  • این گزینه را دارید که به سیستم عامل های دیگر مانند Azure ، Google ، Heroku ،…
  • نظارت بر رویدادهای خاص برنامه برای Jenkins ، GitHub ،…

امیدوارم از خواندن این راهنما لذت برده باشید و شاید حتی در این راه چیز جدیدی انتخاب کرده باشید. اگر می توانید راهی متفاوت یا بهتر برای انجام کارها در نظر بگیرید ، لطفاً آن را در نظرات زیر به اشتراک بگذارید. و البته ، اگر اشتباهاتی را مشاهده کردید ، قدردانی از آن بسیار قدردانی خواهد شد. ممنون بابت وقتی که گذاشتید.

توصیه شده: