جدول المحتويات:

CLOUD MONITOR مع AWS و ARDUINO - الفتى الكهربائي: 6 خطوات
CLOUD MONITOR مع AWS و ARDUINO - الفتى الكهربائي: 6 خطوات

فيديو: CLOUD MONITOR مع AWS و ARDUINO - الفتى الكهربائي: 6 خطوات

فيديو: CLOUD MONITOR مع AWS و ARDUINO - الفتى الكهربائي: 6 خطوات
فيديو: Getting Started with Amazon AWS IoT Core using ESP32 || Creating Thing, Policy & Certificates 2024, شهر نوفمبر
Anonim
شاشة سحابية مع AWS و ARDUINO - فتى كهربائي
شاشة سحابية مع AWS و ARDUINO - فتى كهربائي

إنه مشروع بسيط - قم بإضاءة الضوء عندما يحدث خطأ ما … الشعور بالخدر بشكل متزايد تجاه الإشعارات مع وجود العديد من لوحات المعلومات على أجهزة الكمبيوتر لدينا هذه الأيام ، كيف يمكننا التأكد من أننا لا نفوت الأشياء المهمة حقًا. الجواب هو مؤشر الحالة المادية. أو أكثر تحديدًا للمهمة ، مراقب السحابة ، الذي يمكن أن يجلس على مكتبك - دائمًا معروض. كما يوحي الاسم ، ستساعد الشاشة في مراقبة صحة خدماتك السحابية (… أو أي شيء آخر حقًا ، السماء هي الحد الأقصى ، معذرة التورية). حتى أنت ، مثلي ، تحتاج إلى صنع واحدة؟ حتى لو لم يكن الأمر كذلك ، فقد يكون لديك فكرة لمشروع إنترنت الأشياء المستقبلي الخاص بك.

حسنًا ، إذا كنت مستعدًا ، فلنبدأ!

الخطوة 1: المكونات واللوازم والأدوات المطلوبة والتطبيقات والخدمة عبر الإنترنت

المكونات والإمدادات

_ Arduino Micro e Genuino Micro (وحدة واحدة) … أو أي متوافق مع Arduino صغير - في حالتي ، فإن freetronics LeoStick (https://www.freetronics.com.au/collections/arduino/products/leostick)

_ ThingM BlinkM - RGB LED المتحكم به I2C (1 وحدة)

_ ضوء سحابة صغير (وحدة واحدة) … أو أي وعاء شفاف آخر من اختيارك

_ كابل USB-A إلى B (وحدة واحدة) … أو أي كبل USB قديم به قابس من النوع A

الادوات المحتاجة

_ لحام الحديد (عام)

التطبيقات والخدمات عبر الإنترنت

_ 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. كما أن إعداد اتصال Wi-Fi ليس دائمًا للأمام بشكل مباشر ، استنادًا إلى ATmega32u4 ، يتشارك Arduino Micro و LeoStick في غرابة وجود بيانات I2C على D2 والساعة على D3. يصبح هذا مناسبًا عند توصيل BlinkM RGB LED. على عكس لوحات Atmega328 الشائعة حيث يمكنك ببساطة توصيل درع BlinkM بالرؤوس A2.. A5 ، لن يعمل هذا هنا (لم أزعج مكتبة I2C الناعمة).

من خلال إلغاء لحام الرؤوس الذكور VCC و GND على BlinkM ، يمكنني بعد ذلك تمديد تلك الرؤوس مع الأسلاك والاحتفاظ بكل شيء في حزمة صغيرة قابلة للتوصيل. تمتلك BlinkM وحدة تحكم دقيقة خاصة بها على اللوحة وتسمح بالتطبيقات المتقدمة: على سبيل المثال تشغيل أنماط الألوان المكتوبة بدون توصيل Arduino. كدت أشعر أن WS2812 (Adafruits NeoPixels رائع) كان سيخدمني بشكل أفضل - للأسف لم يكن لدي أي شيء متاح. لإنهاء بت الجهاز ، قمت بقطع الطرف المقابل لمقبس USB من النوع A من الذكور ، وقمت بربطه من خلال ثقب محفور مسبقًا بالقرب من قاعدة ضوء السحابة ولحمت الأسلاك بـ LeoStick (أحمر: 5 فولت ، أبيض: Data- ، أخضر: Data + ، أسود: أرضي).

الخطوة 3: هندسة الحلول

هندسة الحلول
هندسة الحلول
هندسة الحلول
هندسة الحلول

كان الشرط الوحيد القوي الذي فرضته على نفسي هو تشغيل الشاشة خلف جدار حماية. على الرغم من أنها ميزة مهمة ، إلا أن هذا جعل روابط الويب لتغييرات الأحداث غير عملية. تعتبر آلية الاقتراع مكلفة من حيث حركة TCP وقد تؤخر الأحداث اعتمادًا على تردد الاقتراع.

الحل موجود في WebSockets التي توفر اتصال مزدوج الاتجاه. توفر خدمة Amazons IoT وسيط رسائل يدعم MQTT عبر WebSockets. كما اتضح ، يمكن استدعاء الخدمة دون الحاجة إلى تكوين الأشياء أو الظلال أو السياسات أو القواعد.

هناك جهاز SDK متاح لـ Arduino Yn ويتم بذل بعض الجهود لنقل SDK إلى منصات أخرى مثل ESP8266. ولكن نظرًا لأن الشاشة ستكون متصلة دائمًا بواجهة تسلسلية ، فقد قررت مبكرًا أن يكون لدي تطبيق NodeJS (يعمل على كمبيوتر سطح المكتب) لتنفيذ واجهة برمجة تطبيقات العميل واستخدام Arduino فقط لتلقي وعرض رموز الألوان. بهذه الطريقة يمكن إجراء التغييرات بسهولة في JavaScript ، دون الاضطرار إلى عناء تحميل البرامج الثابتة. لاختبار بعض الأمثلة على البنية التحتية ، هناك حاجة. لنفترض أن لدينا موازن تحميل ممكّنًا عبر مناطق التوفر التي تقوم بإجراء فحوصات صحية على مثيل خادم الويب وسياسات القياس التلقائي بناءً على حمل وحدة المعالجة المركزية. يمكن عرض قالب CloudFormation المقابل في "المصمم" أو "إنشاء" مباشرة من وحدة التحكم. ملاحظة: قد يتم تحميل بعض الخدمات في هذا المكدس رسومًا.

لقد قمت بتوسيع النموذج بخصائص وظيفة Lambda والأذونات اللازمة. تتطلب لاحقًا إدراج نقطة نهاية IoT REST API كمعامل. لأتمتة ذلك ، قمت بكتابة نص برمجي صغير يستخدم CLI لطلب ARN (> aws iot وصف نقطة النهاية) ثم يستدعي create-stack مع المعلمة في السطر. أو لا يزال بإمكانك القيام بذلك يدويًا:

// RETRIVE 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} - Capabilities_ABIAMITY_NAMED

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

من الناحية المثالية ، يجب أن أستخدم نفس عتبات التنبيه التي تؤدي إلى التحجيم التلقائي ، لاستدعاء وظيفة Lambda وبهذه الطريقة لتحديث حالة الشاشة. هذا ممكن فقط عند استخدام SNS كوسيط. في ذلك الوقت ، شعرت هذه الطبقة الإضافية بأنها زائدة عن الحاجة وقررت استخدام قواعد دورة حياة CloudWatch EC2 للاتصال بـ Lambda مباشرةً. ما زلت أرغب في استكشاف خيار SNS → Lambda في المستقبل.

الخطوة 4: البرمجيات

لقد بدأت بكتابة Arduino Sketch. الحلقة الرئيسية () تقرأ Chars من الاتصال التسلسلي وتقوم ببناء سلسلة حتى تتلقى حرف سطر جديد. ومن المفترض بعد ذلك أنه تم إرسال رمز لون سداسي عشري وكتابة أمر I2C المناسب إلى BlinkM LED. لا يتعلق الأمر بالكفاءة بقدر ما يتعلق بالراحة. يمكن الحصول على المصادر الكاملة لهذا الرسم والملفات الأخرى على GitHub. فيما يلي بعض مقتطفات التعليمات البرمجية ذات الصلة:

حلقة فارغة() {

بينما (Serial.available ()) {

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

إذا (inChar == '\ n') {

رقم طويل = strtol (inputString.c_str () ، NULL ، 16) ؛

البايت ص = رقم >> 16 ؛

البايت g = رقم >> 8 & 0xFF ؛

البايت ب = رقم & 0xFF ؛

BlinkM_fadeToRGB (blinkm_addr، r، g، b) ؛

inputString = "" ؛

} آخر {

inputString + = inChar ؛

}

}

}

يجب أن يقوم تطبيق NodeJS بتنفيذ واجهات لكل من AWS و Arduino. يمكن إنجازه لاحقًا في بضعة أسطر فقط من التعليمات البرمجية عند استخدام حزمة منفذ تسلسلية ممتازة:

var serialport = يتطلب ('serialport') ؛ المنفذ = منفذ تسلسلي جديد (PORT_COM_NAME ، {

معدل البث بالباود: SERIAL_BAUD_RATE

});

port.on ('open'، function () {

});

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 ({

معرف العميل: 'MiniCloudMonitor-' + (Math.floor ((Math.random () * 100000) + 1)) ،

المنطقة: AWS_REGION،

البروتوكول: 'wss' ،

المنفذ: 443 ،

التصحيح: صحيح

});

device.on ('connect'، function () {

device.subscribe (MQTT_TOPIC) ؛

});

device.on ('message' ، الوظيفة (الموضوع ، الحمولة) {

إذا (المنفذ && الحمولة && topic == 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 = function (event، Context، callback) {

var params = {

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

الحمولة: '{ "color \": / "' + event.colour + '\"}'،

qos: 0

};

mqtt.publish (معلمات ، دالة (خطأ ، بيانات) {

رد الاتصال (يخطئ) ؛

});

};

الخطوة 5: الخاتمة

لقد استمتعت حقًا بإدخال حدث افتراضي "ولد" في السحابة إلى العالم المادي. وباعتباره مشروعي الصغير للحيوانات الأليفة ، فقد كان مليئًا بالمرح. لأخذ هذا إلى المستوى التالي سأفكر فيه …

  • تحسين المتانة ومعالجة الاستثناءات
  • استكشاف طرق أفضل لدمج مقاييس سحابة AWS
  • تجربة مع المزيد من المؤشرات المادية مثل المقاييس والرسوم البيانية الشريطية ، …
  • لديك خيار الانتقال إلى منصات أخرى مثل Azure و Google و Heroku …
  • مراقبة الأحداث الخاصة بالتطبيقات لـ Jenkins و GitHub و …

أتمنى أن تكون قد استمتعت بقراءة هذا الدليل وربما حتى اكتشفت شيئًا جديدًا على طول الطريق. إذا كان بإمكانك التفكير في طريقة مختلفة / أفضل للقيام بالأشياء ، فيرجى مشاركتها في التعليقات أدناه. وبالطبع ، إذا رصدت أخطاء ، فسيكون إرسال تنبيه إليك موضع تقدير كبير. شكرا على وقتك.

موصى به: