بروتوكول MQTT (Message Queuing Telemetry) للتحكم بين الاجهزة الالكترونية

Protocol  MQTT  Message Queuing Telemetry

للتحكم بين الاجهزة الالكترونية  

 Machine-To-Machine (M2M) 

تحية طيبة

كثير من الاخوة والطلبة والباحثين في مجال التحكم الالكتروني عن بعد يسأل هل بامكان الاجهزة الالكترونية ان تتخاطب مع بعضها البعض اي مخاطبة ودردشة الاجهزة مع بعضها البعض اي M2M ….؟ دون تدخل الانسان اي اتمتته الاجهزة الالكترونية وخاصة البوردات المتوافقة مع الاردوينو مع بعضها البعض اي عمل شبكة عالمية للتحكم بجميع الاجهزة عن بعد ….؟!!!

الجواب نعم …يفضل استخدام بروتوكول MQTT (Message Queuing Telemetry Transport )…. مختصر نقل الرسائل في قائمة الانتظار عن بعد بوجود وكيل وسطي والذي يسمى بروكر broker لنقل الرسائل بين الاجهزة ….هناك كثير من المنصات تعطي هذه الخدمة الوسطية بوجود مكتبة كلاينت للاتصال مع الوكيل واستغلال البروتوكل لنقل الرسائل بين الاجهزة

وجود مكتبة يمكن تنزيلها من هنا

والذي يعمل ضمن بيئة الاردينو

اذا ما هو هذا البروتوكول ….

 

 لنفرض لدينا 10 بوردات تحكم الكتروني مثلا 10 بوردات esp8266 wifi وطبعا مع المتحسسات الرقمية او التناظرية ونريد التحكم بهذه الاجهزة من حيث قراءة البيانات في وقت واحد او التحكم بجميع الاجهزة في وقت واحد وكل بورد له اي بي خاص به فكيف نتحكم بهذا الزخم من الاجهزة من حيث القراءة او التحكم فاذا عملنا تطبيق على اجهزة الموبايل الاندرويد او عملنا واجة ويب انترفيس بلغة برمجة معينة وكما عملت مثل هذه المشاريع سابقا

فاننا سوف نفشل بالاتصال بجميع الاجهزة بتطبيق لان التطبيق سوف يقرأ  او يتصل ببورد واحد حسب عنوانه الشبكي ان كان محليا او عالميا …..اذا الحل الوحيد هو وجود هذا البروتوك  لذا نحتاج الى وسيله تجعلنه نصل الى هذه القطعه والتحكم بها او اخذ البيانات منها بكل سهوله لذا نحتاج مايسمى MQTT Broker

هنا كل قطع ( ESP8266 او الاردينو ) سوف تتصل بسيرفر اسمه mqtt broker وهذا سيرفر سوف يقرر لمن يرسل البيانات وفق مايسمى بالعنوان TOPIC …… اي الموضوع اي لنفرض انشاء جميع البوردات في محطان الانواء الجوية المنتشرة بالعراق ونريد استلام البيانات منها جميعا على واجهة واحدة ولانريد ان نغير كل ثانية عنوان البورد  …اذا تشترك جميع البوردات بموضوع واحد ليكن الطقس  TOPIC=Weather

لكننا ايضا سوف نحتاج الى 3 اشياء ضروريه وهي TOPIC وPUBLISH , SUBSCRIBE


ماهو SUBSCRIBE وهو من نخبر كلاينت ((ESP8266 او الاردينو)) قم بأستقبال البيانات القادمه من عنوان معين

 

ماهو PUBLISH وهو من نخبر كلاينت ((ESP8266 او الاردينو)) قم بارسال البيانات الى عنوان معين

 

ايضا يوجد مصطلح اخر وهو
UNSUBSCRIBE

 

ماهو UNSUBSCRIBE وهو من نخبر كلاينت ((ESP8266 او الاردينو)) توقف عن أستقبال البيانات القادمه من عنوان معين
لنضرب مثال لنفترض عن 2 كلاينت اي 2 من ESP8266 اريد من ارسل من كلاينت اول

كلمه

 Hello esp8266 2….!!! وارسلها الى كلاينت الثاني ليقوم هو برد علي ويقول مثلا

Hi Esp8266 one I’m fine

طبعا هذا مثال بسيط للمراسلات والمخاطبات بين البوردات  وانت بالطبع يمكنك ارسال ماتشاء من البيانات حسب نظام التحكم الشبكي تحت البحث والتطبيق ….

لنفرض لدينا 3 اجهزة تحكم ونريد التحكم مع بعضها البعض وفق خطة مسبقة فاولا نعطي عنوان الموضوع الى الكلاينت الاول وليكن

TOPIC for ESP8266-1=Weather-Station

Topic For ESP8266-2=BaghdadTemp

Topic for esp8266-3=MouselStation

الخطوه الاولى نقوم بربط الكلاينت  جميعا ب  mqtt broker

كود:

const char* mqtt_server = “210.201.4.100”;//”YOUR_RPi_IP_Address”

  client.setServer(mqtt_server, 1883);

الخطوه الثاني نخبر كلاينت الاول بأن يستقبل البيانات من كلاينت الثاني وكذلك الحال بالنسبه للكلاينت الثاني

 

اي كود المحطة تكون كالاتي

بان يستقبل بينات محطة بغداد

:

/ This functions reconnects your ESP8266 to your MQTT broker

// Change the function below if you want to subscribe to more topics with your ESP8266

void reconnect() {

  // Loop until we’re reconnected

  while (!client.connected()) {

    Serial.print(“Attempting MQTT connection…”);

    // Attempt to connect

    if (client.connect(“ESP8266Client”)) {

      Serial.println(“connected”); 

      // Subscribe or resubscribe to a topic

      // You can subscribe to more topics (to control more LEDs in this example)

      client.subscribe(“ُESP2”);

    } else {

      Serial.print(“failed, rc=”);

      Serial.print(client.state());

      Serial.println(” try again in 5 seconds”);

      // Wait 5 seconds before retrying

      delay(5000);

    }

  }

}

وفي بورد بغداد نخبره بان يستقبل بيانات واوامر محطة الرئيسية

كود:

/ This functions reconnects your ESP8266 to your MQTT broker

// Change the function below if you want to subscribe to more topics with your ESP8266

void reconnect() {

  // Loop until we’re reconnected

  while (!client.connected()) {

    Serial.print(“Attempting MQTT connection…”);

    // Attempt to connect

    if (client.connect(“ESP8266Client”)) {

      Serial.println(“connected”); 

      // Subscribe or resubscribe to a topic

      // You can subscribe to more topics (to control more LEDs in this example)

      client.subscribe(“ESP1”);

    } else {

      Serial.print(“failed, rc=”);

      Serial.print(client.state());

      Serial.println(” try again in 5 seconds”);

      // Wait 5 seconds before retrying

      delay(5000);

    }

  }

الان راح ارسل البيانات my name falahgs من كلاينت الاول الى عنوان ESP2

اذا راح ارسل بيانات الحرارة من بور بغداد

كود:

client.publish(“ESP2”, “my name falahgs”);

طبعا كلاينت الثاني راح يستقبل البيانات عن طريق داله اسمها callback

كود:

void callback(String topic, byte* message, unsigned int length) {

  for (int i = 0; i < length; i++) {

    Serial.print((char)message[i]);

    messageTemp += (char)message[i];

  }

  // If a message is received on the topic ESP1

  if(topic==”ESP2″){

            client.publish(“ESP1”, “Hello hasan”);

      }

}

وهناك كثير من المنصات التي تقدم خدمتها كوكيل وسيط لنقل الرسائل بين جميع البوردات ومشاركة البيانات  مع بعضها البعض …وفي مقالات قادمة ان شاء الله سوف انشر اهم المنصات التي تستخدم هذه الخدمة (MQTT)…..

 

 

مع تحياتي

المبرمج ومدرس الفيزياء والرياضيات

فلاح كاطع صالح

Facebook:www.facebook.com/falahgs

Email:digital_fgs@yahoo.com

Messenger Bot: m.me/131260830271198

Google plus: https://plus.google.com/+FalahgsGate

Advertisements

About فلاح كاطع صالح

مبرمج ومدرس مادة الفيزياء والرياضيات وباحث في المجال العلمي والفني العراق بغداد

Posted on أبريل 10, 2017, in كتب وبحوث الاردينو, كتب وبحوث الاردينو, مقالات حاسوب, مشاريع الاردينو مع الاندرويد, التحكم الالكتروني and tagged , , , . Bookmark the permalink. أضف تعليق.

اترك رد

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s

%d مدونون معجبون بهذه: