كيفية بناء بنية IIoT بيديك. الجزء الثاني: "الأشياء"

في المقالة السابقة ، استعرضنا بإيجاز تنظيم ومعالجة بيانات إنترنت الأشياء باستخدام مشروع Apache NiFi. من خلال هذه المقالة ، نفتح سلسلة نتحدث فيها بالتفصيل عن كل مرحلة ، بدءًا من الأجهزة نفسها إلى تحليلات النظام الأساسي DataLake ، والتعلم الآلي ، والتنبؤ الشاذ ، وما إلى ذلك.



لنبدأ الآن من المستوى الأول ، مباشرة من "الأشياء" ، الحرف T من الاختصار IoT. من الجهاز نفسه ، تنظيم قناة الاتصال واستخدام بروتوكول MQTT. كان اتجاه إنترنت الأشياء موجودًا منذ عدة سنوات ، ولكن في الغالب فكرة عنه كمصباح كهربائي ومقبس يتم تشغيله من الهاتف. ولكن في الإنتاج والتعدين ، وفي صناعات أخرى مختلفة لعقود ، تم استخدام مجموعة متنوعة من أجهزة الاستشعار ، والتي يتم جمع القيم منها في إنتاج SCADA . ما عليك سوى توصيل دفق البيانات بالإنترنت ، ونحصل على نفس إنترنت الأشياء ، وبشكل أكثر دقة IIoT - الإنترنت الصناعي للأشياء.


لماذا كل هذا ضروري إذا كانت SCADA كل هذه العقود تدير دورة الإنتاج بنجاح؟


هناك عدة أسباب:


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

ونتيجة لذلك ، لم تعد أجهزة الاستشعار في الإنتاج ترسل القيم إلى SCADA فقط. نحتاج إلى بنية برمجية تسمح لنا ببناء سلسلة من المستشعر النهائي على أي جهاز إلى سحابة الحوسبة ، حيث ، بناءً على تاريخ الجهاز ، باستخدام النموذج المدرب ، سيتلقى موظفو الخدمة رسالة "فرصة 37٪ لفشل الآلية ، تحتاج إلى إرسال مهندس ".



حسنًا الآن نعود إلى الأشياء! عادة ، لإثبات هذه الأنظمة ، يتم استخدام مجموعات مفتوحة من مؤشرات الاستشعار التاريخية لصناعة ما. ولكن للأسف ، في هذا الخيار ، "اللمس" لا يعمل النظام. لا ، لن نصل إلى المصنع ، ولكننا سنفعل "شيءنا البسيط عبر الإنترنت".


يرتبط مجال نشاطنا بالبنية التحتية للخوادم ، ولكن لا يزال لدينا بعض المهارات الإلكترونية ، لذا فإن "الشيء" سيكون محلي الصنع.
سنختار أبسط خيار للمراقبة - مستشعر المناخ ، وسوف نجمع بيانات عن درجة الحرارة والرطوبة والضغط.


قاعدة المكون


نأخذ BMP280 كمستشعر .


شيء معقد للغاية ، تم تصميمه ليس فقط لبيانات الطقس ، ولكن أيضًا ، بفضل مقياس الضغط الحساس ، للمساعدة على نظام تحديد المواقع العالمي (GPS) ، للملاحة في المبنى (لتحديد الأرضية) ، للألعاب لمساعدة مقياس التسارع. سوف نستخدمها فقط لبيانات الطقس.


خذ كوحدة:


بصفتنا وحدة التحكم وقناة الاتصال ، سنأخذ ، على الأرجح بالفعل ، عبادة ، esp8266 ( https://en.wikipedia.org/wiki/ESP8266 )


في حالتنا ، وحدة ESP-07:


مصدر الطاقة هو بطارية 9V Krona. نظرًا لأن جميع الأجهزة تعمل من 3.3 فولت ، يلزم وجود محول تنازلي. يد تمد يدها لوضع LD1117 الخطي المفضل لدى الجميع:



لكن كل ما يخفض المحول الخطي هو أنه ببساطة يتبدد إلى حرارة. يبلغ تيار الذروة esp8622 حوالي 0.4A ، مما يعني مع محول خطي (9-3.3) * 0.4 = 2.28W إلى أي مكان. سوف تذوب أيضا.


لذلك ، تم تجميع محول باك نبضي على LM2576 :



3 أمبيرات كافية بالتأكيد للجميع (في الواقع ، ما كان من قاعدة المكونات تم لحامه).


مخطط


كما تم استخدام CAD ، النسر ، كان المخطط على النحو التالي:


لتشغيل esp8622 ، تحتاج إلى سحب RESET و CH_PD إلى علامة الزائد (بما في ذلك الوحدة) ، GPIO15 إلى الطرح. عندما يتم سحب GPIO0 إلى الأرض ، تنتقل الوحدة إلى وضع البرمجة ، لذلك يوجد رابط.


يتم استخدام GPIO02 و GPIO15 كخطوط SDA / SDL لناقل I2C لتوصيل BMP280 ، وكذلك أي أجهزة أخرى على الناقل (موصل دبوس JP5) ، على سبيل المثال ، شاشة ، لتصحيح الأخطاء في الحال.
يستخدم JP1 للاتصال عبر UART (عبر محول UART-USB) بجهاز كمبيوتر لبرمجة الوحدة وتصحيحها.


يتم تجميع مقسم الجهد ل ADC على المقاومات R6 و R5 ، بحيث يمكنك مراقبة شحن البطارية.


الرسوم


الأسلاك على النحو التالي:



على الأرجح ، في أفضل تقاليد دوائر الهوايات ، تنتهك جميع القواعد الممكنة ، ولكن الأهم أنها تعمل :)


الجهاز نفسه تحول إلى هذا:



اللوح مصنوع بتقنية الكي بالليزر (أحد آلاف الأمثلة: http://cxem.net/master/45.php ).


برمجة الجهاز


لبدء سريع لـ esp8622 ، أخذوا البرامج الثابتة NodeMCU .


NodeMCU هو مترجم لوا لـ esp8622 ومجموعة من المكتبات للأجهزة وأجهزة الاستشعار والشاشات المختلفة ، إلخ.


وميض الجهاز ، تحتاج أولاً إلى الحصول على هذا البرنامج الثابت. تقدم الوثائق العديد من الخيارات ، ولكن أبسطها هي خدمة nodemcu-build.com ، والتي تتيح لك ، ببساطة عن طريق تحديد الوحدات اللازمة ، الحصول على برامج ثابتة جاهزة للبريد.



بالنسبة لجهازنا ، تحتاج بالتأكيد إلى تحديد MQTT ، I2C (لأن المستشعر موجود في هذا الناقل) ، حسنًا ، مستشعر BME280 نفسه (لدينا BMP280 ، لكن المكتبة عالمية) ، بالإضافة إلى ADC لمراقبة البطارية. بعد تجميع البرامج الثابتة ، سترسلها الخدمة إلى البريد المحدد.


بعد ذلك ، تحتاج إلى إغلاق GPIO0 على الأرض ووضع الوحدة في وضع البرمجة (jumper JP2) ، وتوصيل محول USB-UART وتشويه الطاقة.


يتم تنزيل البرامج الثابتة باستخدام NodeMCU PyFlasher . تحتاج إلى تحديد المنفذ التسلسلي المناسب ، والبرامج الثابتة نفسها ، وبالنسبة لوحدة ESP-07 - Quad i / O ، لن تعمل الأوضاع الأخرى.



القليل من الصبر ، حتى يكتمل البرنامج الثابت ، ثم قم بإزالة وصلة المرور JP2 ، وتشويه الطاقة وفي النهاية يكون الجهاز جاهزًا لرمز المستخدم.


كود


إعدادات UART للاتصال - 115200 8N1 ، من خلال الاتصال ببعض الوحدات الطرفية للمنفذ التسلسلي (على سبيل المثال ، terminalbpp ) ، يمكنك إدخال أوامر lua مباشرة ، مثل REPL.



لكننا ما زلنا مهتمين ببرامج ثابتة أقل مؤقتة ، بحيث تظل بعد إعادة التشغيل :)
عند البدء ، يبدأ NodeMCU في تنفيذ ملف init.lua (إن وجد) من بطاقة الفلاش. هنا نكتبها.


بالنسبة للعينة ، نأخذ مثالاً من الوثائق:



للتنزيل ، استخدمنا الأداة البسيطة Asmodat ESP LUA Loader . تقوم ببساطة بدفع file.open في النهاية الطرفية وتكتب Lua سطرًا تلو الآخر مع الأوامر.


المنطق هو كما يلي:


  1. تهيئة الأجهزة
  2. اتصل بشبكة wifi
  3. قراءة قراءات المستشعر
  4. نحن نتواصل مع وسيط MQTT ونرسل قراءات إلى المواضيع ذات الصلة
  5. أوقف تشغيل WiFi ، واستغرق في النوم حتى القياس التالي

لقد وضعنا نص Lua ، والدائرة ، وأسلاك اللوحة ، من حيث المبدأ ، كل شيء شفاف تمامًا هناك.


الأماكن التي أود ملاحظتها:


يتطلب إدخال ADC esp8266 جهدًا في النطاق من 0 إلى 1 فولت ويعطي الإخراج رقمًا مناظرًا من 0 إلى 1024. بالنسبة للمقاومات 39 كيلو أوم و 470 كيلو أوم - يتم الحصول على معامل التحويل حوالي 13. وهذا هو ، من أجل تقدير (ليس قياسًا دقيقًا) للجهد على البطارية - تحتاج إلى مضاعفة القيمة التي تم الحصول عليها في 13 وقسمة على 1024.


نظرًا لأن مستشعر BMP280 عالمي ، فإنه يحتوي على العديد من خيارات التكوين لتطبيقات مختلفة. بالنسبة لـ NodeMCU ، تبدو تهيئة المستشعر لقياسات المناخ على النحو التالي (رقم سحري واحد):


bme280.setup(1, 1, 1, 1, 7, 0) -- weather mode 

اقرأ المزيد عن هذه الأرقام في الوثائق . حسنًا ، في لوحة البيانات على BMP280 أعلاه.


لم يكن من الممكن الدخول في وضع النوم العميق ، لسبب ما لن تستيقظ الوحدة.


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


ولكن في حالتنا ، ننتظر بضع ثوانٍ فقط للحصول على مهلة ، ثم نوقف تشغيل WiFi.


أيضًا ، دعم TLS ، على الرغم من الإعلان عنه ، لكنه فشل في الحصول عليه ، يتم إرسال البيانات غير مشفرة.


إرسال البيانات


مرة واحدة في الدقيقة ، تتصل الوحدة بشبكة WiFi وترسل قراءات المستشعر إلى وسيط MQTT.
المواضيع في MQTT بالتنسيق التالي:


 /device_location/device_name/sensor 

يتيح لك هذا الاشتراك في تدفقات البيانات من أجهزة الاستشعار حسب الموقع ومستشعرات محددة ، على سبيل المثال ، درجة الحرارة خارج النافذة:


 /outdoor/#/temperature 

وسيط MQTT


بصفتنا وسيط MQTT ، نستخدم Eclipse Mosquitto. لتثبيت ، على سبيل المثال ، في دبيان ، تحتاج إلى حزمتين: mosquitto و mosquitto_clients.


في /etc/mosquitto/mosquitto.conf تحتاج إلى الكتابة


 require_certificate false #  tls allow_anonymous true #  :) 

بعد ذلك ، قم بتشغيل جهازنا ، باستخدام الأداة المساعدة mosquitto_sub ، والاشتراك في مواضيع الجهاز ، ومراقبة الطقس)


 root@baikal:~# mosquitto_sub -v -t "/outdoor/#" /outdoor/iottest/temperature 30.07 /outdoor/iottest/pressure 713 /outdoor/iottest/humidity 38.765 /outdoor/iottest/voltage 439 /outdoor/iottest/temperature 30.09 /outdoor/iottest/pressure 713 /outdoor/iottest/humidity 38.445 /outdoor/iottest/voltage 451 /outdoor/iottest/temperature 29.93 /outdoor/iottest/pressure 713 /outdoor/iottest/humidity 38.400 /outdoor/iottest/voltage 452 

ذكر بايكال هنا لسبب ما. ما زلنا متواجدين جغرافيًا بالقرب من بايكال ، لذلك بالنسبة لمحطة القاعدة للجهاز ، لم تكن هناك خيارات أخرى غير استخدام BFK 3.1 على قلب بايكال T-1 :)


في المقالات اللاحقة ، سننتقل إلى نقل البيانات المستلمة من IIoT إلى نظام التحليلات والتصور ونتحدث عن قوائم الانتظار. وعن بايكال بالطبع :)

Source: https://habr.com/ru/post/ar416291/


All Articles