استخدام ESP-01 مع MQTT: كيفية توصيل أجهزة إنترنت الأشياء والتحكم فيها

استخدام ESP-01 مع MQTT: كيفية توصيل أجهزة إنترنت الأشياء والتحكم فيها

لا يعني كونك على ميزانية بالضرورة أنه لا يمكنك تولي مشاريع DIY المتقدمة. إذا كنت تبحث عن وحدة WiFi صغيرة وبأسعار معقولة ومريحة لتوسيع نطاق مشاريع إنترنت الأشياء الخاصة بك ، فإن وحدة ESP-01 تعد خيارًا رائعًا. ومع ذلك ، قد يكون دمج مثل هذه الوحدة مع بروتوكول خفيف الوزن مثل MQTT أمرًا صعبًا ، خاصة إذا كنت جديدًا في تطوير إنترنت الأشياء.

يمكن أن تكون برمجة لوحة ESP-01 وحدها صعبة مقارنة بالوحدات النمطية الأخرى لسلسلة ESP8266. لكن دعنا ننتقل إلى أساسيات جميع إعدادات الأجهزة والبرامج التي تحتاجها لبدء استخدام الوحدة وكذلك كيفية إعداد MQTT بطريقة بسيطة وإجرائية.

التعرف على مجلس الإدارة

ESP8266 ESP-01 عبارة عن وحدة WiFi صغيرة ومدمجة تأتي مع شريحة ESP8266EX ، وهي عبارة عن شريحة متكاملة للغاية مصممة لتطبيقات إنترنت الأشياء.

استخدام ESP-01 مع MQTT: كيفية توصيل أجهزة إنترنت الأشياء والتحكم فيها

تتضمن الوحدة متحكمًا لاسلكيًا أحادي الشريحة مزودًا بمكدس بروتوكول TCP / IP وقادر على الاتصال بشبكة لاسلكية أو العمل كنقطة وصول. تتميز الوحدة النمطية ESP-01 أيضًا برأس 2x4 الذي يوفر الوصول إلى دبابيس GPIO والطاقة والأرض وواجهة UART.

إعداد الأجهزة

الوحدة ليست صديقة للوح على الإطلاق. للراحة ، يمكنك شراء لوحة تمديد مسبقة الصنع أو مجرد اتباع الطريقة القديمة - باستخدام أسلاك التوصيل ولوح التجارب.

يوجد مبرمج مخصص ، ESP8266 Serial Module Board ، يمكنه تسهيل تجربة البرمجة الخاصة بك. إذا كنت تفضل السير في هذا الطريق ، فإن DIYHOBI لديه برنامج تعليمي مفيد حول كيفية وميض برنامج في وحدة ESP-01 باستخدام مبرمج (بما في ذلك USB إلى TTL CH340G Converter Module Adapter).

ولكن ، لا يزال بإمكانك برمجة الوحدة باستخدام لوحة Arduino. انظر إلى مخطط الدائرة أدناه للرجوع إليها.

استخدام ESP-01 مع MQTT: كيفية توصيل أجهزة إنترنت الأشياء والتحكم فيها

على الرغم من أنه قد يبدو مغريًا ، إلا أننا لا نوصي عمومًا بتوصيل الوحدة مباشرة بدبوس 3.3 فولت في Arduino نظرًا لأنه يتطلب تيارًا أكثر مما يوفره الدبوس. بدلاً من ذلك ، قم بتوصيل Arduino 5V بمنظم جهد 3.3 فولت مثل LM1117 / LD117 ، ثم قم بتشغيل وحدة WiFi من المنظم.

لا تقم بتوصيل دبابيس VCC و CH_PD الخاصة بـ ESP بدبوس 5 فولت في Arduino. قد يؤدي توصيل الوحدة بطاقة 5 فولت إلى إتلافها.

جميع المكثفات 10 فائق التوهج والمقاوم هو المقاوم 1 كيلو .

متطلبات البرنامج

تُستخدم الوحدة النمطية ESP-01 بشكل شائع مع منصة Arduino. على هذا النحو ، يعد إعداد البرنامج أمرًا بسيطًا للغاية ، خاصة إذا كنت معتادًا على Arduino C. ومع ذلك ، إذا كنت أكثر دراية بـ Raspberry ، فهناك الكثير من مشاريع Raspberry Pi IoT التي يمكنك تجربتها.

هذه هي المتطلبات الأساسية:

  • وسيط أو خادم MQTT (مثل Mosquitto أو CloudMQTT).
  • اردوينو IDE مع مكتبة ESP8266 الأساسية.
  • مكتبة PubSubClient لاردوينو.

عليك أن تتذكر أن امتلاك خادم MQTT محليًا يمنحك المرونة في مشروعاتك.

تركيب المكتبات اللازمة

أولاً ، قم بتنزيل وتثبيت Arduino IDE على جهاز الكمبيوتر الخاص بك. بمجرد التثبيت ، افتح Arduino IDE ، وانتقل إلى ملف > تفضيلات .

استخدام ESP-01 مع MQTT: كيفية توصيل أجهزة إنترنت الأشياء والتحكم فيها

في حقل عناوين URL لمدير اللوحات الإضافية ، أدخل عنوان URL التالي:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

انقر فوق "موافق" لإغلاق نافذة التفضيلات.

استخدام ESP-01 مع MQTT: كيفية توصيل أجهزة إنترنت الأشياء والتحكم فيها

بعد ذلك ، انتقل إلى Tools > Board > Boards Manager .

ثم ابحث عن esp8266 وقم بتثبيت حزمة اللوحة esp8266 - وهذا يشمل جميع المكتبات الضرورية لوحدة ESP-01.

استخدام ESP-01 مع MQTT: كيفية توصيل أجهزة إنترنت الأشياء والتحكم فيها

لتثبيت مكتبة PubSubClient ، انتقل إلى Sketch > Include Library > Manage Libraries .

استخدام ESP-01 مع MQTT: كيفية توصيل أجهزة إنترنت الأشياء والتحكم فيها

ابحث عن PubSubClient وانقر على المكتبة لتثبيتها.

استخدام ESP-01 مع MQTT: كيفية توصيل أجهزة إنترنت الأشياء والتحكم فيها

بمجرد تثبيت جميع المكتبات اللازمة ، يمكنك البدء في برمجة وحدة ESP-01. هناك شيء واحد يجب ملاحظته ، وهو أنه يمكنك استخدام Wifi.h المضمّن في المكتبة ، أو تنزيل مكتبة ESPWifi.h وإدراجها في الرسم التخطيطي الخاص بك.

إنشاء اتصال بين ESP-01 و MQTT Broker

وسيط MQTT هو خادم يعمل كوسيط بين عملاء MQTT. يسمح للعملاء بإرسال واستقبال الرسائل من وإلى بعضهم البعض من خلال نموذج اشتراك للنشر.

لتوصيل وحدة ESP-01 الخاصة بك بوسيط MQTT ، ستحتاج إلى تحديد عنوان IP للوسيط ورقم المنفذ في التعليمات البرمجية الخاصة بك. ستحتاج أيضًا إلى تقديم معرف عميل فريد يحدد وحدة ESP-01 الخاصة بك إلى الوسيط.

أولاً ، قم بتضمين المكتبات الضرورية في الجزء العلوي من الرسم التخطيطي الخاص بك

#include ESP8266WiFi.h> #include PubSubClient.h>

بعد ذلك ، حدد تفاصيل اتصال WiFi و MQTT.

const char* ssid = "YOUR_SSID"; const char* password = "YOUR_PASSWORD"; const char* mqtt_server = "YOUR_MQTT_SERVER";

لا تنس استبدال العناصر النائبة بتفاصيل اتصال WiFi و MQTT الخاصة بك.

بعد ذلك ، قم بإنشاء عميل WiFi واتصل بشبكة WiFi المحلية الخاصة بك:

WiFiClient espClient; void setup_wifi() {   delay(10);   WiFi.begin(ssid, password);   while (WiFi.status() != WL_CONNECTED) {     delay(500);   } }

يجب استدعاء هذه الوظيفة في وظيفة الإعداد () للرسم التخطيطي الخاص بك.

بعد ذلك ، ستحتاج إلى إنشاء عميل MQTT والاتصال بوسيط MQTT الخاص بك:

PubSubClient client(espClient); void reconnect() {   while (!client.connected()) {     if (client.connect("ESP01", mqtt_user, mqtt_password)) {       // Subscribe to a topic       client.subscribe("test/topic");     } else {       delay(5000);     }   } }

بمجرد الاتصال بوسيط MQTT الخاص بك ، يمكنك البدء في النشر والاشتراك في الموضوعات.

نشر البيانات من ESP-01 إلى وسيط MQTT

الآن بعد أن نجحت في توصيل وحدة ESP01 الخاصة بك إلى وسيط MQTT ، فلنلقِ نظرة على كيفية نشر البيانات من ESP-01 إلى الوسيط.

لنشر البيانات ، استخدم الوظيفة client.publish () لنشر رسالة إلى موضوع inTopic .

client.publish("inTopic", "Hello from ESP-01");

سيؤدي هذا إلى نشر الرسالة "Hello from ESP-01" إلى موضوع inTopic .

يمكنك أيضًا نشر بيانات المستشعر من ESP-01 إلى الوسيط. على سبيل المثال ، إذا كان لديك مستشعر درجة حرارة متصل بـ ESP-01 ، فيمكنك نشر بيانات درجة الحرارة إلى الوسيط كما هو موضح أدناه.

float temperature = 25.5; String temperatureString = String(temperature); char temperatureChar[5]; temperatureString.toCharArray(temperatureChar, 5); client.publish("Temp", temperatureChar);

سيؤدي هذا إلى نشر بيانات درجة الحرارة إلى موضوع درجة الحرارة .

يمكن نشر البيانات في حلقة أو على فترات منتظمة ، حسب متطلبات مشروعك. تأكد من أنك لا تغمر الوسيط بالكثير من البيانات وأنك تقوم بالنشر في فترة زمنية معقولة.

الاشتراك في موضوعات MQTT وتلقي البيانات على ESP-01

للاشتراك في موضوع ، استخدم الوظيفة client.subscribe () . بالنسبة لحالتنا أدناه ، يشترك العميل في موضوع outTopic .

client.subscribe("outTopic");

بمجرد اشتراكك في موضوع ما ، يمكنك تلقي الرسائل المنشورة لهذا الموضوع باستخدام الوظيفة client.loop () في الوظيفة loop () في المخطط أدناه:

void loop() {   if (!client.connected()) {     reconnect();   }   client.loop(); }

سيؤدي هذا إلى البحث باستمرار عن الرسائل الجديدة وتنفيذ وظيفة رد الاتصال عند استلام رسالة جديدة.

للتعامل مع الرسائل المستلمة ، حدد وظيفة رد الاتصال مثل تلك الموضحة أدناه:

void callback(char* topic, byte* payload, unsigned int length) {   // Print the received message   Serial.print("Message received on topic: ");   Serial.print(topic);   Serial.print(". Message: ");   for (int i=0;i     Serial.print((char)payload[i]);   }   Serial.println(); }

سيتم استدعاء هذه الوظيفة عند تلقي رسالة جديدة حول الموضوع المشترك. ستقوم بطباعة الرسالة المستلمة إلى Serial Monitor.

استخدام مستويات QoS (جودة الخدمة) وميزات الأمان

من أهم التقنيات المستخدمة في معالجة الطلبات استخدام مستويات جودة الخدمة (QoS) لرسائل MQTT الخاصة بك. تحدد مستويات QoS كيفية تعامل الوسيط والمشتركين مع رسائلك. هناك ثلاثة مستويات من جودة الخدمة: 0 و 1 و 2.

يعتبر مستوى جودة الخدمة 0 هو الأقل موثوقية ، حيث يتم إرسال الرسائل مرة واحدة فقط ولا يمكن ضمان تسليمها إلى المشترك. يعتبر مستوى QoS 1 أكثر موثوقية ، حيث يتم إرسال الرسائل مرة واحدة على الأقل ويتم ضمان تسليمها إلى المشترك مرة واحدة على الأقل. QoS المستوى 2 هو الأكثر موثوقية ، حيث يتم إرسال الرسائل مرة واحدة بالضبط ويتم ضمان تسليمها إلى المشترك مرة واحدة بالضبط. تتماشى طريقة اتصال أجهزتك مع مشكلات الأمان الشائعة الأخرى في إنترنت الأشياء (IoT) والإصلاحات التي تريد البقاء على اطلاع بها.

لاستخدام مستويات QoS ، يمكنك تحديد المستوى المطلوب عند نشر الرسائل باستخدام الوظيفة client.publish () :

client.publish("topic", "Hello, world!", 1);

سيؤدي هذا إلى نشر الرسالة Hello، world! للموضوع بجودة الخدمة من المستوى 1 .

أسلوب آخر متقدم هو استخدام رسائل الوصية الأخيرة والوصية (LWT) . رسائل LWT هي الرسائل التي يرسلها الوسيط عند قطع اتصال العميل بشكل غير متوقع. نعتقد أن هذا مهم لاكتشاف الأجهزة غير المتصلة بالإنترنت أو لبدء الإجراءات عند قطع اتصال الجهاز.

لاستخدام رسائل LWT ، يمكنك تحديد رسالة LWT عند الاتصال بالوسيط باستخدام الوظيفة client.setWill () :

client.setWill("status", "offline", 1, true);

سيؤدي هذا إلى تعيين رسالة LWT إلى وضع عدم الاتصال في موضوع الحالة مع مستوى QoS 1 وتعيين علامة الاحتفاظ على true .

استعد لمشروع إنترنت الأشياء التالي الخاص بك

تعتبر وحدة ESP-01 حلاً ميسور التكلفة ومدمجًا لمشاريع إنترنت الأشياء ، ويمكن أن يؤدي استخدامها مع MQTT إلى نقل مشروعك إلى المستوى التالي. على الرغم من أن الإعداد الأولي قد يكون شاقًا ، إلا أن مزايا MQTT ، مثل الاتصال الخفيف وقابلية التوسع العالية ، تجعله استثمارًا مفيدًا.