تذكر الإسم MQTTنظرًا لأنه نوع بروتوكول اتصال شبكة M2M (آلة إلى آلة) سيبدو كثيرًا. لقد أصبح شائعًا جدًا بفضل العصر الجديد لإنترنت الأشياء أو IoT (إنترنت الأشياء) لاختصاره باللغة الإنجليزية. بالإضافة إلى ذلك ، فهو بروتوكول مفتوح يوفر العديد من المزايا.
في الواقع ، أصبح أحد الركائز الأساسية لإنترنت الأشياء ، لأنه جيد جدًا على الأجهزة التي بها بعض قيود الإرسال مثل هذه. يأتي الاختصار MQTT من نقل القياس عن بعد لخدمة وضع الرسائل في قائمة انتظار، وهو معيار مفتوح من OASIS و ISO (ISO / IEC 20922) لاتصالات الشبكة ويعمل بشكل عام على TCP / IP الشهير.
بروتوكولات الشبكة
الكثير بروتوكولات الاتصال إنها قواعد تسمح لجهازين أو أكثر أو نظامين بالتواصل مع بعضهما البعض. أي أنه بروتوكول لنقل المعلومات من خلال وسائل مختلفة وبتنسيق محدد ، سواء تم تنفيذه بواسطة البرامج والأجهزة (أو كليهما).
El معيار من البروتوكول يحدد العديد من خصائص الاتصال. يمكن أن ينطلق من قواعد المزامنة ، والدلالات ، وبناء الجملة ، وتنسيق الحزمة ، وما إلى ذلك. والحقيقة أنها ليست شيئًا ضئيلًا ، لأنه بفضل هذه البروتوكولات اليوم يمكننا استخدام الإنترنت وشبكات الاتصال الأخرى ...
وبالطبع ، ليس هناك بروتوكول واحد فقط ، بل العديد من البروتوكولات. على سبيل المثال، الشهير DNS ، FTP ، MQTT ، HTTP و HTTPS ، IMAP ، LDAP ، NTP ، DHCP ، SSH ، Telnet ، SNMP ، SMTP ، إلخ ، لطبقة التطبيق. أثناء وجودك في طبقة النقل ، يمكنك أن تجد بعضها مشهورًا مثل TCP و UDP وما إلى ذلك ، بالإضافة إلى تلك الموجودة في طبقة الإنترنت مثل IPv4 أو IPv6 (تلك التي أتاحت أكبر عدد من عناوين IP المتاحة ووصول IoT) و IPSec وما إلى ذلك وغيرها من طبقة الارتباط مثل DSL و Ethernet و WiFi و ARP وما إلى ذلك.
حول بروتوكولات إنترنت الأشياء
بالطبع ، هناك بروتوكولات اتصال محددة أو التي يمكن تطبيقها على IOT. وهذا يعني ، بالنظر إلى القسم السابق ، أنها ستكون سلسلة من المعايير المحددة بحيث يمكن لجهازين أو أكثر من أجهزة إنترنت الأشياء التواصل وفهم بعضهما البعض ، وهما عمومًا M2M ، أي اتصال من آلة إلى آلة. العديد من أجهزة إنترنت الأشياء متصلة ومشاركة المعلومات من أجهزة الاستشعار أو مصادر أخرى.
نظرًا للعدد الكبير من أجهزة إنترنت الأشياء ، يجب أن تفي هذه البروتوكولات بمتطلبات تتجاوز حدود النطاق الترددي والسرعة وما إلى ذلك. (لاحظ أن العديد من الأجهزة مضمنة ورخيصة) ، والتي تكون عادةً في بعض الأجهزة. وأعني حقيقة ذلك يجب أن تكون قابلة للتطوير، لتتمكن من إضافة المزيد من الأجهزة المتصلة إذا لزم الأمر ودون التأثير على النظام العالمي.
أيضًا ، يجب أن يكون لديهم ملف تبعية منخفضة الاقتران بين الأجهزة ، بحيث لا تنشأ المشاكل إذا تمت إزالة الجهاز. وبالطبع ، في نفس الوقت ، يتم البحث عن قابلية عالية للتشغيل البيني بحيث تعمل مع عدد كبير من الأجهزة والأنظمة المتنوعة للغاية ، نظرًا لأن عالم إنترنت الأشياء غير متجانس تمامًا.
ومن الميزات المفيدة الأخرى سهولة تنفيذها ، أمن، إلخ. ضع في اعتبارك أن إنترنت الأشياء يخلق تحديات كبيرة في الجانب الأمني. أكثر من ذلك عندما تميل العديد من الأجهزة المتصلة إلى أن تكون حرجة في حالات معينة ... على سبيل المثال ، ألعاب للأطفال.
مفاهيم مهمة
ومع ذلك ، يجب القول أن حلول إنترنت الأشياء تستخدم خادمًا مركزيًا لتلقي الرسائل من جميع الأجهزة المتصلة التي ترسلها وتوزعها على جميع أجهزة إنترنت الأشياء المتصلة التي تستمع. هذا الخادم هو ما يعرف ب جهاز التوجيه أو السمسار. شيء بعيد عن العلاقة التقليدية بين العميل والخادم في بعض النواحي.
وعلاوة على ذلك، المنهجيات التي يمكنك أن تجدها في بروتوكولات الاتصال هذه لإنترنت الأشياء هي:
- PubSub في: النشر / Susbcribe هو نمط مراسلة حيث يقوم الجهاز (Sub) بإعلام الوسيط بأنه يريد تلقي رسالة ، بينما يقوم جهاز آخر (Pub) بنشر رسائل للوسيط لتوزيعها على الجهاز / الأجهزة الأخرى التي تنتظرها.
- rRPC: استدعاءات إجراءات ريمودر الموجه هي نمط آخر لتنفيذ العملية عن بعد. في ذلك ، يقوم جهاز (Callee) بإعلام الوسيط بأنه سيقوم بتنفيذ إجراء معين ويقوم الوسيط بتوزيعه على جهاز آخر (Caller) يتم تنفيذ العملية المذكورة عليه.
الآن ، لتنفيذ هذه المنهجيات أو الأنماط ، أ البنية التحتية للرسائل. وبهذا المعنى يمكن التمييز بين اثنين:
- قائمة انتظار الرسائل: خدمة الرسائل حيث يتم إنشاء قائمة انتظار واحدة لجميع العملاء الذين يبدؤون الاشتراك في الوسيط. سيحتفظ الأخير بالرسائل المخزنة حتى يتم تسليمها إلى العميل. إذا لم يكن العميل أو المستلم متصلاً ، فسيتم الاحتفاظ به حتى الاتصال. تشبه هذه الأنواع من الخدمات تلك المستخدمة في تطبيقات المراسلة الفورية مثل Telegra و WhatsApp و Messenger وما إلى ذلك.
- خدمة الرسائل: هي خدمة أخرى يرسل فيها الوسيط الرسائل إلى عميل المستلم المتصل ، مع التصفية حسب نوع الرسالة. إذا تم فصل العميل أو جهاز الاستقبال ، فستفقد الرسائل (على الرغم من أنه قد يحتوي على بعض أنظمة التسجيل).
بروتوكولات إنترنت الأشياء
بعد أن رأينا ما سبق ، دعنا الآن نلقي نظرة فاحصة بروتوكولات إنترنت الأشياء التي هي معروفة بشكل أفضل. من بين أبرز M2M ما يلي:
- AMQP (بروتوكول وضع الرسائل في قائمة انتظار متقدم): هو بروتوكول من نوع PubSub خاص بقائمة انتظار الرسائل. مصمم ليكون لديه قابلية تشغيل جيدة ويضمن الموثوقية. خاص بتطبيقات الشركات ، والأداء العالي ، والشبكات ذات زمن الانتقال العالي ، والحرجة ، وما إلى ذلك.
- WAMP (بروتوكول مراسلة تطبيقات الويب): هو بروتوكول مفتوح آخر من نوع PubSub مثل rRPC ، ويعمل على WebSockets.
- CoAP (بروتوكول التطبيق المقيد): بروتوكول مصمم خصيصًا للتطبيقات ذات السعة المنخفضة.
- TOMP (بروتوكول الرسائل الموجهة للنص المتدفق): بروتوكول بسيط للغاية ولتحقيق أقصى قدر من قابلية التشغيل البيني. يستخدم HTTP لنقل الرسائل النصية.
- XMPP (بروتوكول المراسلة والتواجد الممدّد): بروتوكول آخر يستخدم في إنترنت الأشياء لتطبيقات المراسلة الفورية ويعتمد على XML. يناير هذه القضية مفتوحة أيضًا.
- WMQ (قائمة انتظار رسائل WebSphere): بروتوكول طورته شركة IBM. إنها من نوع قائمة انتظار الرسائل ، كما يوحي اسمها ، وهي موجهة نحو الرسالة.
- MQTT: (انظر القسم التالي)
كل شيء عن MQTT
El بروتوكول MQTT إنه بروتوكول اتصال لقائمة انتظار الرسائل ، والذي يتبع نمط PubSub ، ومن النوع M2M ، كما أشرت بالفعل. يستخدم على نطاق واسع في إنترنت الأشياء ، ويعتمد على مكدس TCP / IP المستخدم على الإنترنت.
في حالة MQTT ، يتم الاحتفاظ بكل اتصال مفتوحًا ويتم إعادة استخدامه في كل اتصال ضروري. شيء مختلف عما يحدث في البروتوكولات الأخرى المعروفة ، أن كل اتصال يحدث يتطلب اتصالاً جديدًا.
ميزة
تتضح مزايا بروتوكول MQTT تمامًا من حيث اتصالات M2M لإنترنت الأشياء. بالإضافة إلى كل ما قيل أعلاه ، فهو بروتوكول يوفر:
- قابلية التوسع ، لربط المزيد والمزيد من العملاء.
- الفصل بين العملاء لتقليل التبعية.
- عدم التزامن.
- بساطة.
- الخفة حتى لا تستهلك الكثير من الموارد (على الرغم من أن أمان TLS / SSL يرتفع).
- موفر للطاقة للأجهزة التي تعتمد على البطارية أو تعمل على مدار الساعة طوال أيام الأسبوع ، ولا تحتاج إلى نطاق ترددي كبير (مثالي للاتصالات البطيئة ، مثل بعض الاتصالات اللاسلكية).
- الأمان والجودة ، لمزيد من الموثوقية والمتانة في الاتصالات.
تاريخ
تم إنشاء MQTT في التسعينيات ، مع إصدار مبكر من بروتوكول عام 1999. تم إنشاؤه بواسطة الدكتور آندي ستانفورد كلارك من شركة IBM و Arlen Nipper من Cirrus Link (Eurotech سابقًا).
La الفكرة الأولية كان لإنشاء بروتوكول لمراقبة خط الأنابيب الذي ينتقل عبر الصحراء ، مع بروتوكول اتصال فعال (استهلاك منخفض للنطاق الترددي) ، وضوء ، واستهلاك منخفض للطاقة. في ذلك الوقت كانت باهظة الثمن ، لكنها أصبحت الآن بروتوكولًا رخيصًا ومفتوحًا.
تم تحسين البروتوكول الأولي مع ظهور إصدارات جديدة مثل MQTT v3.1 (2013) بموجب مواصفات OASIS (منظمة النهوض بمعايير المعلومات المنظمة) ، إلخ. يجب أن تعلم أنه في البداية كان بروتوكولًا خاصًا بشركة IBM ، ولكن سيتم إصداره في عام 2010 ، وانتهى به الأمر ليصبح معيارًا في OASIS ...
كيف يعمل اتصال MQTT
يستخدم بروتوكول MQTT ملفات مرشح، للرسائل التي يتم إرسالها إلى كل عميل ، بناءً على الموضوعات أو الموضوعات التي يتم تنظيمها بشكل هرمي. بهذه الطريقة ، يمكن للعميل نشر رسالة حول موضوع معين. بهذه الطريقة ، سيتلقى جميع العملاء أو الأجهزة المتصلة التي تشترك في الموضوع رسائل من خلال الوسيط.
كما هو MQ ، ستبقى الرسائل في قائمة الانتظار ولا تضيع حتى يتلقى العميل هذه الرسالة.
الاتصالات ، كما أشرت أيضًا ، مصنوعة عبر TCP / IP، وسيحتفظ الخادم أو الوسيط بسجل للعملاء المتصلين. بشكل افتراضي ، ستستخدم الأجهزة منافذ الاتصال رقم 1883 ، على الرغم من أنك قد تصادف أيضًا المنفذ 8883 إذا كنت تستخدم SSL / TLS لمزيد من الأمان.
لكي يكون الاتصال ممكنًا ، لا يلزم العملاء والخوادم والمنافذ فقط. أيضا آخرون الطرود أو الرسائل المرسلة للتواصل:
- قم بتأسيس الاتصال: رسالة / حزمة CONNECT التي يرسلها العميل مع جميع المعلومات اللازمة. تتضمن هذه المعلومات معرف العميل واسم المستخدم وكلمة المرور وما إلى ذلك. يستجيب الوسيط أو الخادم بحزمة CONNACK التي ستبلغ العميل بأنه تم قبول الاتصال أو رفضه ، وما إلى ذلك.
- إرسال واستقبال الرسائل: بمجرد إنشاء الاتصال ، يتم استخدام حزم النشر أو الرسائل مع الموضوع وحمولة الرسالة المرسلة إلى الوسيط. من ناحية أخرى ، يستخدم العميل أو العملاء المهتمون حزم الاشتراك وإلغاء الاشتراك للاشتراك أو سحب اشتراكهم على التوالي. سيستجيب الوسيط أيضًا بحزمة SUBACK و UNSUBACK على التوالي للإبلاغ عن نجاح العملية التي يطلبها العميل.
- المحافظة على الاتصال: لضمان بقاء الاتصال مفتوحًا ، يمكن للعملاء إرسال حزمة PINGREQ بشكل دوري والتي سيتم مطابقتها مع حزمة PINGRESP من الخادم.
- نهاية الاتصال: عند قطع اتصال العميل ، فإنه يرسل حزمة قطع الاتصال للإبلاغ عن هذا الحدث.
أولئك الرسائل أو الحزم تلك التي تحدثت عنها لها بنية مماثلة للحزم الأخرى لبروتوكولات الشبكة الأخرى:
- رأس أو رأس ثابت: جزء ثابت يشغل ما بين 2-5 بايت. يحتوي على رمز تحكم ومعرف نوع الرسالة المرسلة وطولها. يتم استخدام ما بين 1-4 بايت لتشفير الطول ، باستخدام أول 7 بتات من كل ثماني بتات كبيانات للطول وبت إضافي من الاستمرارية لتحديد أن هناك أكثر من بايت واحد يشكل طول الرسالة.
- رأس متغير: ليس إلزاميًا دائمًا ، ولكنه اختياري. إنه موجود فقط في بعض الحزم في مواقف معينة أو رسائل محددة.
- المحتوى أو البيانات: حزم البيانات هي ما تحتوي بالفعل على الرسالة المراد إرسالها. يمكن أن يكون من بضعة كيلوبايت إلى حد 256 ميجابايت.
إذا كنت مهتمًا بالمعرفة الكود المقابل بالنظام الست عشري لأنواع الرسائل المرسلة هي:
رسالة | رمز |
---|---|
تواصل معنا | 0x10 |
كوناك | 0x20 |
للنشر | 0x30 |
باباك | 0x40 |
بوبريك | 0x50 |
بابريل | 0x60 |
بوبكومب | 0x70 |
الاشتراك | 0x80 |
سوباك | 0x90 |
إلغاء الاشتراك | 0xA0 |
إلغاء الغواصة | 0xB0 |
بينجرق | 0xC = |
بينجرس | 0xD0 |
قطع الاتصال | 0xE0 |
جودة وأمن الاتصالات
تفصيل آخر مهم للرسائل بواسطة MQTT هو ملف جودة الخدمة أو جودة الخدمة، و الامن. تعتمد متانة نظام الاتصال في حالة الأعطال وسلامته على ذلك.
فيما يتعلق بجودتها ، يمكن تحديدها 3 مستوى مختلف:
- جودة الخدمة 0 (غير معروف)- يتم إرسال الرسالة مرة واحدة فقط وفي حالة الفشل لن يتم تسليمها. يتم استخدامه عندما لا يكون حرجًا.
- جودة الخدمة 1 (إقرار): سيتم إرسال الرسالة عدة مرات حسب الحاجة لضمان تسليمها للعميل. الجانب السلبي هو أن العميل قد يتلقى نفس الرسالة عدة مرات.
- QoS 2 (مؤكد)- على غرار ما ورد أعلاه ، ولكن مضمون التسليم مرة واحدة فقط. غالبًا ما يتم استخدامه للأنظمة الأكثر أهمية حيث يلزم قدر أكبر من الموثوقية.
من ناحية أخرى ، بالنسبة ل أمن MQTT، يمكن استخدام تدابير مختلفة لضمان قوتها في هذا الصدد. كما سبق أن علقت من قبل ، يمكن ضمان مصادقة المستخدم وكلمة المرور ، مثل العديد من البروتوكولات الأخرى ، عن طريق SSL / TLS. على الرغم من أن العديد من أجهزة إنترنت الأشياء ذات السعات أو الموارد المنخفضة قد تواجه مشاكل في الحمل الزائد للعمل عند استخدام هذا النوع من الاتصال الآمن ...
لهذا السبب ، تستخدم العديد من أجهزة إنترنت الأشياء التي تستخدم MQTT كلمات المرور والمستخدمين في ملفات نص الطائرة، مما قد يجعل شخصًا ما يستنشق حركة مرور الشبكة للحصول عليها بسهولة شديدة. وإذا لم يكن ذلك كافيًا ، فيمكن أيضًا تهيئة الوسيط لقبول الاتصالات المجهولة ، مما يسمح لأي مستخدم بإنشاء اتصالات تنطوي على مخاطر أكبر.
استخدام MQTT مع الأردوينو
بالتأكيد تستطيع استخدم بروتوكول MQTT مع Arduino وغيرها من مجالس التطوير ، بالإضافة إلى Rapsberry Pi ، إلخ. للقيام بذلك ، يجب عليك تزويد لوحة Arduino الخاصة بك بالاتصال ، إذا لم يكن بها. أيضا المكتبة عميل Arduino لـ MQTT سوف تساعدك في هذه المهام. هذه المكتبة متوافقة مع:
- اردوينو يون
- اردوينو WiFi (درع)
- اردوينو إيثرنت (درع)
- وحدة ESP8266
- إنتل جاليليو / إديسون
- رابسبيري بي
- ...
في أقرب وقت إلى الكود لاستخدام MQTT في بعض التطبيقات ، الحقيقة هي أنه بسيط. في صورة فريتزينج يمكنك رؤية لوحة Arduino UNO التي تمت إضافة الاتصال عن طريق Arduino Ethernet وتم توصيله أيضًا جهاز استشعار DHT22 للرطوبة ودرجة الحرارة، على الرغم من أنه كان من الممكن أن يكون أي شيء آخر ...
حسنًا ، مع ذلك ، بالنسبة للرمز الذي يجب أن تنشئه اردوينو إيد للعمل مع بروتوكول MQTT على Arduino ، الأمر بهذه البساطة:
- إلى إرسال الرسائل MQTT
#include <SPI.h> #include <Ethernet.h> #include <PubSubClient.h> #include <DHT.h> #define DHTPIN 2 #define DHTTYPE DHT22 // Direccion MAC del adaptador Ethernet byte mac[] = { 0xCE, 0xAB, 0x0E, 0x3F, 0xFE, 0xD4 }; // IP del servidor (broker) IPAddress mqtt_server(192, 168, 1, 4); // Topic o tema con el que se trabaja const char* topicName = "test"; DHT dht(DHTPIN, DHTTYPE); EthernetClient ethClient; PubSubClient client(ethClient); void setup() { Serial.begin(9600); if (Ethernet.begin(mac) == 0) { Serial.println("Fallo en Ethernet usando DHCP"); } // Puerto 1883 de comunicación client.setServer(mqtt_server, 1883); dht.begin(); } void loop() { if (!client.connected()) { Serial.print("Conectando ...\n"); client.connect("Cliente Arduino"); } else { // Envío de informacion del sensor de temperatura y humedad float temp = dht.readTemperature(); char buffer[10]; dtostrf(temp,0, 0, buffer); client.publish(topicName, buffer); } // Tiempo entre envíos en ms (cada 10 segundos) delay(10000); }
- إلى استقبال الرسائل بواسطة MQTT ما عليك سوى اللوحة Arduino UNO والاتصال ، مع Arduino Ethernet أو أي عنصر آخر. بالنسبة للكود ، سيكون المثال:
#include <SPI.h> #include <Ethernet.h> #include <PubSubClient.h> // Direccion MAC del adaptador Ethernet byte mac[] = { 0xCE, 0xAB, 0x0E, 0x3F, 0xFE, 0xD4 }; // IP del servidor (broker) IPAddress mqtt_server(192, 168, 1, 4); // Topic o tema con el que trabajr const char* topicName = "test"; EthernetClient ethClient; PubSubClient client(ethClient); void callback(char* topic, byte* payload, unsigned int length) { Serial.print("El mensaje ha llegado ["); Serial.print(topic); Serial.print("] "); int i=0; for (i=0;i<length;i++) { Serial.print((char)payload[i]); } Serial.println(); } void setup() { Serial.begin(9600); if (Ethernet.begin(mac) == 0) { Serial.println("Fallo en Ethernet al usar configuración DHCP"); } client.setServer(mqtt_server, 1883); client.setCallback(callback) } void loop() { if (!client.connected()) { Serial.print("Conectando ..."); if (client.connect("rece_arduino")) { Serial.println("conectado"); client.subscribe(topicName); } else { delay(10000); } } // Cliente a la escucha client.loop(); }
لمزيد من المعلومات ، يمكنك تحميل مجانا لنا دليل PDF مع دورة Arduino IDE لبدء البرمجة.