Esp8266 التحكم في الإنترنت عبر بروتوكول MQTT


مرحبا بالجميع! تصف هذه المقالة بالتفصيل وتوضح كيفية تكوين وحدة التحكم عن بعد حرفياً لوحدة esp8266 باستخدام تطبيق Android باستخدام بروتوكول MQTT في 20 دقيقة فقط من وقت الفراغ.

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

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

يتكون نظام التحكم الموصوف من جزأين رئيسيين: خادم MQTT (عادة ما يكون واحدًا) والعملاء ، والذي يمكن أن يكون كثيرًا. في حالتنا ، سيكون تطبيق Android ووحدة esp8266 نفسها بمثابة عملاء.

خوارزمية تشغيل النظام على النحو التالي. يقوم العملاء بالاتصال بالخادم وعلى الفور بعد ربط كل منهم بالاشتراك في المواضيع التي تهمه. تمر جميع الاتصالات بين العملاء من خلال خادم يعيد توجيه البيانات إلى عملاء آخرين بناءً على اشتراكاتهم.

خادم MQTT.

في حالتنا ، سنستخدم خدمة مريحة للغاية www.cloudmqtt.com التي لديها خطة تعرفة مجانية (Cute Cat) ستغطي بالكامل احتياجات تنفيذ نظام "المنزل الذكي" الصغير الخاص بها.

دعنا نذهب من خلال التسجيل على الموقع والحصول على البيانات اللازمة للوصول إلى الخادم. عند تكوين العملاء ، يجب عليك استخدام منفذ عادي (بدون SSL و TLS).


تطبيق Android.

سيكون تطبيقنا بمثابة لوحة تحكم لوحدة التحكم الدقيقة ، كما سيتلقى ويعرض جميع المعلومات المستلمة من esp8266.

التطبيق يسمى IoT MQTT Dashboard وهو عميل mqtt جاهز مع عدد قليل من الحاجيات المريحة للغاية. يمكن رؤية المزيد من التفاصيل حول العمل مع التطبيق في الفيديو.

Esp8266.

تومض الوحدة النمطية في بيئة برمجة Arduino ، ولكن أريد أن أشير إلى أن الوحدة تواجه مشاكل في البرامج الثابتة في أحدث إصدارات Arduino ، لذلك أوصي باستخدام الإصدار 1.6.4.
على سبيل المثال ، يتم توصيل LED (5 دبوس) ومستشعر درجة حرارة ds18b20 (2 دبوس) بـ esp8266.
نظرًا لأنه من الضروري تلقي البيانات للتحكم في LED ، يجب أن تشترك إسبانيا بعد الاتصال في الموضوع المناسب "اختبار / قيادة" وإلا فإن جميع البيانات المرسلة ستمر بواسطة متحكمنا.
لإرسال بيانات درجة الحرارة ، لا يعد الاشتراك ضروريًا ، ولكن عند إرسال قيم درجة الحرارة ، تحتاج إلى تحديد الموضوع الذي ستذهب إليه هذه البيانات.

فيما يلي رسم تخطيطي مع تعليقات مفصلة.

رسم كروكي Esp8266_mqtt.ino
// 5
// ds18b20 2

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

const char *ssid = "AIRPORT"; //
const char *pass = "PASSWORD"; //

const char *mqtt_server = "server"; // MQTT
const int mqtt_port = 11140; // MQTT
const char *mqtt_user = "Login"; //
const char *mqtt_pass = "Pass"; //

#define BUFFER_SIZE 100

bool LedState = false;
int tm=300;
float temp=0;

//

void callback(const MQTT::Publish& pub)
{
Serial.print(pub.topic()); //
Serial.print(" => ");
Serial.print(pub.payload_string()); //

String payload = pub.payload_string();

if(String(pub.topic()) == "test/led") //
{
int stled = payload.toInt(); // integer
digitalWrite(5,stled); //
}
}

WiFiClient wclient;
PubSubClient client(wclient, mqtt_server, mqtt_port);

void setup() {

sensors.begin();
Serial.begin(115200);
delay(10);
Serial.println();
Serial.println();
pinMode(5, OUTPUT);
}

void loop() {
// wi-fi
if (WiFi.status() != WL_CONNECTED) {
Serial.print("Connecting to ");
Serial.print(ssid);
Serial.println("...");
WiFi.begin(ssid, pass);

if (WiFi.waitForConnectResult() != WL_CONNECTED)
return;
Serial.println("WiFi connected");
}

// MQTT
if (WiFi.status() == WL_CONNECTED) {
if (!client.connected()) {
Serial.println("Connecting to MQTT server");
if (client.connect(MQTT::Connect("arduinoClient2")
.set_auth(mqtt_user, mqtt_pass))) {
Serial.println("Connected to MQTT server");
client.set_callback(callback);
client.subscribe("test/led"); //
} else {
Serial.println("Could not connect to MQTT server");
}
}

if (client.connected()){
client.loop();
TempSend();
}

}
} //

//
void TempSend(){
if (tm==0)
{
sensors.requestTemperatures(); //
float temp = sensors.getTempCByIndex(0);
client.publish("test/temp",String(temp)); //
Serial.println(temp);
tm = 300; // 3
}
tm--;
delay(10);
}



ونتيجة لذلك ، نحصل على أداة مناسبة للتحكم عن بعد ومراقبة البيانات ، وهو أمر سهل التعلم للغاية وسيكون فعالًا حتى للمبتدئين.

فيديو يوضح تشغيل نظام التحكم


تعليمات مفصلة لإعداد نظام الفيديو


تطبيق واحد للتحكم esp8266 عبر بروتوكول MQTT


التحكم في شريط LED عبر الإنترنت


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

يحتوي الأرشيف على الرسم التخطيطي وجميع المكتبات اللازمة لوميض وحدة التحكم الدقيقة مع الرسم التخطيطي من المثال.
ألفت انتباهكم إلى حقيقة أن مكتبة ESP8266WiFi.h ليست مدرجة في هذا الأرشيف ؛ يتم تثبيتها من خلال مدير المجالس في بيئة Arduino. خادم

ARCHIVE

MQTT - www.cloudmqtt.com

رابط لتطبيق لوحة تحكم IoT MQTT - play.google.com/store/apps/details؟id=com.thn.iotmqttdashboard

شكرًا لكم جميعًا على اهتمامكم.

Source: https://habr.com/ru/post/ar393277/


All Articles