- ما هو بروتوكول MQTT؟
- كيف يعمل MQTT؟
- وسيط Eclipse Mosquitto
- المكونات مطلوبة
- دائرة اختبار Eclipse MQTT - تخطيطية
- برمجة ESP8266 للتواصل مع الوسيط
- اختبار MQTT مع ESP8266 باستخدام Arduino
على مدى السنوات القليلة الماضية ، أصبحت أجهزة إنترنت الأشياء (إنترنت الأشياء) جزءًا لا يمكن تمييزه من حياتنا اليومية. من المنازل الذكية والمصابيح الذكية إلى الأجهزة الذكية ؛ يدمج المبدعون والمطورون هذه التقنية لإنشاء شبكة من الأجهزة المتصلة التي تجعل حياتنا اليومية أكثر إثارة. كل هذا أصبح ممكنا بسبب سهولة الاتصال. هناك العديد من الطرق الممكنة للتواصل بين الأجهزة ، ولكن في المنتجات التجارية ومنتجات الهوايات ، هناك بروتوكول واحد شائع الاستخدام هو النقل عن بُعد لخدمة وضع الرسائل في قائمة انتظار (MQTT). لقد أنشأنا سابقًا راديو FM يتم التحكم فيه بالصوت باستخدام Arduino و Google Assistant الذي يستخدم MQTT للتواصل مع لوحة NodeMCU. تحقق من ذلك إذا كان هذا يبدو مثيرا للاهتمام بالنسبة لك.
في هذا المشروع ، سنستخدم وسيط Eclipse MQTT مجاني وشائع ونتعلم كيفية توصيل جهاز إنترنت الأشياء (في حالتنا ، هو وحدة NodeMCU) إلى وسيط MQTT ونقل البيانات بين وسيط MQTT و NodeMCU.
ما هو بروتوكول MQTT؟
قبل أن نشرع إلى أبعد من ذلك، فإنه من الأفضل أن يكون لديك فكرة واضحة عن MQTT (الرسائل في قائمة الانتظار القياس النقل) البروتوكول. إنه بروتوكول مراسلة خفيف الوزن يستخدم طريقة النشر / الاشتراك ويترجم الرسائل بين أجهزة متعددة. باستخدام بروتوكول MQTT ، يمكننا أيضًا إرسال / استقبال البيانات والتحكم في أجهزة الإخراج المختلفة ، مثل قراءة بيانات المستشعر ، وما إلى ذلك. تم تطويره على رأس TCP ، وهذا هو سبب كونه أسرع من البروتوكولات المماثلة مثل HTTP. بخلاف ذلك ، فإنه يتمتع بالعديد من المزايا الأخرى مقارنة بالبروتوكولات الأخرى مثل وزنه الخفيف جدًا ، لذا فهو لا يستهلك ذاكرة زائدة ، ويمكنه العمل بنطاق ترددي أقل للشبكة ، علاوة على ذلك ، يحتوي على بروتوكول أمان قوي يحمل في ثناياه عوامل. هذه الميزات تجعله مناسبًا للعديد من التطبيقات.
كيف يعمل MQTT؟
لفهم عمل بروتوكول MQTT ، نحتاج فقط إلى فهم ثلاثة أشياء أساسية ؛ الرسم البياني أعلاه يوضح ذلك. أيضًا ، شرحناها أدناه في المقالة.
عميل MQTT:
على العميل MQTT هو أي جهاز (يمكن أن يكون متحكم أو الخادم) الذي يمتد وظائف MQTT ويتصل مع خادم مركزي، والذي يعرف باسم " وسيط ". يتعامل الوسيط مع اتصال البيانات بين العملاء المتصلين.
ناشر MQTT:
عندما يريد العميل إرسال أي معلومات ، يُعرف العميل باسم "الناشر". سيقوم الناشر بنشر المعلومات حول موضوع معين. " الموضوع " هو مسار يمكننا من خلاله نشر / الاشتراك في الرسائل. ثم يرسل الوسيط المعلومات التي ينشرها المستخدم إلى العملاء (المعروفين أيضًا باسم المشترك) الذين اشتركوا في هذا الموضوع المحدد.
مشترك MQTT:
و MQTT المشترك تؤيد الموضوعات على MQTT وسيط لقراءة الرسائل المرسلة من قبل وسيط.
وسيط Eclipse Mosquitto
Eclipse Mosquitto هو وسيط MQTT مفتوح المصدر ، وهو خفيف الوزن ومناسب للاستخدام على أجهزة إنترنت الأشياء للاتصال. على بروتوكول MQTT يوفر طريقة خفيفة الوزن لنقل المعلومات باستخدام نشر / الاشتراك نموذج. إذا كنت ترغب في معرفة المزيد حول الموضوع ، يمكنك زيارة الموقع الرسمي للبعوض.
إعداد وسيط Eclipse Mosquitto:
من أجل إقامة اتصال مع الوسيط ، نحتاج إلى إعداده أولاً. في هذا المشروع، يتم استخدام الروبوت في نشر و الاشتراك للمعلومات مع الوسيط. ستمنحك الخطوات التالية فكرة أفضل عن عملية الإعداد.
الخطوة 1:
أولاً ، قم بتنزيل أي تطبيق "MQTT client" متوفر في متجر Google Play Store / App Store وقم بتثبيته. في هذا المشروع ، يتم استخدام تطبيق يسمى "MQTT client" ، والذي يشبه الصورة الموضحة أدناه.
الخطوة 2:
انقر فوق علامة "+" لسرد الخيارات الإضافية في التطبيق ، حيث سنقوم بإضافة وسيط جديد. عند النقر فوق الزر ، تظهر شاشة جديدة كما هو موضح أدناه.
الخطوه 3:
بعد ذلك ، يجب ملء تفاصيل الوسيط في الحقل المطلوب. أولاً ، انقر فوق الخيار "ممكّن" الموضح في التطبيق. في هذا المشروع ، يتم استخدام وسيط Eclipse MQTT ، وترد أدناه التفاصيل التي يتعين ملؤها:
الاسم المستعار: أعط اسمًا لما تفضله
المضيف: mqtt.eclipse.org
المنفذ: 1883
معرف العميل: أعط معرفًا عن تفضيلاتك
يجب ملء التفاصيل أعلاه في الحقول الخاصة بكل منها. جميع الحقول الأخرى ليست ضرورية ويمكن تركها فارغة. بعد الانتهاء بنجاح ، انقر فوق زر حفظ لحفظ تفاصيل الوسيط.
بمجرد الانتهاء ، تنتهي عملية إعداد تطبيق android ويمكننا الآن الانتقال إلى جانب الأجهزة.
المكونات مطلوبة
قائمة كاملة بالأجزاء المطلوبة موصوفة أدناه. نظرًا لأن هذه الدائرة بسيطة ، يمكنك العثور على جميع الأجزاء الضرورية في متجر الهوايات المحلي.
- NodeMCU
- يؤدى
- اللوح
- توصيل الأسلاك
- كابل البرمجة
دائرة اختبار Eclipse MQTT - تخطيطية
فيما يلي مخطط الدائرة لمشروع MQTT الأساسي:
برمجة ESP8266 للتواصل مع الوسيط
يعتني رمز Arduino البسيط بجميع الاتصالات الضرورية بين وسيط MQTT و NodeMCU. في هذا القسم ، سنتعرف على كيفية عمل هذه الوظيفة بالتفصيل.
قم بإعداد Arduino IDE وقم بتحميل الكود:
إذا كنت تقوم بتحميل الكود إلى NodeMCU لأول مرة ، فأنت بحاجة إلى إعداد Arduino IDE أولاً. للقيام بذلك ، ما عليك سوى اتباع التعليمات البسيطة الواردة أدناه.
أولاً ، افتح Arduino IDE ، ثم انتقل إلى ملف-> تفضيلات-> الإعدادات .
بعد ذلك ، انسخ عنوان URL أدناه والصقه في حقل " عنوان URL لمدير مجلس الإدارة الإضافي " ، وانقر فوق "موافق". يمكنك التحقق من الصورة أدناه لمعرفة كيف قمنا بذلك.
الرابط:
بعد ذلك ، انتقل إلى Tools> Board> Boards Manager . في نافذة مدير مجلس الإدارة ، اكتب ESP 8266 في مربع البحث واضغط على إدخال. ثم حدد أحدث إصدار من القائمة المنسدلة وانقر فوق تثبيت. الصورة أدناه ستعطيك فكرة واضحة.
أخيرًا ، بمجرد اكتمال التثبيت ، انتقل إلى Tools -> Board -> وحدد NodeMCU 1.0 (ESP-12E Module). الآن ، يمكنك برمجة NodeMCU باستخدام Arduino IDE. نظرًا لأننا انتهينا من إعداد Arduino IDE ، يمكننا الآن تحميل الكود الكامل. لكن أولاً ، اقرأ الشرح السريع للكود بأكمله.
أولاً ، قمنا بتضمين "ESP8266WiFi.h" لاستخدام ESP8266 و "PubSubClient.h" لـ MQTT.
يمكنك العثور على مكتبة ESP8266 التي تم إنشاؤها مسبقًا داخل مكتبة Arduino ، ولكنك تحتاج إلى تنزيل مكتبة PubSubClient من مستودع GitHub المرتبط بها.
#تضمن
بعد ذلك ، حدد بيانات اعتماد الشبكة مثل اسم المستخدم وكلمة المرور لشبكة Wi-Fi. استبدل بيانات الاعتماد الخاصة بك بدلاً من "المسؤول" و "12345678" على التوالي.
const char * ssid = "admin" ؛ const char * password = "12345678" ؛
بعد ذلك ، نحتاج إلى تكوين خادم MQTT. لقد استخدمنا خادم Eclipse MQTT لهذا المشروع ، ولهذا السبب تم إعطاء عنوان الخادم كـ “mqtt.eclipse.org”. ولكن إذا كنت تخطط لاستخدام أي خادم آخر مثل Mosquitto و Adafruit ، فيمكنك استبداله بعنوان الخادم ورقم المنفذ الخاصين بك.
const char * mqtt_server = "mqtt.eclipse.org" ؛ const int mqtt_port = 1883 ؛
بعد ذلك ، يتم إنشاء المثيلات لفئة WiFiClient و PubSubClient ، والتي سيتم استخدامها في جميع أنحاء البرنامج.
WiFiClient espClient ؛ عميل PubSubClient (espClient) ؛
في قسم الإعداد () ، نسمي WiFi.begin () أولاً ، سيؤدي استدعاء هذه الطريقة إلى توصيل ESP بنقطة الاتصال المفضلة لديك.
WiFi.begin (SSID ، كلمة المرور) ؛
بعد ذلك ، نتحقق من اتصال شبكة ناجح باستخدام طريقة WiFi.status () . بعد نجاح الاتصال ، تتم طباعة رسالة على Serial Monitor مع SSID للشبكة المتصلة.
while (WiFi.status ()! = WL_CONNECTED) {delay (500) ؛ Serial.println ("الاتصال بشبكة WiFi..") ؛ } Serial.print ("متصل بشبكة WiFi:") ؛ Serial.println (WiFi.SSID ()) ؛
الآن ، نحن بحاجة إلى إنشاء وسيط. لذلك ، استخدمنا طريقة setServer ؛ تأخذ هذه الطريقة حجتين حددناهما مسبقًا. الآن ، إذا أردنا تلقي رسائل من الخادم ، فنحن بحاجة إلى إنشاء وظيفة رد الاتصال. لذلك ، نحن نستخدم طريقة setCallback (رد الاتصال) .
client.setServer (mqtt_server، mqtt_port) ؛ client.setCallback (MQTTcallback) ،
الآن ، استخدمنا وظيفة الاتصال (معرف العميل) للاتصال بعميل ESP8266. معرف العميل هنا هو اسم العميل ، ويجب أن يكون فريدًا. إذا كان متصلاً ، فيمكن عرض رسالة نجاح داخل الشاشة التسلسلية.
if (client.connect ("ESP8266")) {Serial.println ("متصل") ؛ } else {Serial.print ("فشل مع الحالة") Serial.println (client.state ())؛ تأخير (2000) ؛ }
بعد ذلك ، نسمي client.subscribe () ، وهي دالة MQTT مضمنة ، تُستخدم للاشتراك في موضوع معين. بالنسبة لهذا المشروع ، استخدمنا " esp / test " كاسم مشترك لدينا.
client.subscribe ("esp / test") ؛
الآن ، يتم استدعاء وظيفة MQTTcallback للتحقق مما إذا كانت أي معلومات محدثة متاحة أم لا. في حالة توفر بيانات جديدة ، تعالج هذه الوظيفة البيانات المستلمة وتطبع رسالة في الشاشة التسلسلية بالرسالة الأصلية واسم الموضوع حيث يتم استلام الرسالة.
بعد ذلك ، نقوم بتحويل الرسائل إلى سلسلة ، بحيث يمكن مقارنتها والتحقق من أي إجراءات تشغيل. في هذا المشروع ، يتم تشغيل / إيقاف مؤشر LED باستخدام أوامر MQTT ، كما هو موضح في الكود أدناه.
لـ (int i = 0؛ i <length؛ i ++) {message = message + (char) payload ؛ } Serial.print (رسالة) ؛ if (message == "on") {digitalWrite (LED ، HIGH) ؛ }
أخيرًا ، لنشر المعلومات حول الموضوع. و client.publish () يتم استخدام الدالة. في هذا المشروع ، يتم فحص حالة زر الضغط ، إذا تم الضغط على الزر ، ثم يتم نشر رسالة إلى الموضوع " esp / test1 " كما هو موضح أدناه.
if (digitalRead (D1) == 0)) {client.publish ("esp / test1"، "Hello from ESP8266") ؛ } آخر ؛ client.loop () ؛
اختبار MQTT مع ESP8266 باستخدام Arduino
بالنسبة للاختبار النهائي ، سنستخدم تطبيق Android ، الذي قمنا بإعداده مسبقًا.
افتح تطبيق عميل MQTT ، وتأكد من أن هاتفك المحمول لديه اتصال إنترنت نشط. أيضًا ، يجب أن يكون لنقطة الاتصال التي تتصل بها NodeMCU اتصال إنترنت نشط. بمجرد توصيل كل شيء بالإنترنت ، سنرسل سلسلة "Hello from ESP8266" من وحدة ESP ، والتي ستنعكس داخل تطبيق Android ، وسنتلقى إشعارًا. بعد ذلك ، سنرسل سلسلة من تطبيق Android ، والتي ستعمل على تشغيل مؤشر LED متصل بلوحة ESP8266 Node MCU.
الخطوة 1: (اشترك في الموضوع):
انقر فوق الخيار المحفوظ MQTT في التطبيق ، والذي قمنا بتكوينه مسبقًا. ستظهر شاشة ، حيث يُطلب منك "الاشتراك في موضوع". لقد قمنا مسبقًا بتكوين الموضوع كـ " esp / test1 ". لذلك ، في تطبيق Android ، سنكتب " esp / test1 ". انقر فوق اشتراك ، سيؤدي القيام بذلك إلى تقديم شاشة مثل أدناه ، حيث سيتم كتابتها مثل "لم يتم تلقي رسالة" من الموضوع المحدد.
الآن ، انقر فوق الزر "متصل" المتصل بـ nodeMCU. الآن وفقًا لرمزنا ، سيتم نشر رسالة " مرحبًا من ESP8266 " في الموضوع وسيكون هناك إشعار على الشاشة بالرسالة المستلمة كما هو موضح أدناه.
الخطوة 2: انشر إلى الموضوع:
الآن للنشر في الموضوع ، انقر فوق الزر UP ARROW الخاص بالتطبيق ، وسيتم فتح شاشة كما هو موضح أدناه.
الآن ، في حقل الموضوع ، اكتب " esp / test " وفي حقل الرسالة ، اكتب " on " أو " off " لتشغيل وإيقاف تشغيل LED على التوالي. على سبيل المثال ، إذا تم نشر كلمة "on" في الموضوع ، فسيتم تشغيل مؤشر LED وإذا تم نشر "off" في الموضوع ، فسيتم إيقاف تشغيل LED.
أتمنى أن تكون المقالة قد أحببت وتعلمت شيئًا جديدًا. إذا كانت لديك أي أسئلة بخصوص هذه المقالة ، فلا تتردد في التعليق أدناه أو يمكنك استخدام منتدانا بدلاً من ذلك.