جدول المحتويات:
- الخطوة 1: قم بتوصيل مستشعراتك
- الخطوة 2: الكود
- الخطوة 3: Ibm Cloud
- الخطوة 4: Node-RED
- الخطوة 5: إعداد Node-RED: Light
- الخطوة 6: إعداد Node-RED: درجة الحرارة
- الخطوة 7: إعداد Node-RED: الرطوبة
- الخطوة 8: إعداد Node-RED: الرطوبة
- الخطوة 9: لقد انتهيت
فيديو: PInt @ t10n: نظام مراقبة المصنع الذكي: 9 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:39
PI @ nt @ t10n
تم إنشاء هذا المشروع كاختبار لـ ibm iot cloud. نحن نستخدم esp-8266 لإرسال واستقبال البيانات من وإلى سحابة IBM. يحدث الاتصال بين esp و ibm cloud من خلال MQTT.
للتعامل مع جميع البيانات ولتقديم المستخدم بواجهة مستخدم نستخدم node-red. انها ودية للغاية للمبتدئين.
للبدء ، تحتاج إلى:
- Esp-8266
- جهاز استشعار درجة الحرارة / الرطوبة dht 11/22
- الصمام الثنائي الحساس للضوء (قياس الضوء)
- صفارة
- مستشعر رطوبة الأرض
- حساب سحابة IBM
الخطوة 1: قم بتوصيل مستشعراتك
كما ذكرنا من قبل ، سنستخدم esp8266 لقراءة بيانات المستشعر وإرسالها. في هذا البرنامج التعليمي ، سنفترض أنك تعرف كيفية توصيل مستشعراتك بوحدة التحكم الصغيرة الخاصة بك. أنت أيضًا بحاجة بالفعل إلى معرفة كيفية تحميل الكود إلى esp8266.
يحتوي نموذج esp الخاص بنا على منفذ تناظري واحد فقط ، لذلك اخترنا تلقي المعلومات التناظرية من مستشعر الضوء لدينا لأنه بعد ذلك يمكننا مراقبة مقدار الضوء الذي يحصل عليه المصنع.
جميع أجهزة الاستشعار الأخرى متصلة رقميًا. يرسل مستشعر DHT11 البيانات رقميًا ونستخدم مكتبة dht لتفسير بيانات المستشعرات.
أعلاه يمكنك العثور على مخطط دائرة لأجهزة الاستشعار التي استخدمناها. لكن يرجى أن تضع في اعتبارك أن المستشعرات التي استخدمناها غالبًا ما تأتي مع وحدة نمطية بحيث يمكنك توصيلها بسهولة بوحدة التحكم الصغيرة الخاصة بك دون كل المقاومات الإضافية التي قمنا بتضمينها في الرسم التخطيطي.
الخطوة 2: الكود
هذا هو رسم اردوينو الذي استخدمناه. يمكنك التعرف على كيفية عمل الكود إذا قرأت التعليقات.
#include ArduinoJson.h # include DHT_U.h #include DHT.h #include ESP8266WiFi.h #include ESP8266WiFiMulti.h #include PubSubClient.h
#define STASSID "ucll-projectweek-IoT" #define STAPSK "Foo4aiHa" #define DHTPin 5 #define moistPin 4 #define DHTType DHT11 DHT dht (DHTPin، DHTType)؛ ESP8266WiFiMulti WiFi متعدد ؛ درجة حرارة تعويم = 0 ؛ الرطوبة العائمة = 0 ؛ رطوبة منطقية = خطأ ؛ ضوء int = 0 ؛ const char * ssid = STASSID ؛ const char * password = STAPSK ؛ const char * mqtt_server = "cmfwqk.messaging.internetofthings.ibmcloud.com" ؛ WiFiClient espClient ؛ عميل PubSubClient (espClient) ؛ طويل الأمد Msg = 0 ؛ char msg [50]؛ قيمة int = 0 ؛ #define MQTT_HOST "cmfwqk.messaging.internetofthings.ibmcloud.com" #define MQTT_PORT 1883 #define MQTT_DEVICEID "d: cmfwqk: ESP8266: ESP" #define MQTT_USER "use-token-authT #define" MQTT_USER " iot-2 / evt / status / fmt / json "#define MQTT_TOPIC_DISPLAY" iot-2 / cmd / update / fmt / json "# include" stepses.h "// ملاحظات في اللحن: // note durations: 4 = ربع ملاحظة ، 8 = النوتة الثامنة ، إلخ: int shortTone = 80 ؛ int longTone = 200 ؛ int standardDelay = 50 ؛ int delayBetweenBars = 50 ؛ setup_wifi باطل () {delay (10) ؛ // نبدأ بالاتصال بشبكة WiFi Serial.println () ؛ Serial.print ("الاتصال بـ") ؛ Serial.println (ssid) ؛ WiFi.begin (SSID ، كلمة المرور) ؛ while (WiFi.status ()! = WL_CONNECTED) {delay (500) ؛ Serial.print (".") ؛ } Serial.println ("") ؛ Serial.println ("متصل بشبكة WiFi") ؛ Serial.println ("عنوان IP:") ؛ Serial.println (WiFi.localIP ()) ؛ } رد نداء باطل (char * topic، byte * payload، unsigned int length) {Serial.print ("الرسالة وصلت [")؛ Serial.print (الموضوع) ؛ Serial.print ("]") ؛ لـ (int i = 0؛ i <length؛ i ++) {Serial.print ((char) payload ) ؛ } Serial.println () ، StaticJsonDocument jsonBuffer ؛ إلغاء تسلسل Json (jsonBuffer ، الحمولة) ؛ JsonObject root = jsonBuffer.as () ، if (root ["song"] == "darude") {darude ()؛ } if (root ["song"] == "starwars") {starwars ()؛ } if (root ["song"] == "jacques") {Serial.println ("jakakakakkakaka") ؛ جاك () ؛ }} إعادة الاتصال () {// Loop حتى نعيد الاتصال أثناء (! client.connected ()) {Serial.print ("Attempting MQTT connection…") ؛ // حاول الاتصال إذا (client.connect (MQTT_DEVICEID، MQTT_USER، MQTT_TOKEN)) {Serial.println ("متصل") ؛ client.subscribe (MQTT_TOPIC_DISPLAY) ، } else {Serial.print ("failure، rc =")؛ Serial.print (client.state ()) ؛ Serial.println ("حاول مرة أخرى خلال 5 ثوانٍ") ؛ // انتظر 5 ثوانٍ قبل إعادة محاولة التأخير (5000) ؛ }}} void setup () {Serial.begin (9600)؛ pinMode (الرطوبة ، الإدخال) ؛ dht.begin () ، pinMode (0 ، الإخراج) ؛ setup_wifi () ، client.setServer (mqtt_server ، MQTT_PORT) ، client.setCallback (رد الاتصال) ؛ تأخير (20) ؛ } حلقة باطلة () {إذا (! client.connected ()) {إعادة الاتصال ()؛ } client.loop () ؛ رطوبة = ديجيتال ريد (رطوبة بين) ؛ ضوء = analogRead (A0) ؛ temp = dht.readTemperature () ؛ الرطوبة = dht.readHumidity () ؛ Serial.println ("درجة الحرارة =" + سلسلة (درجة الحرارة ، 1) + "\ n الرطوبة =" + سلسلة (الرطوبة ، 1) + "\ n الرطوبة:" + سلسلة (رطوبة) + "\ n ضوء:" + سلسلة (ضوء)) ؛ حمولة السلسلة = "{" ts / ": {" t / ":" + سلسلة (درجة الحرارة ، 1) + "، \" h / ":" + سلسلة (الرطوبة ، 1) + "} ، \" مللي ثانية / ": {" m / ":" + سلسلة (رطوبة) + "}، \" ls / ": {" l / ":" + سلسلة (ضوء) + "}}"؛ Serial.println (الحمولة) ؛ if (client.publish (MQTT_TOPIC، (char *) payload.c_str ())) {Serial.println ("publish ok") ؛ } else {Serial.println ("فشل النشر")؛ } تأخير (2000)؛ } void darude () {tone (0، NOTE_B3، shortTone)؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، longTone) ؛ تأخير (لونغتون) ؛ noTone (0) ، تأخير (delayBetweenBars) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، longTone) ؛ تأخير (لونغتون) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_E4، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_E4، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_E4، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_E4، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_E4، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_E4، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_E4، longTone)؛ تأخير (لونغتون) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_D4، ShortTone)؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_D4، ShortTone)؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_D4، ShortTone)؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_D4، ShortTone)؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_D4، ShortTone)؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_D4، ShortTone)؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_D4، longTone)؛ تأخير (لونغتون) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_A3، longTone)؛ تأخير (لونغتون) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، longTone)؛ تأخير (لونغتون) ؛ noTone (0) ، تأخير (delayBetweenBars) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، longTone) ؛ تأخير (لونغتون) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_E4، longTone) ؛ تأخير (لونغتون) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، longTone) ؛ تأخير (لونغتون) ؛ noTone (0) ، تأخير (delayBetweenBars) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0 ، NOTE_B3 ، نغمة قصيرة) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، shortTone) ؛ تأخير (نغمة قصيرة) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_B3، longTone) ؛ تأخير (لونغتون) ؛ noTone (0) ، تأخير (standardDelay) ؛ نغمة (0، NOTE_E4، longTone) ؛ تأخير (لونغتون) ؛ noTone (0) ، تأخير (standardDelay) ؛ } starwars () باطل {beep (NOTE_A4، 500)؛ تنبيه (NOTE_A4، 500) ؛ تنبيه (NOTE_A4، 500) ؛ تنبيه (NOTE_F4، 350) ؛ تنبيه (NOTE_C5، 150) ؛ تنبيه (NOTE_A4، 500) ؛ تنبيه (NOTE_F4، 350) ؛ تنبيه (NOTE_C5، 150) ؛ تنبيه (NOTE_A4، 650) ؛ تأخير (500) ؛ تنبيه (NOTE_E5، 500) ؛ تنبيه (NOTE_E5، 500) ؛ تنبيه (NOTE_E5، 500) ؛ تنبيه (NOTE_F5، 350) ؛ تنبيه (NOTE_C5، 150) ؛ تنبيه (NOTE_GS4، 500) ؛ تنبيه (NOTE_F4، 350) ؛ تنبيه (NOTE_C5، 150) ؛ تنبيه (NOTE_A4، 650) ؛ } نغمة باطلة (ملاحظة ، مدة int) {// تشغيل النغمة على نغمة buzzerPin (0 ، ملاحظة ، المدة) ؛ التأخير (المدة) ؛ noTone (0) ، تأخير (standardDelay) ؛ } void heartOfCourage () {} void jacques () {beep (NOTE_C4، 500)؛ تنبيه (NOTE_D4، 500) ؛ تنبيه (NOTE_E4، 500) ؛ تنبيه (NOTE_C4، 500) ؛ تنبيه (NOTE_C4، 500) ؛ تنبيه (NOTE_D4، 500) ؛ تنبيه (NOTE_E4، 500) ؛ تنبيه (NOTE_C4، 500) ؛ تنبيه (NOTE_E4، 500) ؛ تنبيه (NOTE_F4، 500) ؛ تنبيه (NOTE_G4، 500) ؛ تنبيه (NOTE_E4، 500) ؛ تنبيه (NOTE_F4، 500) ؛ تنبيه (NOTE_G4، 500) ؛ تنبيه (NOTE_G4، 500) ؛ تنبيه (NOTE_A4، 500) ؛ تنبيه (NOTE_G4، 500) ؛ تنبيه (NOTE_F4، 500) ؛ تنبيه (NOTE_E4، 500) ؛ تنبيه (NOTE_C4، 500) ؛ تنبيه (NOTE_G4، 500) ؛ تنبيه (NOTE_A4، 500) ؛ تنبيه (NOTE_G4، 500) ؛ تنبيه (NOTE_F4، 500) ؛ تنبيه (NOTE_E4، 500) ؛ تنبيه (NOTE_C4، 500) ؛ تنبيه (NOTE_C4، 500) ؛ تنبيه (NOTE_G4، 500) ؛ تنبيه (NOTE_C4، 500) ؛ تنبيه (NOTE_C4، 500) ؛ تنبيه (NOTE_G4، 500) ؛ تنبيه (NOTE_C4، 500) ؛ }
الخطوة 3: Ibm Cloud
تحتاج إلى إعداد مثيل IBM-cloud. يمكنك العثور على معلومات حول هذا عبر هذا الرابط: جيثب.
الخطوة 4: Node-RED
نحن نستخدم node-red للتعامل مع منطق الأعمال العام لدينا وتصور هذه البيانات في واجهة مستخدم سهلة الاستخدام.
الخطوة 5: إعداد Node-RED: Light
قم باستيراد الكود التالي إلى مشروعك.
[{"id": "deb0d57.1c46528" ، "type": "tab" ، "label": "Light" ، "معطل": false ، "info": ""} ، {"id": "8a0fcaac. 4e54 "،" type ":" ibmiot in "،" z ":" deb0d57.1c46528 "،" المصادقة ":" boundService "،" apiKey ":" "،" inputType ":" evt "،" logicalInterface ":" "،" ruleId ":" "،" deviceId ":" ESP "،" applicationId ":" "،" deviceType ":" ESP8266 "،" eventType ":" + "،" commandType ":" "،" format ": "json"، "name": "Get data from ESP"، "service": "Register"، "allDevices": false، "allApplications": ""، "allDeviceTypes": false، "allLogicalInterfaces": ""، "allEvents": true، "allCommands": ""، "allFormats": ""، "qos": 0، "x": 120، "y": 62، "wires":
الخطوة 6: إعداد Node-RED: درجة الحرارة
قم باستيراد الكود التالي إلى مشروعك.
[{"id": "fbad3799.f0e0e"، "type": "tab"، "label": "درجة الحرارة"، "معطل": false، "info": ""}، {"id": "b8618eb9. 1c9288 "،" type ":" ibmiot in "،" z ":" fbad3799.f0e0e "،" المصادقة ":" boundService "،" apiKey ":" "،" inputType ":" evt "،" logicalInterface ":" "،" ruleId ":" "،" deviceId ":" ESP "،" applicationId ":" "،" deviceType ":" ESP8266 "،" eventType ":" + "،" commandType ":" "،" format ": "json"، "name": "Get data from ESP"، "service": "Register"، "allDevices": false، "allApplications": ""، "allDeviceTypes": false، "allLogicalInterfaces": ""، "allEvents": true، "allCommands": ""، "allFormats": ""، "qos": 0، "x": 145.5، "y": 49، "wires":
الخطوة 7: إعداد Node-RED: الرطوبة
قم باستيراد الكود التالي إلى مشروعك.
[{"id": "144cd53b.c00473"، "type": "tab"، "label": "الرطوبة"، "معطل": false، "info": ""}، {"id": "d958f58b. 2678e "،" type ":" ibmiot in "،" z ":" 144cd53b.c00473 "،" المصادقة ":" boundService "،" apiKey ":" "،" inputType ":" evt "،" logicalInterface ":" "،" ruleId ":" "،" deviceId ":" ESP "،" applicationId ":" "،" deviceType ":" ESP8266 "،" eventType ":" + "،" commandType ":" "،" format ": "json"، "name": "Get data from ESP"، "service": "Register"، "allDevices": false، "allApplications": ""، "allDeviceTypes": false، "allLogicalInterfaces": ""، "allEvents": true، "allCommands": ""، "allFormats": ""، "qos": 0، "x": 142، "y": 87، "wires":
الخطوة 8: إعداد Node-RED: الرطوبة
قم باستيراد الكود التالي إلى مشروعك.
[{"id": "4ee73536.ec6fc4"، "type": "tab"، "label": "Moisture"، "تعطيل": false، "info": ""}، {"id": "a6daac3e. 2d5268 "،" type ":" ibmiot out "،" z ":" 4ee73536.ec6fc4 "،" المصادقة ":" boundService "،" apiKey ":" "،" outputType ":" cmd "،" deviceId ":" ESP "،" deviceType ":" ESP8266 "،" eventCommandType ":" update "،" format ":" json "،" data ":" msg "،" qos ": 0 ،" name ":" Send command to ESP "،" service ":" Register "،" x ": 804.1944580078125،" y ": 383.0000305175781،" wires ": }، {" id ":" 4134fdb7.18e9b4 "،" type ":" ibmiot in "، "z": "4ee73536.ec6fc4" ، "المصادقة": "boundService" ، "apiKey": "" ، "inputType": "evt" ، "logicalInterface": "" ، "ruleId": "" ، "deviceId": "ESP"، "applicationId": ""، "deviceType": "ESP8266"، "eventType": "update"، "commandType": ""، "format": "json"، "name": "Get data من ESP "،" service ":" مسجلة "،" allDevices ": false،" allApplications ":" "،" allDeviceTypes ": false،" allLogicalInterfaces ":" "،" allEvents ": true،" allCommands ":" " ، "allFormats": false، "qos": 0، "x": 115، "y": 76، "wires":
الخطوة 9: لقد انتهيت
تهانينا! لديك الآن نظام مراقبة مصنع عامل.
إذا كان لديك أي سؤال ، فلا تتردد في الاتصال بنا!