مقدمة

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

ملحوظة: يمكن اختيار عناصر خرج أخرى (ريليه يتحكم في ضوء مثلًا).

نستخدم Flask وهو إطار عمل مصغر بلغة البرمجة بايثون لإنشاء خادم الويب، حيث نوضح في الشكل أدناه نظرة عامة على النظام.

نظرة عامة على النظام
نظرة عامة على النظام (مصدر الصورة: randomnerdtutorials)

 

شاهد أوَّلًا الشرح في الفيديو أدناه:

 

الإعداد الأساس للراسبيري باي

تأكد في البداية من تثبيت نظام التشغيل Raspbian في الراسبيري باي.

تشغيل الوسيط موسكيتو وتثبيته (Mosquitto broker).

يتفاعل الراسبيري باي مع ESP8266  ببروتوكول MQTT، يجب أن يعمل الوسيط موسكيتو بعد تثبيته في الخلفية:

pi@raspberry:~ $ mosquitto -d

خادم ويب بايثون باستخدام Flask

نستخدم الإطار Flask لتحويل الراسبيري باي إلى خادم ويب.

لتثبيت Flask  ستحتاج إلى تثبيت Pip.
نفّذ الأوامر التالية لتحديث الراسبيري باي وتثبيت PiP:

pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get upgrade
pi@raspberrypi ~ $ sudo apt-get install python-pip python-flask

استخدمت التعليمة pip install لتثبيت Flask وتوابعه:

pi@raspberrypi ~ $ sudo pip install flask

تثبيت حزمة بايثون Paho-MQTT

توفر حزمة Paho-MQTT درجةَ العميل التي تمكن التطبيقات الاتصالَ بوسيط MQTT لنشر الرسائل والاشتراك في الموضوعات وتسلّمِ الرسائل المنشورة.

ينشر خادم ويب البايثون في هذا المشروع رسائلَ إلى ESP8266   لتشغيل أطراف الدخل/الخرج وإطفائهم (General-Purpose Input/Output) أو اختصارًا (GPIO).

لتثبيت حزمة Paho-MQTT نكتب التعليمة التالية:

pi@raspberrypi ~ $ sudo pip install paho-mqtt

إنشاء نص بايثون برمجي

يمثل النص البرمجي الأساس للتطبيق؛ فيُعد خادم الويب، وعند الضغط على هذه الأزرار تُنشر رسالة MQTT إلى ESP8266.

نبدأ إنشاء مجلد جديدًا وذلك للحفاظ على كل شيء منظمًا:

pi@raspberrypi ~ $ mkdir web-server
pi@raspberrypi ~ $ cd web-server
i@raspberrypi:~/web-server $

ننشئ ملفًا جديدًا يُسمى app.py

pi@raspberrypi:~/web-server $ nano app.py

قم بتحميل الكود البرمجي من هنا والصقه في الراسبيري باي.

إنشاء مِلف HTML

نحافظ على تنظيم المشروع بفصل وسوم لُغة HTML عن برنامج البايثون.

يستخدم Flask محركَ القوالب (Template Engine) يُسمى Jinja2  ، يرسل بيانات ديناميكية من نَص بايثون البرمجي إلى مِلف HTML.

ننشئ مجلدًا جديدًا يُسمى (templates):

pi@raspberrypi:~/web-server $ mkdir templates
pi@raspberrypi:~/web-server $ cd templates
pi@raspberrypi:~/web-server/templates $

ننشئ ملفًا جديدًا يُسمى (main.html):

pi@raspberrypi:~/web-server/templates $ nano main.html

قم بتحميل الكود البرمجي من هنا والصقه في الراسبيري باي.

برمجة ESP8266

تجب تثبيت مكتبة PubSubClient حتى يتفاعل ESP8266  وخادمَ ويب الراسبيري باي.

توفر هذه المكتبة عميلًا للقيام بمراسلة نشر/اشتراك بسيطة مع خادم يدعم MQTT (يسمح أساساً لـ ESP8266  بالتواصل إلى خادم ويب البايثون).

تثبيت المكتبة

  • نحمّل مكتبة PubSubClient من هنا؛ فنحصل على مجلد مضغوط zip.
  • نفك ضغط المجلد ونحصل على مجلد باسم: pubsubclient-master.
  • نعيد تسمية المجلد إلى (pubsubclient)
  • ننقل مجلد (pubsubclient) إلى مجلد تثبيت مكتبات Arduino IDE.
  • نعيد فَتح برنامج Arduino IDE.

تأتي المكتبة وعدد من الأمثلة البرمجية. انقر داخل برنامج Arduino IDE على File> Examples> PubSubClient

تحميل البرنامج

نقوم الآن بتحميلُ البرنامَج كاملاً من هنا  إلى ESP8266، يتوجب عليك تغيير اسم الشبكة SSID وكلمة السر وIP الخاص بالراسبيري باي.

المخططات

يجب توصيل الليدات LEDs بمقاومتين على التسلسل بشريحة  ESP8266 كما هو مبيّن في الشكل أدناه.

وصل المقاومة على التسلسل بين الLED و ESP8266
وصل المقاومة على التسلسل بين الLED و ESP8266 (مصدر الصورة: randomnerdtutorials)

تشغيل خادم الويب

ننتقل إلى المجلد الذي يحتوي على مِلف app.py لتشغيل خادم ويب الراسبيري باي بكتابة التعليمة التالية:

pi@raspberrypi:~/web-server/templates $ cd..

نكتب مسار المجلد مكانَ النقاط بعد تعليمة cd.

بعد ذلك نكتب التعليمة:

pi@raspberrypi:~/web-server $ sudo python app.py

ينبغي أن يبدأ خادم الويب حالًا من المنفذ 8181.

بدء تشغيل خادم الويب
بدء تشغيل خادم الويب (مصدر الصورة: randomnerdtutorials)

 

إيضاح:

افتح عنوانَ الراسبيري باي في المتصفح؛ بإدخال عُنوان IP المتخصّ بالراسبيري باي، في حالتنا هنا (http://192.168.1.98:8181).

ملحوظة:

يجب إدخال عنوان الـ IP متبوعاً بـ 8181

خادم ويب الراسبيري باي
خادم ويب الراسبيري باي (مصدر الصورة: randomnerdtutorials)

 

رابط فيديو توضيحي لخادم الويب في أثناء العمل:

 


المصدر: هنا

ترجمة: إيليا سليمان, مراجعة: يارا قاضون , تدقيق لغوي: محمد بابكر, تصميم: علي العلي, تحرير: فادي الشعار