في المقالة السابقة ، استعرضنا بإيجاز تنظيم ومعالجة بيانات إنترنت الأشياء باستخدام مشروع 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 سطرًا تلو الآخر مع الأوامر.
المنطق هو كما يلي:
- تهيئة الأجهزة
- اتصل بشبكة wifi
- قراءة قراءات المستشعر
- نحن نتواصل مع وسيط MQTT ونرسل قراءات إلى المواضيع ذات الصلة
- أوقف تشغيل 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/
وسيط MQTT
بصفتنا وسيط MQTT ، نستخدم Eclipse Mosquitto. لتثبيت ، على سبيل المثال ، في دبيان ، تحتاج إلى حزمتين: mosquitto و mosquitto_clients.
في /etc/mosquitto/mosquitto.conf تحتاج إلى الكتابة
require_certificate false
بعد ذلك ، قم بتشغيل جهازنا ، باستخدام الأداة المساعدة mosquitto_sub ، والاشتراك في مواضيع الجهاز ، ومراقبة الطقس)
root@baikal:~
ذكر بايكال هنا لسبب ما. ما زلنا متواجدين جغرافيًا بالقرب من بايكال ، لذلك بالنسبة لمحطة القاعدة للجهاز ، لم تكن هناك خيارات أخرى غير استخدام BFK 3.1 على قلب بايكال T-1 :)
في المقالات اللاحقة ، سننتقل إلى نقل البيانات المستلمة من IIoT إلى نظام التحليلات والتصور ونتحدث عن قوائم الانتظار. وعن بايكال بالطبع :)