نقوم بتجميع أبسط شبكة ZigBee ، برنامج تحت Mbed ، نتواصل من خلال MQTT

هذه المقالة عبارة عن ورشة عمل تدريبية رائعة للمبتدئين حول استخدام وحدة XBee بالاقتران مع وحدة التحكم الدقيقة التي تحتوي على نظام التشغيل Mbed. زيجبي هو معيار الجذور طويلة وراسخة في الذكية النظم الرئيسية (على سبيل المثال، يتم استخدامه جنبا إلى جنب مع Z-الموجة في محور سامسونج SmartThings، يرجى الاطلاع على المادة )، يتميز انخفاض استهلاك الطاقة، وسهولة الاستخدام، وهذا هو الأكثر أهمية، والقدرة على خلق شبكات شبكة التكوين الذاتي. سترى من ورشة العمل أن الأمر كذلك بالفعل - سنلقي نظرة على هيكل مثل هذه الشبكة من خلال أداة مصور ملائمة.

من المفترض أنك تعرف بالفعل ما هو ZigBee وما هو. أنت الآن تريد توصيل أول وحدة XBee الخاصة بك وحل مشاكلك معها ، دون الدخول في برمجة الوحدة نفسها ، ولكن فقط استخدامها كواجهة اتصال. في النهاية ، سوف نرسل جميع البيانات عبر بوابة MQTT مؤقتة في أي مكان ، حتى إلى خادم محلي ، حتى إلى الإنترنت. قررنا أن نظهر كل شيء على مثال Mbed كأبسط وأكثر سهولة للمبتدئين RTOS. ستكون مقتنعًا بأن كل شيء يعمل "خارج الصندوق" ، ويمكنك البدء فورًا في إنشاء مشروعك ، حتى لو كنت تتعامل مع Arduino فقط من قبل.



يتكون الدليل من الأجزاء التالية:

  1. اتصال وتكوين وحدة XBee
  2. قم بتوصيل الوحدات بالشبكة
  3. نقوم بتكوين الوحدة النمطية دون إزالتها من الدرع
  4. استرجاع البيانات
  5. إرسال البيانات
  6. إنشاء بوابة MQTT بسيطة

لكن أولاً ، قائمة المكونات: ما هو مستصوب من أجل القيام بكل ما سبق.

المكونات المطلوبة


  • لوحان متوافقان مع Mbed. نوصي بأن تكون لوحة التدريب STM32 Nucleo غير مكلفة نسبيًا وشعبية للأغراض التعليمية. عملية البرمجة هناك مبسطة إلى أقصى حد: اجمع البرنامج في IDE مجاني عبر الإنترنت ، وقم بتنزيل البرامج الثابتة المجمعة و "أفلتها" على اللوحة ، والتي ستظهر في النظام كمحرك أقراص محمول. ما هو النموذج المحدد الذي يجب اتخاذه ليس مهمًا ، ولكن لا تأخذ النموذج الأقدم ، انتبه إلى مقدار الذاكرة. على سبيل المثال ، F401RE - نعطي فقط من أجل التحديد ، حتى لا تخلط في تنوعها وفي البداية رموز أبجدية غير مفهومة لمعالجات STM.


  • XBee-. Digi. «» , , , MBee, , , , . / : , . / Pro: , , Pro .

  • XBee Shield V2 ( SeeedStudio). - , RX TX XBee-.

  • محول USB-UART واحد مع موصل لـ XBee. هناك حاجة للتكوين الأولي. وحدات XBee نفسها ليست مجهزة بواجهة USB (لا علاقة لها بها). مطلوب USB فقط وحصري فقط للاتصال بين الوحدة والكمبيوتر ، وفي الجهاز يمكن أن يعمل على UART أبسط بكثير.

    يبلغ حجم فتحة وحدات XBee 2.0 مم - بالنسبة للإلكترونيات فهي غير قياسية ، في النظام المتري (نحن معتادون عادة على رؤية الخطوة 2.54 وفقًا للمعايير الأمريكية). لذلك ، لسوء الحظ ، لا يتم إدخال هذه الوحدات في اللوح وتحتاج دائمًا إلى محول.

    أي محول مناسب هنا ، أخذنا هذا المحول من Waveshare:


اتصال وتكوين وحدة XBee


إن أبسط شيء يمكنك القيام به مع الوحدة هو توصيله بالكمبيوتر مباشرة عبر USB. سوف نحصل على الفور على معلمات التكوين الخاصة به.

قم بتثبيت XCTU


للعمل مع XBee ، هناك برنامج XCTU رسمي. تنزيله وتثبيته. تقول الوثائق أنه في Ubuntu تحتاج إلى إضافة مستخدم إلى مجموعة dialoutللعمل مع منافذ ليست من مستخدم خارق - قم بذلك إذا لم تكن قد فعلت ذلك بعد:

sudo usermod -a -G dialout <username>

قم بتنزيل الأرشيف المضغوط من الرابط ، وسوف يحتوي على ملف .run. يجب أن يكون قابلاً للتنفيذ (عبر chmod +x _وحدة التحكم أو: زر الماوس الأيمن - خصائص - أذونات) وتشغيله ./40002881_V.run.

من المهم أن تبدأ التثبيت ليس من الجذر (بدون sudo) ، وإلا ستكون هناك مشاكل لاحقًا.

يبدو الإعداد مثل هذا:



برنامج XCTU


بعد التثبيت ، يمكنك بدء البرنامج عن طريق تشغيل الملف appفي الدليل حيث قمت بتثبيت البرنامج (افتراضيًا ~/Digi/XCTU-NG).
 
سيكون المظهر كما يلي:



في هذا البرنامج ، يمكنك إضافة الوحدة النمطية الخاصة بك المتصلة بمنفذ USB عبر محول. انقر فوق الزر اكتشاف باستخدام عدسة مكبرة. تنبثق نافذة تطلب منك تحديد منفذ - كما ترى ، اكتشف البرنامج بشكل صحيح المنفذ في النظام /dev/ttyUSB0، وهذا هو محول USB-UART الخاص بنا.



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



ونتيجة لذلك ، إذا كان كل شيء ناجحًا ، فسيُطلب منك تحديد الوحدة النمطية التي تم العثور عليها:



لوحظ خطأ صغير: في بعض الأحيان لم تكن الوحدة بسرعة غير قياسية ، ساعدت إعادة تعيين الوحدة يدويًا باستخدام زر إعادة الضبط أثناء البحث وإعادة تعيين معدل الباود إلى قياسي (9600).

تغيير معلمات الوحدة


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

معرف الشبكة - معرف PAN. مفتاح شبكة مشترك ، يجب أن يكون هو نفسه لجميع الأجهزة بحيث تكون متصلة بشكل مستقل بالشبكة. ضع أي رقم ، في حالتنا فعلنا 42.



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

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



AP - تمكين API.وضع العملية. يمكن أن تعمل وحدات XBee في وضعين: AT أو API. يعتبر وضع AT أسهل للمبتدئين ، فهو عبارة عن استبدال شفاف للمنفذ التسلسلي والعمل مع الوحدة النمطية من خلال أوامر AT. ومع ذلك ، فإن وضع واجهة برمجة التطبيقات (API) أكثر ثراءً في الوظائف ، فهو يسمح لك بتكوين الوحدات عن بُعد ، ويحتوي على عنوان المرسل ، ويعيد حالة تسليم الطرد ، وأكثر من ذلك بكثير. بالإضافة إلى ذلك ، تفترض المكتبات للتفاعل مع XBee أن الجهاز مستخدم في وضع API. لذلك ، استبدلها على الفور بوضع API ، ويتم ذلك عن طريق تعيين الوحدة في الحقل المقابل.



اسم الوحدة النمطية هو معرف العقدة. خيار مفيد لمنح الوحدة الخاصة بك اسمًا يمكن قراءته بواسطة الإنسان. دعونا نعطيه مثل هذا الاسم - المنسق.



بعد ذلك ، يمكنك وميض الإعدادات في الوحدة بالضغط على الزر بقلم رصاص:



2. قم بتوصيل الوحدات بالشبكة


سنرى الآن نوع الشبكة التي نحصل عليها إذا قمنا بتكوين ثلاث وحدات. يحتوي برنامج XCTU على مصور شبكة مناسب إلى حد ما ، وسوف نرى بوضوح الطوبولوجيا.

سنقوم بتكوين الوحدات الثلاث جميعها بالمعايير التالية:
  • معرف PAN - العدد الإجمالي ، على سبيل المثال 42
  • AP (تمكين واجهة برمجة التطبيقات) - تم ضبطه على 1 (العمل في وضع واجهة برمجة التطبيقات)
  • NI (معرف العقدة) - أعط الوحدات أسماء مفهومة (منسق ، مصباح ومفتاح ، إذا كنا نفعل ، على سبيل المثال ، نموذج لنظام المنزل الذكي).
  • CE (منسق تمكين) - قم بتعيين إحدى الوحدات إلى 1 ، وستكون المنسق.

ثم قم بتطبيق الطاقة على جميع الوحدات. ضعهم على هذا النحو: سيكون المنسق في محول USB-UART ، وسيتم وضع الجهازين الآخرين (أجهزة التوجيه) على لوحات XBee Shield أعلى Nucleo.

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

تبدو هكذا. انقر فوق الزر "اكتشاف عقد الراديو في نفس الشبكة".



سترى أن وحدتين تم اكتشافهما تلقائيًا وإضافتهما:


ويمكنك تغيير معلماتهما على الفور! 

ما لا يزال رائعًا: يمكنك الآن رؤية خريطة الشبكة إذا قمت بالتبديل إلى وضع عمل الشبكة في أعلى اليمين.



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

3. قم بإعداد وحدة XBee دون إزالتها من الدرع


بالطبع ، سيكون من المثير للاهتمام العمل مع وحدة XBee ليس من خلال الكمبيوتر ، ولكن من خلال التحكم فيها باستخدام برنامج على وحدة التحكم الدقيقة. أي توصيله بلوحة STM32Nucleo.
دعونا نناقش كيف يمكن لوحدة XBee التواصل مع وحدة التحكم الدقيقة. ولنبدأ بمهمة صغيرة: كيفية تكوين وحدة نمطية دون إزالتها من درع التوسيع؟ يجب أن تعترف بأن نقل الوحدة ذهابًا وإيابًا غير مريح ، وفي نفس الوقت تريد تجربة المعلمات ومن الغريب أنك تحتاج إلى وحدة USB-UART منفصلة ، لأنه من الناحية النظرية هناك واحدة في لوحة STM32Nucleo.

الحل بسيط: نحتاج إلى تحويل لوحة Nucleo إلى جسر بين وحدة XBee ومحول USB على اللوحة.

وصف عام للفكرة


يحتوي متحكم STM32 الذي نستخدمه على العديد من واجهات UART على متن الطائرة. تمثل كل واجهة مثل قناة اتصال. واحد منهم متصل بمحول USB-UART حتى نتمكن من التواصل مع الكمبيوتر عبر USB في المحطة الطرفية. لم يتم استخدام اثنين آخرين حتى الآن. سنقوم بتوصيل وحدة XBee بأحدها ، والذي يحتوي أيضًا على قناة اتصال. يمكنك اختيار أي UART ، لقد اخترنا لتعريف UART1.

يمكن عرض Pinout بالميغابايت في أعلى اليمين ، بالضغط على زر تحديد اللوحة ، ثم على علامة التبويب Pinout. وبعيدًا عن العادة ، قد يكون من الصعب جدًا إدراك هذه الصورة الملونة. هناك الكثير من الأشياء هنا ، نظرًا لأن اللوحة تحتوي على العديد من الواجهات ، وهناك رقمان لرقم التعريف الشخصي: بالنسبة إلى وحدة التحكم الدقيقة (PA_5 ، PA_6 - ترقيم دبوس) ، ونسبة إلى اللوحة (D13 ، D12 - النقوش على لوحة Nucleo ، نفس الأرقام بالقرب من المحطات الطرفية).


 
اتضح أنه على وحدة التحكم الدقيقة ، ستتواصل واجهة UART1 مع وحدة XBee-and و UART2 - كما كان من قبل ، مع الكمبيوتر. سيعيد الرمز الداخلي توجيه UART1 إلى UART2 والعكس صحيح.



بواسطة الاتصالات ، ستبدو كما يلي:



صنع "جسر" من متحكم


في حالتنا ، يمكننا القفز على الدرع تعيين الأرقام التي نريد توصيل وحدة ZigBee. سيتم توصيل وحدة اتصالات TX بالطرف 2 من اللوحة (PA_9 على وحدة التحكم الدقيقة) ، و RX إلى الطرف 8 (المعروف أيضًا باسم PA_10).

سيبدو مثل هذا:



الرمز الذي أخذناه يسمى الجسر التسلسلي. هذا هو "الجسر" بين قناتي الاتصال. نقوم بتحميل الكود في وحدة التحكم الدقيقة ، التي تقوم بإعادة توجيه كل ما يتعلق بالإدخال من الكمبيوتر عبر UART2 ، إلى UART1 ، والعكس صحيح. كما لو قمنا بإدخال أنبوب بين مصدرين للمعلومات (سوف يفهم Linuxsoids). قمنا بتوصيل وحدة XBee بـ UART1.
الرمز بسيط للغاية ، والشيء الوحيد الذي تحتاج إلى تغييره هو أرقام PIN التي يتصل بها الجهاز. أي ، اجعلهما PA_9 و PA_10 ، كما هو موضح أعلاه.
#include "mbed.h"
// Make a serial bridge from a serial I/O device on mbed to the PC
Serial pc(USBTX, USBRX); // tx, rx
Serial device(PA_9, PA_10); // tx, rx
// Defaults to 9600 baud on each device - use .baud(baudrate) to change
int main() {
 pc.printf("Hello!");
 while(1) {
   if(pc.readable()) {
     device.putc(pc.getc());
   }
   if(device.readable()) {
     pc.putc(device.getc());
   }
 }
}

من المهم أنه إذا خلطت ترتيب الاستنتاجات - على سبيل المثال ، فأنت تخطئ وتكتب PA_10 ، PA_9 بدلاً من PA_9 ، PA_10 - الأمر الخاطئ ، لن يقوم المترجم بإبلاغك عن خطأ ، وسيعرض البرنامج خطأ في وحدة التحكم عند إعادة التشغيل:
pinmap not found for peripheral

ولن نتقدم ، أي ، من حيث المبدأ ، لن ينفع شيء.

بعد تنزيل هذا الرمز وتعيين وصلات العبور على الدرع بشكل صحيح ، يمكنك الاتصال بأمان بوحدة XBee من الكمبيوتر ، تمامًا كما فعلت سابقًا مع محول USB-UART دون إزالته من الدرع. سيتم الكشف عنها بانتظام من قبل برنامج XCTU.

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

4. الحصول على البيانات


دعونا نلقي نظرة على مثالين بسيطين: كيفية تلقي البيانات وإرسالها على مستوى وحدة التحكم الدقيقة ، باستخدام وحدة XBee كواجهة اتصال خارجية.

هناك مكتبة رسمية من الشركات المصنعة - شركات Digi. يقع في مستودع Mbed ، وهناك تعليقات مفيدة حول استخدام ومنطق الشفرة.

أولاً ، سنتعلم كيفية الحصول على البيانات - هناك مثال أسهل. سيكون لدينا وحدة XBee متصلة بمحول USB-UART ، ونرسل تحية إلى لوحة Nucleo ، وسوف تطبع هذه التحية إلى وحدة التحكم.



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

إصلاح المكتبات لوحدات S2C


ضع في اعتبارك أنه إذا كان لديك وحدات سلسلة S2C:



فبدلاً من المكتبة القياسية ، تحتاج إلى استخدام الإصلاح: XBeeLib_Fixed . خلاف ذلك ، لن تعمل هذه البرامج. يتم إضافته إلى المشروع ببساطة عن طريق إزالة مكتبة XBeeLib من هناك ، واستيرادها إلى مشروع XBeeLibFix. لا شيء يحتاج إلى مزيد من التغيير.

لذلك: استيراد هذه المكتبة إلى المترجم عبر الإنترنت:



ستظهر نافذة استيراد المشروع. هناك تحتاج إلى اختيار الهدف - حيث نستورد:



كمشروع الهدف ، حدد مثالنا XBeeZB_Receive_Data.



بعد ذلك سيتم استيراد المكتبة إلى المشروع ، ثم بحركة جريئة نحذف الإصدار الخاطئ من XBeeLib.



تجميع المثال


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

من أجل تجميع المثال ، تحتاج إلى كتابة الاستنتاجات التي نتحملها في التواصل مع وحدة XBee ، لأن البرنامج لا يعرف الاستنتاجات التي قمنا بتوصيل الجهاز بها.

لذلك ، نذهب إلى ملف config.h والخطوط الموجودة فيه:

//#define RADIO_TX NC /* TODO: specify your setup's Serial TX pin connected to the XBee module DIN pin */
//#define RADIO_RX NC /* TODO: specify your setup's Serial RX pin connected to the XBee module DOUT pin */

غير مبالٍ ، وبدلاً من NC نكتب ، وفقًا للاستنتاجات التي ربطناها مع وصلات العبور:

#define RADIO_TX PA_9
#define RADIO_RX PA_10

وبالمثل ، نقوم بتعديل الخطوط:

//#define DEBUG_TX NC /* TODO: specify your setup's Serial TX for debugging */
//#define DEBUG_RX NC /* TODO: specify your setup's Serial RX for debugging (optional) */

نحن نكتب:

#define DEBUG_TX USBTX
#define DEBUG_RX USBRX

إذا واجهت خطأ أثناء device.hالترجمة لا يمكنك العثور عليه ، فما عليك سوى تحديث مكتبة Mbed في شجرة المشروع (انقر بزر الماوس الأيمن عليها -> تحديث).

وبعد ذلك ، سيتم تجميع البرنامج بنجاح ، ويمكنك تنزيله على اللوحة.

مثال جار


بعد الاطلاع على وحدة التحكم التي يكتبها مجلس Nucleo ، سترى ما يلي:



كيف نرسل البيانات؟ الخيار الأسهل: من خلال وحدة التحكم في برنامج XCTU. اختر في القائمة الرئيسية للبرنامج: أدوات - إرسال الحزم.



يوجد في الأسفل نافذة تحتوي على الكلمات "إرسال الحزم". قم بإنشاء حزمة جديدة عن طريق النقر فوق "زائد" على اليمين. ستظهر نافذة لإنشاء حزمة جديدة. حدد علامة التبويب HEX هناك.



أدخل هناك مثل إرسال البيانات:
7E 00 19 10 01 00 00 00 00 00 00 FF FF FF FE 00 00 48 65 6C 6C 6F 20 58 42 65 65 21 5A
(باستخدام زر "إرسال الحزمة المحددة" على يمين قائمة الحزمة)

سترى النتيجة في وحدة التحكم في وحدة الاستماع:



يرجى ملاحظة أنه قام بطباعة الجزء الأخير فقط من مجموعة البايت التي أرسلتها. هذه هي الحمولة الفعلية للرسالة. لاحظ أيضًا أنه إذا أرسلت "وحدات بايت فقط" (أي مجموعة عشوائية من وحدات البايت) ، فلن يقوم جهاز الاستقبال بإخراجها.

إذا وضعت مجموعة من وحدات البايت: 
48 65 6C 6C 6F 20 58 42 65 65 21
في أي محول HEX-ASCIII (على سبيل المثال ، واحد ) ، فتأكد من أنه يعني "Hello XBee!"

مهمة بسيطة للغاية للتنفيذ المستقل: تعديل رمز المثال بحيث يعرض نص الرسالة في ASCII ، وليس HEX ، ويمكنك قراءة هذا النص في النهاية الطرفية.

5. إرسال البيانات


قياسا على المثال السابق ، فإننا ننظر الآن في إرسال البيانات.



كل شيء هنا ، كما في المثال السابق. فقط مع الاختلاف الذي نفتحه الآن مثال XBeeZB_Send_Data.

تجميع المثال


من المهم أنه إذا كان لديك وحدة S2C (مكتوبة بوضوح عليها) ،



فسوف تقوم مرة أخرى بتوصيل المكتبة بإصلاح ، وإلا فلن ينفعك شيء. يتم وصف كيفية القيام بذلك في المثال السابق. 

أيضًا ، هنا لتجميع ناجح ، تحتاج إلى تحديد دبابيس وحدة التحكم المستخدمة ، يمكنك ببساطة نسخها من المثال السابق.

نحن ننظر إلى رمز المثال نفسه. فإنه mainيستخدم عدة طرق لإرسال البيانات. اختر أبسط طريقة: أرسل البيانات إلى المنسق. لا نحتاج حتى إلى تسجيل عنوان المنسق ، لأنه مسجل بالفعل على الشبكة. لذلك ، دون تغيير العينة ، نعلق بينما جميع الأسطر في النهاية:
send_data_to_coordinator(xbee);
//send_broadcast_data(xbee);
//send_data_to_remote_node(xbee, remoteDevice);
//send_explicit_data_to_remote_node(xbee, remoteDevice);

وعندما تبدأ ، سترى هذا:



(إذا لم تره ، فما عليك سوى إعادة تشغيل اللوحة)

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



يمكنك الاطلاع على معلومات تفصيلية حول كل حزمة على الشبكة عن طريق تحديدها في القائمة على اليسار:



بالتمرير إلى نهاية محتويات الحزمة ، سترى سطرًا يحتوي على النص "send_data_to_coordinator":



يمكنك تجربة طرق أخرى لإرسال البيانات ، ولكن هناك (على سبيل المثال ، لإرسالها إلى عقدة محددة منفصلة) تحتاج إلى تسجيل عنوان العقدة. يمكنك مشاهدة عناوين جميع الوحدات في برنامج XCTU. يتم وصف كيفية تسجيل عناوين محددة بشكل شامل في المثال.

6. نصنع بوابة MQTT


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

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


قم بتثبيت وتكوين XBMQ


البرنامج الذي سنستخدمه كبوابة MQTT يسمى XBMQ ، إنه مفتوح ومجاني. موجود في نسختين:

سيتم النظر في إصدار Java ، على الرغم من أن هذا ليس أساسيًا للغاية: لن نقوم ببرمجته على أي حال ، سنقوم فقط بتثبيته واستخدامه.
لكي يعمل البرنامج ، ستحتاج إلى مكتبة RXTX ، يمكن تثبيته ببساطة من المستودع:
sudo apt-get install librxtx-java

وبالطبع ، أنت بحاجة إلى JDK (Java Development Kit). وهو موجود في نسختين - من Oracle و OpenJDK ، يوصى باستخدام الثاني. على الأرجح ، OpenJDK مثبت بالفعل على نظامك ؛ إذا لم يكن كذلك ، فأعد تثبيته. تحتاج Java إلى 8 كحد أقصى ، حيث يتم استبعاد javax.xml.bind من Java 11 وتحتاج إلى اختيار بديل باستخدام JDK-8 كخيار افتراضي ، أو إنشاء تكوين لهذه الحالة.

تنزيل مستودع برنامج XBMQ:
git clone https://github.com/angryelectron/xbmq-java

بعد تنزيل أكواد المصدر ، سنقوم بجمع الملف الثنائي للبرنامج. الفريق
ant dist

سيتم تجميع مشروع لجميع أنظمة التشغيل الرئيسية. سيكون البرنامج المترجم النهائي في المجلد dist.
الآن تكوين هذا البرنامج. افتح الملف
dist/xbmq.properties

ونرى هناك:
#
# Xbmq Properties.
#
#port = /dev/ttyUSB0
#baud = 9600
#rootTopic = ab123
#broker = tcp://test.mosquitto.org:1883
#username = user
#password = password

uncomment وتغيير المعلمات الخاصة بك. المعلمات هي كما يلي: منفذ اتصال منسق ZigBee والسرعة وموضوع الجذر (ستقع جميع البيانات فيه) وعنوان خادم MQTT واسم المستخدم وكلمة المرور (إذا كان الخادم يتطلبها).

في هذا المثال ، تم تغيير عنوان الخادم فقط - إلى خادم mqtt المحلي (البعوض القياسي من Linux). كل شيء آخر ترك بشكل افتراضي:

port = /dev/ttyUSB0
baud = 9600
rootTopic = ab123
broker = tcp://127.0.0.1:1883
username = user
password = password

قبل الخطوة التالية ، يجب عليك تثبيت وتشغيل خادم البعوض المحلي MQTT: 
sudo apt-get install mosquitto


إطلاق XBMQ


أخيرا ، يمكن إطلاق البرنامج. بعد توصيل محول USB-UART مع إدخال وحدة المنسق ، قم بتشغيل البرنامج:
./dist/xbmq.sh

عند تشغيل البرنامج النصي ، نرى السطر في وحدة التحكم:
INFO - Starting XBMQ gateway ab123/0013A2004154EA46

أخيرًا - هذا هو بالضبط عنوان منسقنا. إذا اشتركت في جميع المواضيع مع عميل MQTT خارجي ، فسوف ترى على الفور رسالتين:
  • في الموضوع ab123/0013A2004154EA46/online- سيكون 1 ، هذه هي الوصية الأخيرة (مثال جيد على كيفية استخدام هذه المعلمات "الخاصة" في الحياة الواقعية)
  • ab123/0013A2004154EA46/logسيحتوي الموضوع على نفس عبارة التصحيح "جاري بدء بوابة XBMQ ..." التي رأيتها بالفعل في وحدة التحكم

حاول الآن إرسال رسالة من وحدة XBee خارجية أخرى - على سبيل المثال ، خذ مثالًا مع إرسال البيانات.

ونتيجة لذلك ، في برنامج MQTT.fx ، إذا اشتركت في جميع المواضيع (#) ، فسترى هذا:


نافذة برنامج MQTT.fx.

وهذا يعني أنه من خلال بدء المثال الذي تمت دراسته سابقًا بإرسال رسالة إلى المنسق ، سنرى هذا النص ("send_data_to_coordinator") كجزء حزمة MQTT. الموضوع الرئيسي المشترك بالنسبة لنا هو الموضوع المحدد في تكوين البرنامج ( ab123 ، يمكنك تغييره إلى موضوعك الخاص). بعد ذلك يأتي عنوان المنسق ، ثم عنوان الوحدة التي جاءت منها الرسالة. وأخيرًا ، يسمى هذا الموضوع DataOut ، لأنه بيانات صادرة. 

بالطبع ، سترى مثل هذه الصورة في أي عميل MQTT آخر ، سواء كانت MQTTLens أو حتى مجردmosquitto_subفي وحدة التحكم.

زوجان من التعليقات النهائية:
  • بطريقة جيدة ، يجب أن يعمل هذا البرنامج في وضع الخفي. يوجد ملف xbmqd لهذا ، وتقول README كيفية استخدامه.
  • ضع في اعتبارك أنه نظرًا لأنه xbmqيحتوي على المنفذ ، لا يمكننا تشغيل هذا البرنامج في نفس وقت XCTU.

الآن يمكنك العمل مع نظامك باستخدام بروتوكول MQTT وكتابة برامج معقدة ومثيرة للاهتمام!


تاتيانا فولكوفا - مؤلفة البرنامج التدريبي على إنترنت الأشياء تتبع "Samsung IT Academy" ، المتخصصة في برامج المسؤولية الاجتماعية للشركات في مركز أبحاث سامسونج

All Articles