جدول المحتويات:

كيفية استخدام MQTT مع Raspberry Pi و ESP8266: 8 خطوات (بالصور)
كيفية استخدام MQTT مع Raspberry Pi و ESP8266: 8 خطوات (بالصور)

فيديو: كيفية استخدام MQTT مع Raspberry Pi و ESP8266: 8 خطوات (بالصور)

فيديو: كيفية استخدام MQTT مع Raspberry Pi و ESP8266: 8 خطوات (بالصور)
فيديو: ESP32 Home Automation Platform in 4 steps 2024, يونيو
Anonim
كيفية استخدام MQTT مع Raspberry Pi و ESP8266
كيفية استخدام MQTT مع Raspberry Pi و ESP8266

في Instructable ، سأشرح ما هو بروتوكول MQTT وكيف يتم استخدامه للتواصل بين الأجهزة ، ثم ، كدليل عملي ، سأوضح لك كيفية إعداد نظام عميل بسيط ، حيث سترسل وحدة ESP8266 رسالة إلى برنامج Python عند الضغط على الزر. على وجه التحديد ، أنا أستخدم وحدة Adafruit HUZZAH لهذا المشروع ، Raspberry Pi وجهاز كمبيوتر مكتبي. سيعمل Raspberry Pi كوسيط MQTT ، وسيتم تشغيل عميل Python من كمبيوتر سطح مكتب منفصل (اختياري ، حيث يمكن تشغيله على Raspberry Pi).

لمتابعة هذا Instructable ، ستحتاج إلى بعض المعرفة الأساسية بالإلكترونيات ، وكيفية استخدام برنامج Arduino. يجب أيضًا أن تكون على دراية باستخدام واجهة سطر الأوامر (لـ Raspberry Pi). نأمل ، بمجرد أن تكتسب معرفة ماهية MQTT ، وكيفية استخدامها في سيناريو أساسي ، ستتمكن من إنشاء مشاريع إنترنت الأشياء الخاصة بك!

الأجزاء المطلوبة

  • 1 × Raspberry Pi ، متصل بشبكة محلية (تشغيل Jessie)
  • 1 × وحدة ESP8266 (Adafruit HUZZAH)
  • 1 × اللوح
  • 3 × أسلاك توصيل معزز (ذكر إلى ذكر)
  • 1 × زر ضغط
  • 1 × 10 كيلو أوم المقاوم (بني-أسود-برتقالي رمز اللون)

لقد قمت بإنشاء Instructable ، حيث لطالما اهتمت MQTT بي كبروتوكول وهناك العديد من الطرق المختلفة التي يمكن استخدامها. ومع ذلك ، لم أستطع معرفة كيفية ترميز الأجهزة لاستخدامها. كان هذا لأنني لم أكن أعرف / أفهم ما كان يحدث بالفعل لأخذ "Hello، World!" من الجهاز A وأرسله إلى الجهاز B. ومن ثم ، قررت كتابة Instructable (على أمل) لتعليمك كيف يعمل ، ولتعزيز فهمي الخاص له أيضًا!

الخطوة 1: ما هو MQTT؟

ما هو MQTT؟
ما هو MQTT؟

MQTT ، أو MQ Telemetry Transport ، هو بروتوكول مراسلة يسمح لأجهزة متعددة بالتحدث مع بعضها البعض. حاليًا ، يعد بروتوكولًا شائعًا لإنترنت الأشياء ، على الرغم من استخدامه لأغراض أخرى - على سبيل المثال ، Facebook Messenger. من المثير للاهتمام أن MQTT تم اختراعه في عام 1999 - مما يعني أنه قديم مثلي!

يعتمد MQTT على فكرة أن الأجهزة يمكنها نشر الموضوعات أو الاشتراك فيها. لذلك ، على سبيل المثال. إذا كان الجهاز رقم 1 قد سجل درجة الحرارة من أحد مستشعراته ، فيمكنه نشر رسالة تحتوي على قيمة درجة الحرارة التي سجلها ، إلى موضوع (مثل "درجة الحرارة"). يتم إرسال هذه الرسالة إلى وسيط MQTT ، والذي يمكنك التفكير فيه كمحول / موجه على شبكة محلية. بمجرد أن يتلقى وسيط MQTT الرسالة ، سيرسلها إلى أي أجهزة (في هذه الحالة ، الجهاز رقم 2) مشترك في نفس الموضوع.

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

نأمل ، في نهاية هذا المشروع ، أن يكون لديك فهم لما هو MQTT وكيفية استخدامه لمشاريعك الخاصة في المستقبل.

الخطوة 2: تثبيت MQTT Broker على Raspberry Pi

تثبيت MQTT Broker على Raspberry Pi
تثبيت MQTT Broker على Raspberry Pi
تثبيت MQTT Broker على Raspberry Pi
تثبيت MQTT Broker على Raspberry Pi
تثبيت MQTT Broker على Raspberry Pi
تثبيت MQTT Broker على Raspberry Pi

لإعداد نظام MQTT الخاص بنا ، نحتاج إلى وسيط ، كما هو موضح في الخطوة السابقة. بالنسبة لـ Raspberry Pi ، سنستخدم وسيط "Mosquitto" MQTT. قبل تثبيت هذا ، من الأفضل دائمًا تحديث Raspberry Pi الخاص بنا.

sudo apt-get update

sudo apt-get ترقية

بمجرد القيام بذلك ، قم بتثبيت البعوض ثم حزم عملاء البعوض.

سودو apt-get install mosquitto -y

sudo apt-get install mosquitto-customers-y.de تثبيت عملاء البعوض sudo apt-get install mosquitto-customers -y

عندما تنتهي من تثبيت هاتين الحزمتين ، سنحتاج إلى تهيئة الوسيط. يوجد ملف تكوين وسيط البعوض في /etc/mosquitto/mosquitto.conf ، لذا افتح هذا بمحرر النصوص المفضل لديك. إذا لم يكن لديك محرر نصوص مفضل أو لا تعرف كيفية استخدام أي من محرري سطر الأوامر ، فسأستخدم nano حتى تتمكن من المتابعة:

sudo nano /etc/mosquitto/mosquitto.conf

في الجزء السفلي من هذا الملف ، يجب أن ترى السطر:

include_dir /etc/mosquitto/conf.d

احذف هذا الخط. أضف الأسطر التالية إلى أسفل الملف.

allow_anonymous false

password_file / etc / mosquitto / pwfile listener 1883

من خلال كتابة هذه الأسطر ، أخبرنا mosquitto أننا لا نريد أن يتصل أي شخص بوسيطنا الذي لا يقدم اسم مستخدم وكلمة مرور صالحين (سنقوم بتعيينهما في ثانية) وأننا نريد أن يقوم البعوض بذلك الاستماع للرسائل على المنفذ رقم 1883.

إذا كنت لا تريد أن يطلب الوسيط اسم مستخدم وكلمة مرور ، فلا تقم بتضمين السطرين الأولين اللذين أضفناهما (أي allow_anonymous… and password_file…). إذا قمت بذلك ، فانتقل إلى إعادة تشغيل Raspberry Pi.

الآن أغلق (واحفظ) هذا الملف. إذا كنت تتابع مع مثال nano ، فاضغط على CTRL + X ، واكتب Y عندما يُطلب منك ذلك.

نظرًا لأننا أخبرنا البعوض للتو أن المستخدمين الذين يحاولون استخدام وسيط MQTT يحتاجون إلى المصادقة ، نحتاج الآن إلى إخبار البعوض باسم المستخدم وكلمة المرور! لذا ، اكتب الأمر التالي - استبدال اسم المستخدم باسم المستخدم الذي تريده - ثم أدخل كلمة المرور التي تريدها عند المطالبة (ملاحظة: إذا قمت ، عند تحرير ملف التكوين ، بتحديد مسار ملف password_file مختلف ، فاستبدل المسار أدناه بالمسار واحد استخدمته).

sudo mosquitto_passwd -c / etc / mosquitto / pwfile username

نظرًا لأننا قمنا بتغيير ملف تكوين البعوض ، يجب علينا إعادة تشغيل Raspberry Pi.

sudo إعادة التشغيل

بمجرد انتهاء Raspberry Pi من إعادة التشغيل ، يجب أن يكون لديك وسيط MQTT يعمل بكامل طاقته! بعد ذلك ، سنحاول التفاعل معها ، باستخدام عدد من الأجهزة / الطرق المختلفة!

الخطوة الثالثة: اختبار الوسيط

اختبار الوسيط
اختبار الوسيط

بمجرد تثبيت البعوض على Raspberry Pi ، يمكنك إجراء اختبار سريع له - فقط للتأكد من أن كل شيء يعمل بشكل صحيح. لهذا الغرض ، هناك أمران يمكننا استخدامهما في سطر الأوامر. mosquitto_pub و mosquitto_sub. في هذه الخطوة ، سأوجهك خلال استخدام كلٍّ منها لاختبار وسيطنا.

لاختبار الوسيط ، سوف تحتاج إلى فتح نافذتين لسطر الأوامر. إذا كنت تستخدم Putty أو عميل SSH آخر ، فهذا بسيط مثل فتح نافذة SSH أخرى وتسجيل الدخول كالمعتاد. إذا كنت تقوم بالوصول إلى Pi الخاص بك من محطة UNIX ، فهذا هو نفسه تمامًا. إذا كنت تستخدم Raspberry Pi مباشرةً ، فستحتاج إلى فتح نافذتين طرفيتين في وضع واجهة المستخدم الرسومية (يمكن استخدام الأمر startx لبدء واجهة المستخدم الرسومية).

الآن بعد أن فتحت نافذتين ، يمكننا البدء في الاختبار. في أحد المحطتين ، اكتب الأمر التالي ، واستبدل اسم المستخدم وكلمة المرور بتلك التي قمت بإعدادها في الخطوة السابقة.

mosquitto_sub -d -u اسم المستخدم -P password -t test

إذا قررت عدم تعيين اسم مستخدم وكلمة مرور في الخطوة السابقة ، فمن الآن فصاعدًا ، تجاهل علامتي -u و -P في الأمرين. لذلك ، على سبيل المثال ، سيكون الأمر mosquitto_sub الآن:

اختبار mosquitto_sub -d -t

سيشترك الأمر mosquitto_sub في موضوع ، ويعرض أي رسائل يتم إرسالها إلى الموضوع المحدد في نافذة المحطة الطرفية. هنا ، تعني -d وضع التصحيح ، لذلك سيتم إخراج جميع الرسائل والنشاط على الشاشة. -u و -P يجب أن تشرح نفسها بنفسها. أخيرًا ، -t هو اسم الموضوع الذي نريد الاشتراك فيه - في هذه الحالة ، "اختبار".

بعد ذلك ، في النافذة الطرفية الأخرى ، سنحاول نشر رسالة في موضوع "الاختبار". اكتب ما يلي ، تذكر مرة أخرى لتغيير اسم المستخدم وكلمة المرور:

mosquitto_pub -d -u اسم المستخدم -P password -t test -m "Hello، World!"

عند الضغط على مفتاح الإدخال ، يجب أن ترى رسالتك "Hello، World!" تظهر في النافذة الطرفية الأولى التي استخدمناها (للاشتراك). إذا كان هذا هو الحال ، فأنت جاهز لبدء العمل على ESP8266!

الخطوة 4: إعداد ESP8266 (Adafruit HUZZAH)

إعداد ESP8266 (Adafruit HUZZAH)
إعداد ESP8266 (Adafruit HUZZAH)
إعداد ESP8266 (Adafruit HUZZAH)
إعداد ESP8266 (Adafruit HUZZAH)
إعداد ESP8266 (Adafruit HUZZAH)
إعداد ESP8266 (Adafruit HUZZAH)
إعداد ESP8266 (Adafruit HUZZAH)
إعداد ESP8266 (Adafruit HUZZAH)

هذه الخطوة إذا كانت خاصة بـ Adafruit HUZZAH (لأن هذا هو ما أستخدمه لإكمال هذا المشروع). إذا كنت تستخدم جهاز Arduino / ESP8266 مختلفًا ، فقد ترغب في تخطي هذه الخطوة. ومع ذلك ، أنصحك بقراءتها ، فقط في حالة وجود أي معلومات هنا قد تكون ذات صلة بك.

بالنسبة لهذا المشروع ، سأقوم ببرمجة HUZZAH باستخدام برنامج Arduino. لذا ، إذا لم تكن قد قمت بذلك بالفعل ، فتأكد من تثبيت برنامج Arduino (أحدث من 1.6.4). يمكنك تحميله من هنا.

بمجرد تثبيت برنامج Arduino ، افتحه وانتقل إلى File-> Preferences. هنا يجب أن ترى (بالقرب من أسفل النافذة) مربع نص مع التسمية: "عناوين URL إضافية لمدير اللوحات". في مربع النص هذا ، انسخ الرابط التالي والصقه:

arduino.esp8266.com/stable/package_esp8266com_index.json

انقر فوق "موافق" لحفظ التغييرات الخاصة بك. افتح الآن مدير مجلس الإدارة (Tools-> Board-> Board Manager) وابحث عن ESP8266. قم بتثبيت حزمة esp8266 بواسطة ESP8266 Community. أعد تشغيل برنامج Arduino.

الآن ، قبل أن نتمكن من برمجة اللوحة ، نحتاج إلى تحديد بعض الخيارات المختلفة. في خيار قائمة الأدوات ، حدد Adafruit HUZZAH ESP8266 للوحة ، 80 ميجاهرتز لتردد وحدة المعالجة المركزية (يمكنك استخدام 160 ميجاهرتز إذا كنت ترغب في رفع تردد التشغيل ، ولكن في الوقت الحالي سأستخدم 80 ميجاهرتز) ، 4 م (3 م SPIFFS) لحجم الفلاش ، و 115200 لسرعة الرفع. تأكد أيضًا من تحديد منفذ COM الذي تستخدمه (سيعتمد هذا على الإعداد الخاص بك).

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

لتحميل التعليمات البرمجية إلى وحدة التحكم الدقيقة ، تأكد أولاً من أن HUZZAH في وضع أداة تحميل التشغيل ، ثم انقر ببساطة على زر التحميل في Arduino IDE.

إذا كنت تواجه أي مشكلة في إعداد HUZZAH ، يمكن العثور على مزيد من المعلومات في البرنامج التعليمي الخاص بـ Adafruit.

الخطوة 5: برمجة ESP8266

برمجة ESP8266
برمجة ESP8266

سنبدأ الآن في برمجة ESP8266 ، ولكن قبل أن نتمكن من البدء ، ستحتاج إلى تثبيت المكتبات التالية في مدير مكتبة Arduino (Sketch-> Include Libraries-> Manage Libraries)

  • ترتد 2
  • PubSubClient

بمجرد تثبيت هذه المكتبات ، ستتمكن من تشغيل الكود الذي قمت بتضمينه في Instructable (MQTT_Publish.zip). لقد حرصت على التعليق عليه حتى تتمكن من فهم ما يفعله كل قسم ، ونأمل أن يمكّنك هذا من تكييفه مع احتياجاتك.

تذكر تغيير الثوابت في الجزء العلوي من الكود بحيث يمكن لـ ESP8266 الاتصال بشبكة WiFi الخاصة بك ووسيط MQTT الخاص بك (Raspberry Pi).

إذا قررت عدم تعيين اسم مستخدم وكلمة مرور لـ MQTT Broker ، فقم بتنزيل ملف MQTT_PublishNoPassword.zip بدلاً من ذلك.

الخطوة 6: تثبيت عميل Python (paho-mqtt)

تثبيت عميل Python (paho-mqtt)
تثبيت عميل Python (paho-mqtt)

لحسن الحظ ، هذه الخطوة بسيطة للغاية! لتثبيت عميل mosquitto python ، ما عليك سوى كتابة ما يلي في سطر الأوامر (Linux / Mac) أو حتى موجه الأوامر (Windows).

نقطة تثبيت paho-mqtt

ملاحظة: قد يواجه موجه أوامر Windows مشكلة في تشغيل الأمر pip إذا لم تحدد أنك تريد تثبيت pip وإضافة python إلى متغير PATH عند تثبيت Python. هناك عدد من الطرق لإصلاح ذلك ، لكنني أعتقد أن مجرد إعادة تثبيت Python هو أسهل طريقة. إذا كنت في شك - أعطها google!

الخطوة 7: عميل Python - الاشتراك

عميل Python - الاشتراك
عميل Python - الاشتراك

في هذه الخطوة ، سنقوم بإعداد برنامج Python النصي (إما على Raspberry Pi نفسه أو على جهاز كمبيوتر آخر متصل بالشبكة) للتعامل مع جميع الرسائل التي تم إرسالها (المنشورة) بواسطة ESP8266 إلى موضوع MQTT.

لقد قمت بتضمين كود python أدناه (PythonMQTT_Subscribe.py) ، والذي تم التعليق عليه لمساعدتك على فهم ما يجري ، لكنني سأشرح بعض الميزات الرئيسية هنا أيضًا.

إذا لم تقم بتعيين اسم مستخدم وكلمة مرور لاتصال MQTT مسبقًا ، فقم بتنزيل ملف PythonMQTT_SubscribeNoPassword.py بدلاً من ذلك.

الخطوة 8: التواصل بين أجهزة ESP8266

التواصل بين أجهزة ESP8266
التواصل بين أجهزة ESP8266

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

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

إذا كنت بحاجة إلى مساعدة في معرفة ما يجب أن يفعله كل جهاز ، ففكر في النظام كغرفة من الأشخاص. إذا كان برنامج ESP (1) قيد النشر ، فيمكنك تخيل هذا الجهاز على أنه "مكبر صوت" ، وأي أجهزة تشترك في الموضوع هي "مستمعين" في هذا المثال.

لقد قمت بتضمين بعض الأمثلة على الكود أدناه ، والتي توضح كيف يمكن لـ ESP8266 الاشتراك في موضوع ، والاستماع إلى رسائل معينة - 1 و 0. في حالة تلقي 1 ، يتم تشغيل مؤشر LED الموجود على اللوحة (لـ HUZZAH - GPIO 0). إذا تم استلام 0 ، فسيتم إيقاف تشغيل هذا المؤشر.

إذا كنت ترغب في معالجة بيانات أكثر تعقيدًا ، فيجب القيام بذلك في وظيفة ReceivedMessage (انظر الرمز).

بالنسبة لمشاريعك الخاصة ، إذا كنت بحاجة إلى إرسال البيانات واستلامها ، فيمكنك دمج وظيفة النشر من المثال السابق في الكود المضمن في هذه الخطوة. يجب التعامل مع هذا في وظيفة Arduino loop () الرئيسية.

تذكر تغيير المتغيرات في الجزء العلوي من الكود لتناسب شبكتك!

موصى به: