إنشاء شبكة سلسلة محادثات باستخدام لوحات nRF52840 وOpenThread

1- مقدمة

26b7f4f6b3ea0700.png

تم إصدار Openthread من Google كبروتوكول مفتوح المصدر لبروتوكول شبكات thread®. أطلقت أجهزة Google Nest Openthread لإتاحة التكنولوجيا المُستخدَمة في منتجات Nest على نطاق واسع لمطوّري البرامج لتسريع تطوير المنتجات للمنازل المتصلة.

تحدد مواصفات سلسلة المحادثات بروتوكول اتصال جهاز لاسلكي موثوق به وآمن ومنخفض الطاقة يستند إلى IPv6 للتطبيقات المنزلية. وتنفّذ Openthread جميع طبقات الاتصال بسلاسل المحادثات، بما في ذلك IPv6 و6LoWPAN وIEEE 802.15.4 مع أمان MAC و"إنشاء شبكة متداخلة" و"توجيه الشبكة المتداخلة".

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

4806d16a8c137c6d.jpeg

ما ستتعرَّف عليه

  • إنشاء برامج ثنائية من سطر الأوامر (CLI) ووميضها في لوحات مطوّري البرامج
  • إنشاء RCP الذي يتألف من جهاز يعمل بنظام التشغيل Linux ولوحة مطوّري البرامج
  • التواصل مع RCP باستخدام Openthread Daemon وot-ctl
  • إدارة عُقد سلسلة المحادثات يدويًا باستخدام شاشة GNU وOpenCL CLI
  • تأمين توزيع الأجهزة على شبكة سلسلة محادثات
  • آلية عمل البث المتعدد لبروتوكول IPv6
  • تمرير الرسائل بين عُقد سلسلة المحادثات باستخدام UDP

المتطلبات

الأجهزة:

  • 3 لوحات نورديك شبه موصلية nRF52840
  • 3 كابلات USB إلى Micro-USB لتوصيل اللوحات
  • جهاز يعمل بنظام التشغيل Linux يتضمّن 3 منافذ USB على الأقل

برامج:

  • مجموعة أدوات GNU
  • أدوات سطر أوامر nRF5x في الشمال
  • برنامج Segar J-Link
  • OpenThread
  • Git

2- البدء

محاكاة Openthread

قبل البدء، قد تحتاج إلى إجراء درس تطبيقي حول محاكاة سلسلة OpenOpen، للتعرّف على مفاهيم سلسلة المحادثات الأساسية وواجهة سطر الأوامر (CLI) على OpenThread.

محطات منافذ تسلسلية

يجب أن تكون على دراية بكيفية الاتصال بمنفذ تسلسلي عبر محطة دفع. يستخدم هذا الدرس التطبيقي حول الترميز شاشة GNU ويقدّم نظرة عامة على الاستخدام، ولكن يمكن استخدام أي برنامج طرفي آخر.

جهاز Linux

تم تصميم هذا الدرس التطبيقي لاستخدام آلة Linux i386 أو x86 للعمل كمضيف لجهاز سلسلة المحادثات ذات التردد اللاسلكي (RCP)، ولتثبيت جميع لوحات تطوير سلاسل المحادثات. تم اختبار جميع الخطوات على Ubuntu 14.04.5 LTS (Trusty Tahr).

لوحات شبه عمودية nRF52840 لأمريكا الشمالية

يستخدم هذا الدرس التطبيقي ثلاث لوحات nRF52840 PDK.

a6693da3ce213856.png

نستخدم SEGGER J-Link لبرمجة اللوحات nRF52840 التي تحتوي على وحدات JTAG المتاحة. ثبِّت هذا الإعداد على جهاز Linux.

نزِّل الحزمة المناسبة لجهازك وثبِّتها في المكان المناسب. دَهْ /opt/SEGGER/JLink عَلَى Linux.

تثبيت أدوات سطر الأوامر nRF5x

تسمح لك أدوات سطر الأوامر nRF5x بتشغيل برنامج ثنائي من OpenThread إلى لوحات nRF52840. ثبِّت الإصدار المناسب من nRF5x-Command-Line-Tools-<OS> على جهازك الذي يعمل بنظام التشغيل Linux.

ضع الحزمة المستخرجة في المجلد الرئيسي ~/.

تثبيت سلسلة أدوات ARM GNU

يتم استخدام أداة ARM GNU للبناء.

ننصحك بوضع الأرشيف المستخرج في /opt/gnu-mcu-eclipse/arm-none-eabi-gcc/ على جهاز Linux. اتّبع التعليمات الواردة في ملف readme.txt للأرشيف للحصول على تعليمات التثبيت.

تثبيت الشاشة (اختياري)

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

$ sudo apt-get install screen

3. مستودعات منسوخة

OpenThread

استنساخ وتثبيت Openthread. تتضمَّن الأوامر script/bootstrap تثبيت سلسلة الأدوات وضبط البيئة بشكلٍ صحيح:

$ mkdir -p ~/src
$ cd ~/src
$ git clone --recursive https://github.com/openthread/openthread.git
$ cd openthread
$ ./script/bootstrap

إنشاء برنامج OpenOpen Daemon:

$ script/cmake-build posix -DOT_DAEMON=ON

أنت الآن مستعد لإنشاء OpenOpen ووميضه في لوحات nRF52840.

4. إعداد RCP Joiner

الإصدار والفلاش

يمكنك إنشاء مثال Openthread nRF52840 باستخدام وظيفة الانضمام ووظيفة USB الأصلية. يستخدم الجهاز دور "الانضمام" لإجراء مصادقة آمنة وإسناده إلى شبكة سلسلة محادثات. يتيح USB الأصلي استخدام CDC ACM كنقل تسلسلي بين nRF52840 والمضيف.

يُرجى دائمًا محو بيانات إصدارات الإصدارات السابقة أولاً من خلال تشغيل rm -rf build.

$ cd ~/src
$ git clone --recursive https://github.com/openthread/ot-nrf528xx.git
$ cd ot-nrf528xx
$ script/build nrf52840 USB_trans

انتقِل إلى الدليل باستخدام البرنامج الثنائي من OpenCP RCP، وحوِّله إلى تنسيق ست عشري:

$ cd ~/src/ot-nrf528xx/build/bin
$ arm-none-eabi-objcopy -O ihex ot-rcp ot-rcp.hex

وصِّل كابل USB بمنفذ تصحيح أخطاء USB الصغير بجوار دبوس الطاقة الخارجي على لوحة nRF52840، ثم وصِّله بجهاز Linux. اضبِط مفتاح تبديل nRF للطاقة على لوحة nRF52840 على القيمة VDD. عند توصيل جهاز LED5 بشكل صحيح، يكون مفعّلاً.

20a3b4b480356447.png

إذا كانت هذه هي اللوحة الأولى المتصلة بجهاز Linux، ستظهر كمنفذ تسلسلي /dev/ttyACM0 (تستخدم جميع الألواح nRF52840 ttyACM لمعرّف المنفذ التسلسلي).

$ ls /dev/ttyACM*
/dev/ttyACM0

لاحظ الرقم التسلسلي للوحة nRF52840 المُستخدَمة لبروتوكول RCP:

.c00d519eبيو7e5f0.jpeg

انتقِل إلى موقع أدوات سطر أوامر nRFx، وحمِّل الملف السداسي العشري لـ OpenThread RCP إلى لوحة nRF52840، باستخدام الرقم التسلسلي للوحة. يُرجى العِلم أنه في حال عدم وضع علامة --verify، ستظهر رسالة تحذير تفيد بأن عملية الفلاش قد تتعذّر بدون خطأ.

$ cd ~/nrfjprog/
$ ./nrfjprog -f nrf52 -s 683704924  --verify --chiperase --program \
       ~/src/ot-nrf528xx/build/bin/ot-rcp.hex --reset

يتم إنشاء الناتج التالي عند النجاح:

Parsing hex file.
Erasing user available code and UICR flash areas.
Applying system reset.
Checking that the area to write is not protected.
Programing device.
Applying system reset.
Run.

صنِّف اللوحة "RCP" بحيث لا تخلط بين أدوار المجلس لاحقًا.

الاتصال بجهاز USB أصلي

نظرًا لأن إصدار RCP RDP يتيح استخدام منفذ USB CDC ACM الأصلي كنقل تسلسلي، عليك استخدام منفذ nRF USB على لوحة nRF52840 للاتصال بمضيف RCP (جهاز Linux).

افصل كابل USB الصغير من كابل USB من منفذ تصحيح الأخطاء للوحة nRF52840 الوامضة، ثم أعِد توصيله بمنفذ USB nRF USB الصغير بجانب زر إعادة الضبط. . اضبُط مفتاح مصدر طاقة nRF على USB.

46e7b670d2464842.png

بدء البرنامج التجريبي OpenOpen مرتبطة

في تصميم RCP، يمكنك استخدام Openthread Daemon للتواصل مع جهاز Thread وإدارته. يمكنك بدء ot-daemon باستخدام العلامة المطوَّلة -v حتى تتمكن من الاطِّلاع على نتائج السجلّ والتأكُّد من تشغيلها:

$ cd ~/src/openthread
$ ./build/posix/src/posix/ot-daemon -v \
    'spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=115200'

عند نجاح هذا الإجراء، يؤدي ot-daemon في وضع التشغيل المطوَّل إلى إنشاء نتيجة مشابهة لما يلي:

ot-daemon[228024]: Running OPENTHREAD/20191113-00831-gfb399104; POSIX; Jun  7 2020 18:05:15
ot-daemon[228024]: Thread version: 2
ot-daemon[228024]: RCP version: OPENTHREAD/20191113-00831-gfb399104; SIMULATION; Jun  7 2020 18:06:08

اترك نافذة محطة الدفع هذه مفتوحة بحيث يمكن عرض السجلّات من ot-daemon.

استخدِم ot-ctl للتواصل مع عقدة RCP. يستخدم ot-ctl واجهة سطر الأوامر (CLI) نفسها مثل تطبيق OpenThread CLI. وبالتالي، يمكنك التحكّم في عُقد ot-daemon بالطريقة نفسها التي تتّبعها أجهزة سلسلة المحادثات الأخرى التي تتم محاكاتها.

في نافذة طرفية ثانية، ابدأ ot-ctl:

$ ./build/posix/bin/ot-ctl
>

تحقّق من state للعقدة 2 (عقدة RCP) التي بدأتها باستخدام ot-daemon:

> state
disabled
Done

5. إعداد المعرّفات بدوام كامل

العقدتان الآخرتان اللتان تم استخدامهما في هذا الدرس التطبيقي عبارة عن أجهزة ذات سلاسل كاملة (FTDs) على تصميم System-on-Chip العادي (SoC). في إعداد الإنتاج، يمكن استخدام ملف wpantund، وهو برنامج تشغيل واجهة الشبكة على مستوى الإنتاج، للتحكّم في مثيلات OpenScript NCP، ولكن في هذا الدرس التطبيقي، سنستخدم ot-ctl ألا وهو OpenThread. سطر الأوامر

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

الإصدار والفلاش

أنشئ مثال OpenString FTD لنظام nRF52840 الأساسي، مع تفعيل أدوار المفوض والمنضم:

$ cd ~/src/ot-nrf528xx
$ rm -rf build
$ script/build nrf52840 USB_trans -DOT_JOINER=ON -DOT_COMMISSIONER=ON

انتقِل إلى الدليل باستخدام البرنامج الثنائي CLI Open Thread Device (FTD) الكامل، وحوِّله إلى تنسيق سداسي عشري:

$ cd ~/src/ot-nrf528xx/build/bin
$ arm-none-eabi-objcopy -O ihex ot-cli-ftd ot-cli-ftd.hex

وصِّل كابل USB بمنفذ USB الصغير بجانب دبوس الطاقة الخارجي في لوحة nRF52840، ثم وصِّله بجهاز Linux. إذا كان RCP لا يزال متصلاً بجهاز Linux، يجب أن تظهر هذه اللوحة الجديدة كمنفذ تسلسلي /dev/ttyACM1 (تستخدم جميع لوحات nRF52840 ttyACM لمعرّف المنفذ التسلسلي).

$ ls /dev/ttyACM*
/dev/ttyACM0  /dev/ttyACM1

كما كان الحال في السابق، لاحظ الرقم التسلسلي للوحة nRF52840 التي يتم استخدامها في نظام FTD:

.c00d519eبيو7e5f0.jpeg

انتقِل إلى موقع أدوات سطر أوامر nRFx، وضَّع الملف السداسي السحاسي لـ Openthread CLI FTD على لوحة nRF52840، باستخدام الرقم التسلسلي للوحة:

$ cd ~/nrfjprog/
$ ./nrfjprog -f nrf52 -s 683704924 --verify --chiperase --program \
       ~/src/ot-nrf528xx/build/bin/ot-cli-ftd.hex --reset

صنِّف اللوح على "المفوّض".

الاتصال بجهاز USB أصلي

نظرًا لأن إصدار OpenThread FTD يتيح استخدام منفذ USB CDC ACM الأصلي كنقل تسلسلي، عليك استخدام منفذ nRF USB على لوحة nRF52840 للتواصل مع مضيف RCP (جهاز Linux).

افصل كابل USB الصغير من كابل USB من منفذ تصحيح الأخطاء للوحة nRF52840 الوامضة، ثم أعِد توصيله بمنفذ USB nRF USB الصغير بجانب زر إعادة الضبط. . اضبُط مفتاح مصدر طاقة nRF على USB.

46e7b670d2464842.png

التحقق من الإصدار

تحقَّق من نجاح إنشاء التطبيق من خلال الدخول إلى واجهة سطر الأوامر (CLI) في OpenThread باستخدام شاشة GNU من نافذة الوحدة الطرفية. تستخدم لوحات nRF52840 معدل الباود البالغ 115200.

$ screen /dev/ttyACM1 115200

في النافذة الجديدة، اضغط على المفتاح Return على لوحة المفاتيح عدّة مرات لإظهار رسالة طلب OpenC CLI >. اعرض واجهة IPv6 وابحث عن العناوين:

> ifconfig up
Done
> ipaddr
fe80:0:0:0:1cd6:87a9:cb9d:4b1d
Done

استخدِم Ctrl+a →

d للفصل عن شاشة واجهة سطر الأوامر (CLI) لدى FTD والعودة إلى الوحدة الطرفية لنظام التشغيل Linux بحيث يمكن عرض اللوحة التالية. لإعادة إدخال سطر الأوامر في أي وقت، استخدِم screen -r من سطر الأوامر. للاطّلاع على قائمة بالشاشات المتاحة، يُرجى استخدام screen -ls:

$ screen -ls
There is a screen on:
        74182.ttys000.mylinuxmachine        (Detached)
1 Socket in /tmp/uscreens/S-username.

إعداد تطبيق FTD Joiner

كرِّر العملية السابقة لتثبيت لوحة nRF52840 الثالثة باستخدام الإصدار ot-cli-ftd.hex الحالي. عند الانتهاء من ذلك، احرص على إعادة توصيل اللوحة بجهاز الكمبيوتر باستخدام منفذ USB nRF وضبط مفتاح مصدر طاقة nRF على VDD.

إذا كانت العُقدة الأخرى مُرفقة بجهاز Linux عند إرفاق هذه اللوحة الثالثة، من المفترض أن تظهر كمنفذ تسلسلي /dev/ttyACM2:

$ ls /dev/ttyACM*
/dev/ttyACM0  /dev/ttyACM1  /dev/ttyACM2

صنِّف اللوحة "نجارة".

عند التحقق من استخدام الشاشة، بدلاً من إنشاء مثيل جديد من الشاشة من سطر الأوامر، أعد الاتصال بالعنصر الحالي وأنشئ نافذة جديدة بداخله (التي استخدمتها للعمل مع مفوّض FTD):

$ screen -r

أنشئ نافذة جديدة في الشاشة باستخدام Ctrl+a → c.

ستظهر موجه أوامر سطر جديد. الوصول إلى واجهة سطر الأوامر (CLI) في OpenThread مع رابط FTD:

$ screen /dev/ttyACM2 115200

في هذه النافذة الجديدة، اضغط على Return (لوحة المفاتيح) على لوحة المفاتيح بضع مرات لإظهار رسالة Openسلسلة CLI >. اعرض واجهة IPv6 وابحث عن العناوين:

> ifconfig up
Done
> ipaddr
fe80:0:0:0:6c1e:87a2:df05:c240
Done

الآن وبعد أن أصبحت واجهة سطر الأوامر FTD Joiner CLI في الشاشة نفسها التي يستخدمها مفوّض FTD، يمكنك التبديل بينهما باستخدام Ctrl+a → n.

استخدِم Ctrl+a →

d في أي وقت للخروج من الشاشة.

6. إعداد نافذة محطة الدفع

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

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

  1. خدمة / سجلات ot-daemon
  2. الانضمام إلى بروتوكول RCP عبر ot-ctl
  3. FTD مفوّضًا عبر Openthread CLI
  4. FTD Joiner عبر Openthread CLI

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

استخدام الشاشة

لتسهيل الاستخدام، ما عليك سوى بدء جلسة شاشة واحدة. يجب أن تكون قد سبق لك إعداد تلك المتغيّر.

تبدأ جميع الأوامر داخل الشاشة بالضغط على Ctrl+a.

أوامر الشاشة الأساسية:

إعادة الاتصال بجلسة الشاشة (من سطر الأوامر)

screen -r

مغادرة جلسة "الشاشة"

Ctrl+a → d

إنشاء نافذة جديدة في جلسة الشاشة

Ctrl+a → c

التبديل بين النوافذ في جلسة الشاشة نفسها

Ctrl+a → n (للأمام)Ctrl+a → p (رجوع)

إيقاف النافذة الحالية في جلسة الشاشة

Ctrl+a → k

تقسيم الشاشة

باستخدام الشاشة، يمكنك تقسيم الوحدة الطرفية إلى نوافذ متعددة:

f1cbf1258cf0a5a.png

يمكن الوصول إلى الأوامر في screen باستخدام Ctrl+a. يجب أن يبدأ كل أمر بمجموعة مفاتيح الوصول هذه.

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

$ screen -r

يجب أن يكون جهازك على أحد الأجهزة التي تعمل بنظام التشغيل FTD. اتّبِع الخطوات التالية على الشاشة:

  1. Ctrl+a → S لتقسيم النافذة أفقيًا
  2. Ctrl+a → Tab لتحريك المؤشر إلى النافذة الفارغة الجديدة
  3. Ctrl+a → n لتبديل هذه النافذة الجديدة إلى النافذة التالية
  4. إذا كان حجم النافذة هو نفسه الذي يظهر في النافذة العلوية، اضغط على Ctrl+a → n مرة أخرى لعرض جهاز FTD الآخر.

وكلاهما مرئيان الآن. ويمكنك التبديل بينها باستخدام Ctrl+a → Tab. ننصحك بإعادة تسمية كل نافذة باستخدام Ctrl+a → A لتجنب حدوث التباس.

الاستخدام المتقدم

ولتقسيم الشاشة بشكل أكبر إلى وحدات ربعية والاطّلاع على سجلّات ot-daemon وضمّ RCP ot-ctl، يجب بدء هذه الخدمات في مثيل الشاشة نفسه. ولإجراء ذلك، أوقف ot-daemon ثم اخرج من ot-ctl، ثم أعِد تشغيل الملفات في نوافذ الشاشة الجديدة (Ctrl+a → c).

هذا الإعداد ليس مطلوبًا وتركه ممارسةً للمستخدم.

يمكنك تقسيم النوافذ والتنقل بينها باستخدام الأوامر التالية:

إنشاء نافذة جديدة

Ctrl+a → c

تقسيم النافذة عموديًا

Ctrl+a →

تقسيم النافذة أفقيًا

Ctrl+a → S

الانتقال إلى النافذة التالية المعروضة

Ctrl+a → Tab

تبديل النافذة المعروضة للأمام أو للخلف

Ctrl+a → n أو p

إعادة تسمية النافذة الحالية

Ctrl+a → A

يمكنك ترك الشاشة في أي وقت باستخدام Ctrl+a → d وإعادة إرفاقها بـ screen -r من سطر الأوامر.

وللاطّلاع على المزيد من المعلومات على الشاشة، يمكنك مراجعة مرجع شاشة GNU السريع.

7- إنشاء شبكة سلاسل محادثات

الآن بعد أن تم إعداد جميع النوافذ والشاشات الطرفية، لنبدأ بإنشاء شبكة سلاسل المحادثات. في FTD مفوض، أنشئ مجموعة بيانات تشغيلية جديدة والتزم بها باعتبارها مجموعة نشطة. مجموعة البيانات التشغيلية هي إعداد شبكة سلاسل المحادثات التي تنشئها.

## FTD Commissioner ##
----------------------

> dataset init new
Done
> dataset
Active Timestamp: 1
Channel: 11
Channel Mask: 07fff800
Ext PAN ID: c0de7ab5c0de7ab5
Mesh Local Prefix: fdc0:de7a:b5c0/64
Network Key: 1234c0de7ab51234c0de7ab51234c0de
Network Name: OpenThread-c0de
PAN ID: 0xc0de
PSKc: ebb4f2f8a68026fc55bcf3d7be3e6fe4
Security Policy: 0, onrcb
Done

دوِّن مفتاح الشبكة 1234c0de7ab51234c0de7ab51234c0de الذي سيتم استخدامه لاحقًا.

اختَر مجموعة البيانات هذه كمجموعة نشطة:

> dataset commit active
Done

عرض واجهة IPv6:

> ifconfig up
Done

بدء عملية بروتوكول سلسلة المحادثات:

> thread start
Done

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

## FTD Commissioner ##
----------------------

> state
leader
Done
> rloc16
0c00
Done

تحقَّق من عناوين IPv6 للجهاز:

## FTD Commissioner ##
----------------------

> ipaddr
fdc0:de7a:b5c0:0:0:ff:fe00:fc00        # Leader Anycast Locator (ALOC)
fdc0:de7a:b5c0:0:0:ff:fe00:c00         # Routing Locator (RLOC)
fdc0:de7a:b5c0:0:6394:5a75:a1ad:e5a    # Mesh-Local EID (ML-EID)
fe80:0:0:0:1cd6:87a9:cb9d:4b1d         # Link-Local Address (LLA)

أصبحت شبكة "درس الترميز" مرئية الآن عند فحصها من أجهزة سلاسل المحادثات الأخرى.

من ot-ctl على واسم RCP:

## RCP Joiner ##
----------------

> scan
| J | Network Name     | Extended PAN     | PAN  | MAC Address      | Ch | dBm | LQI |
+---+------------------+------------------+------+------------------+----+-----+-----+
| 0 | OpenThread-c0de  | c0de7ab5c0de7ab5 | c0de | 1ed687a9cb9d4b1d | 11 | -36 | 232 |

من برنامج OpenCLI على FTD Joiner:

## FTD Joiner ##
----------------

> scan
| J | Network Name     | Extended PAN     | PAN  | MAC Address      | Ch | dBm | LQI |
+---+------------------+------------------+------+------------------+----+-----+-----+
| 0 | OpenThread-c0de  | c0de7ab5c0de7ab5 | c0de | 1ed687a9cb9d4b1d | 11 | -38 | 229 |

في حال عدم ظهور شبكة "درس الترميز" في القائمة، يمكنك محاولة مسحها ضوئيًا مرة أخرى.

يُرجى ملاحظة أنّه في كل من عمليتَي المسح الضوئي، تبدو الشبكة غير قابلة للانضمام (العمود J في رابط RCP ورابط FTD). وهذا يعني أنّ ميزة "عمولة سلسلة المحادثات" غير نشطة على الشبكة. ولا يزال بإمكانك الانضمام إلى الاجتماع خارج النطاق عن طريق إدخال مفتاح الشبكة في جهاز الربط يدويًا.

8. إضافة رابط RCP

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

## RCP Joiner ##
----------------

> scan
| J | Network Name     | Extended PAN     | PAN  | MAC Address      | Ch | dBm | LQI |
+---+------------------+------------------+------+------------------+----+-----+-----+
| 0 | OpenThread-c0de  | c0de7ab5c0de7ab5 | c0de | 1ed687a9cb9d4b1d | 11 | -38 | 229 |

للانضمام، اضبط مفتاح الشبكة (الذي حصلنا عليه للتو من مفوّض FTD) على RCP Joiner في مجموعة البيانات النشطة التابعة له.

## RCP Joiner ##
----------------

> dataset networkkey 1234c0de7ab51234c0de7ab51234c0de
Done
> dataset commit active
Done

راجِع مجموعة البيانات للتأكّد من ضبطها بشكل صحيح.

## RCP Joiner ##
----------------

> dataset
Network Key: 1234c0de7ab51234c0de7ab51234c0de

عرض سلسلة المحادثات بحيث ينضم تطبيق RCP Joiner إلى شبكة "codelab". انتظر بضع ثوانٍ، تحقق من الحالة وRLOC16 وعناوين IPv6 الخاصة بها:

## RCP Joiner ##
----------------

> thread start
Done
> state
child
Done
> rloc16
0c01
Done
> ipaddr
fdc0:de7a:b5c0:0:0:ff:fe00:0c01         # Routing Locator (RLOC)
fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f    # Mesh-Local EID (ML-EID)
fe80:0:0:0:18e5:29b3:a638:943b          # Link-Local Address (LLA)
Done

دوِّن عنوان IPv6 المحلي للشبكة (fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f هنا)، وستستخدمه لاحقًا.

ارجع إلى مفوضية FTD، وتحقّق من أجهزة التوجيه والجداول الفرعية للتأكّد من أنّ كلا الجهازين جزء من الشبكة نفسها. استخدِم RLOC16 لتحديد أداة ربط RCP.

## FTD Commissioner ##
----------------------

> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     |
+----+--------+----------+-----------+-------+--------+-----+------------------+
|  3 | 0x0c00 |        3 |         0 |     0 |      0 |  35 | 1ed687a9cb9d4b1d |

Done
> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|S|D|VER| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+---+------------------+
|   1 | 0x0c01 |        240 |         25 |     3 |   89 |1|1|1|  2| 1ae529b3a638943b |
Done

فحص اتصال العنوان المحلي للشبكة المتداخلة لـ RCP (العنوان المحلي للشبكة المتداخلة التي تم الحصول عليها من ناتج ipaddr RCP Joiner) للتحقق من الاتصال:

## FTD Commissioner ##
----------------------

> ping fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f
> 8 bytes from fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f: icmp_seq=1 hlim=64 time=40ms

لدينا الآن شبكة سلاسل محادثات تتألف من عُقدتَين، ويتضح ذلك من الرسم التوضيحي التالي:

otcodelab_top01C_2nodes.png

الرسومات التخطيطية الطوبولوجية

أثناء العمل على بقية الدرس التطبيقي حول الترميز، سنعرض مخططًا جديدًا لسلسلة المحادثات في حال حدوث تغيير في حالة الشبكة. يتم الإشارة إلى أدوار العُقد على النحو التالي:

b75a527be4563215.png

دائمًا ما تكون أجهزة التوجيه وحدات خماسية، وتكون الأجهزة النهائية دائمًا دوائر. تمثّل الأرقام في كل عُقدة رقم تعريف جهاز التوجيه أو رقم تعريف الطفل المعروض في ناتج سطر الأوامر (CLI)، بناءً على الدور الحالي لكل عُقدة وحالتها في ذلك الوقت.

9. تكليف لجنة FTD

لنضيف الآن جهاز سلسلة المحادثات الثالث إلى شبكة "درس التطبيقي". سنستخدِم هذه المرة عملية التفويض الأكثر أمانًا ضمن النطاق. في FTD Joiner، ابحث عن الشبكة:

## FTD Joiner ##
----------------

> scan
| J | Network Name     | Extended PAN     | PAN  | MAC Address      | Ch | dBm | LQI |
+---+------------------+------------------+------+------------------+----+-----+-----+
| 0 | OpenThread-c0de  | c0de7ab5c0de7ab5 | c0de | f65ae2853ff0c4e4 | 11 | -36 |  57 |

يشير الرمز 0 في العمود J إلى أن ميزة "عمولة سلسلة المحادثات" غير نشطة على الجهاز.

لنكن محددين عند البدء باستخدام الخدمة على هذا الجهاز التالي، ولن نسمح إلا بالانضمام إلى قناة FTD. احصل على eui64 مع الانضمام إلى FTD، حتى يتمكّن مفوّض FTD من تحديده:

## FTD Joiner ##
----------------

> eui64
2f57d222545271f1
Done

في تفويض FTD، ابدأ المفوَّض وحدِّد eui64 على الجهاز الذي يمكنه الانضمام، بالإضافة إلى بيانات اعتماد المشارك، على سبيل المثال J01NME. بيانات اعتماد الوصلات هي سلسلة خاصة بالجهاز تضم جميع الأحرف الأبجدية الرقمية (0-9 وAY، باستثناء I وO وQ وZ لسهولة القراءة) وأطوالها بين 6 و32 حرفًا.

## FTD Commissioner ##
----------------------

> commissioner start
Done
> commissioner joiner add 2f57d222545271f1 J01NME
Done

بدِّل إلى FTD Joiner، ثم أعد البحث:

## FTD Joiner ##
----------------

> scan
| J | Network Name     | Extended PAN     | PAN  | MAC Address      | Ch | dBm | LQI |
+---+------------------+------------------+------+------------------+----+-----+-----+
| 1 | OpenThread-c0de  | c0de7ab5c0de7ab5 | c0de | 1ed687a9cb9d4b1d | 11 | -45 | 196 |

كما هو موضّح من قِبل 1 في العمود "ج"، أصبحت ميزة "تفويض سلاسل المحادثات" نشطة على الشبكة الآن. ابدأ دور الانضمام باستخدام بيانات اعتماد المشارك التي أعددتها للتو على مفوّض في FTD:

## FTD Joiner ##
----------------

> ifconfig up
Done
> joiner start J01NME
Done

في غضون دقيقة تقريبًا، تتلقى تأكيدًا بالمصادقة الناجحة:

## FTD Joiner ##
----------------

>
Join success

أدخِل سلسلة المحادثات بحيث ينضم تطبيق FTD Joiner إلى شبكة "codelab"، ويتحقّق على الفور من الحالة وRLOC16:

## FTD Joiner ##
----------------

> thread start
Done
> state
child
Done
> rloc16
0c02
Done

تحقَّق من عناوين IPv6 الخاصة بالجهاز. لاحظ أنه ليس هناك ALOC. ويعود السبب في ذلك إلى أنّ هذا الجهاز ليس القائد، ولا يؤدي دورًا خاصًا بمشروع Anycast يتطلّب أمرًا ALOC.

## FTD Joiner ##
----------------

> ipaddr
fdc0:de7a:b5c0:0:0:ff:fe00:c02         # Routing Locator (RLOC)
fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd    # Mesh-Local EID (ML-EID)
fe80:0:0:0:e4cd:d2d9:3249:a243         # Link-Local Address (LLA)

بدِّل على الفور إلى مفوّض FTD وتحقّق من وجود جهاز التوجيه والجداول الفرعية للتأكّد من توفّر ثلاثة أجهزة في شبكة "درس الترميز":

## FTD Commissioner ##
----------------------

> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     |
+----+--------+----------+-----------+-------+--------+-----+------------------+
|  3 | 0x0c00 |        3 |         0 |     0 |      0 |  50 | 1ed687a9cb9d4b1d |

> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|S|D|N| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+-+------------------+
|   1 | 0x0c01 |        240 |         25 |     3 |   89 |1|1|1|1| 1ae529b3a638943b |
|   2 | 0x0c02 |        240 |         15 |     3 |   44 |1|1|1|1| e6cdd2d93249a243 |
Done

استنادًا إلى RLOC16، قدّم مشترك FTD اتصالاً بالشبكة باعتباره جهازًا نهائيًا (فرعيًا). في ما يلي مخططنا المحدَّث:

otcodelab_top01C_ed01.png

10. طريقة تطبيق سلسلة المحادثات

أجهزة سلسلة المحادثات في هذا الدرس التطبيقي هي نوع معيّن من أجهزة سلاسل المحادثات الكاملة (FTD) وتُسمّى جهاز التوجيه النهائي المؤهّل (REED). ويعني ذلك أنّه يمكنهم العمل كجهاز توجيه أو جهاز نهائي، ويمكنهم الترقية بأنفسهم من جهاز نهائي إلى جهاز توجيه.

يمكن أن تدعم سلسلة المحادثات ما يصل إلى 32 جهاز توجيه، ولكن تحاول الاحتفاظ بعدد أجهزة التوجيه بين 16 و23. إذا أرفقت جهاز REED جهازًا نهائيًا (طفلاً) وكان عدد أجهزة التوجيه أقل من 16 عامًا، سيتم تطبيقه تلقائيًا على جهاز التوجيه بعد فترة زمنية عشوائية تبلغ دقيقتين.

إذا كان لديك طفلان في شبكة سلاسل المحادثات بعد إضافة رابط FTD، انتظِر دقيقتَين على الأقل، ثم أعِد التحقّق من جهاز التوجيه والجداول الفرعية في مفوض FTD:

## FTD Commissioner ##
----------------------

> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     |
+----+--------+----------+-----------+-------+--------+-----+------------------+
|  3 | 0x0c00 |        3 |         0 |     0 |      0 |  50 | 1ed687a9cb9d4b1d |
| 46 | 0xb800 |       63 |         0 |     3 |      3 |   1 | e6cdd2d93249a243 |

> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|S|D|N| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+-+------------------+
|   1 | 0x0c01 |        240 |         61 |     3 |   89 |1|1|1|1| 1ae529b3a638943b |
Done

لقد روّج مشترك FTD (عنوان MAC الموسّع = e6cdd2d93249a243) لنفسه إلى جهاز توجيه. لاحظ أن RLOC16 مختلف (b800 بدلاً من 0c02). ويرجع ذلك إلى أن RLOC16 يستند إلى رقم تعريف جهاز التوجيه ورقم تعريف الطفل لأحد الأجهزة. عندما ينتقل التطبيق من جهاز نهائي إلى جهاز توجيه، سيتغير قيم "رقم تعريف جهاز التوجيه" و"رقم تعريف الطفل"، وكذلك سيتغيّر الأمر RLOC16.

otcodelab_top01C.png

أكِّد الولاية الجديدة وRLOC16 على FTD Joiner:

## FTD Joiner ##
----------------

> state
router
Done
> rloc16
b800
Done

الرجوع إلى إصدار لوحة FTD

يمكنك اختبار هذا السلوك يدويًا من خلال الرجوع إلى إصدار سابق من FTD Joiner من جهاز التوجيه إلى جهاز نهائي. غيِّر الحالة إلى الطفل وراجِع RLOC16:

## FTD Joiner ##
----------------

> state child
Done
> rloc16
0c03
Done

otcodelab_top01C_ed02.png

مرة أخرى في FTD مفوّض، من المفترض أن يظهر مشترك FTD الآن في الجدول الفرعي (رقم التعريف = 3). وقد تظهر أيضًا في كلتا الحالتين أثناء عملية الانتقال:

## FTD Commissioner ##
----------------------

> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     |
+----+--------+----------+-----------+-------+--------+-----+------------------+
|  3 | 0x0c00 |        3 |         0 |     0 |      0 |  50 | 1ed687a9cb9d4b1d |
| 46 | 0xb800 |       63 |         0 |     3 |      3 |   1 | e6cdd2d93249a243 |

> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|S|D|N| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+-+------------------+
|   1 | 0x0c01 |        240 |         61 |     3 |   89 |1|1|1|1| 1ae529b3a638943b |
|   3 | 0x0c03 |        240 |         16 |     3 |   94 |1|1|1|1| e6cdd2d93249a243 |
Done

وبعد مرور بعض الوقت، سينتقل الجهاز إلى استخدام جهاز توجيه من خلال RLOC لمدة b800.

otcodelab_top01C.png

إزالة القائد

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

على FTD المفوّض (FTD)، عليك إيقاف سلاسل المحادثات لإزالتها من شبكة سلاسل المحادثات:

## FTD Commissioner ##
----------------------

> thread stop
Done
> ifconfig down
Done

خلال دقيقتين، سيصبح FTD Joiner قائد سلسلة المحادثات الجديد. تحقَّق من عناوين الولاية وعنوان IPv6 الخاص برابط FTD للتحقُّق من:

## FTD Joiner ##
----------------

> state
leader
Done
> ipaddr
fdc0:de7a:b5c0:0:0:ff:fe00:fc00       # Now it has the Leader ALOC!
fdc0:de7a:b5c0:0:0:ff:fe00:b800
fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd
fe80:0:0:0:e4cd:d2d9:3249:a243
Done

otcodelab_top02C_01.png

حدد الجدول الفرعي. لاحظ أن هناك RLOC16 جديدًا. هذا هو موصل RCP، كما هو موضّح في المعرّف وMAC موسّع. للحفاظ على شبكة سلاسل المحادثات معًا، تم تبديل أجهزة التوجيه الرئيسية، من مفوض FTD إلى رابط FTD. ينتج عن ذلك RLOC16 جديد لـ RCP Joiner (بسبب تغيير رقم تعريف جهاز التوجيه، من 3 إلى 46).

## FTD Joiner ##
----------------

> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|S|D|N| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+-+------------------+
|   1 | 0xb801 |        240 |         27 |     3 |  145 |1|1|1|1| 1ae529b3a638943b |
Done

قد تضطر إلى الانتظار بضع دقائق حتى يتم ربط RCP Joiner بملحق FTD. تحقَّق من الولاية وRLOC16 للتأكُّد مما يلي:

## RCP Joiner ##
--------------

> state
child
> rloc16
b801

إعادة إرفاق مفوض FTD

شبكة سلاسل المحادثات التي تضم عقدتَين غير ممتعة إلى حد كبير. لِنُعِيدْ مَذْكِرْ FTD عَلَى الْإِنْتَرْنِتْ.

في FTD مفوض، أعد تشغيل سلسلة المحادثات:

## FTD Commissioner ##
----------------------

> ifconfig up
Done
> thread start
Done

خلال دقيقتَين، تتم إعادة الاتصال تلقائيًا بشبكة "درس تطبيقي حول الترميز" كجهاز نهائي، ثمّ الترويج لنفسها إلى جهاز توجيه.

## FTD Commissioner ##
----------------------

> state
router
Done

تحقَّق من أجهزة التوجيه والجداول الفرعية في FTD Joiner للتحقُّق من:

## FTD Joiner ##
----------------

> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     |
+----+--------+----------+-----------+-------+--------+-----+------------------+
|  3 | 0x0c00 |       63 |         0 |     3 |      3 |   0 | 1ed687a9cb9d4b1d |
| 46 | 0xb800 |       46 |         0 |     0 |      0 |  15 | e6cdd2d93249a243 |

> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|S|D|N| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+-+------------------+
|   1 | 0xb801 |        240 |        184 |     3 |  145 |1|1|1|1| 1ae529b3a638943b |
Done

otcodelab_top02C_02.png

تتكوّن شبكة سلاسل المحادثات من ثلاث عُقد مرة أخرى.

11- تحديد المشاكل وحلّها

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

الشاشة

إذا فقدت الإعداد الخاص بك (عدد كبير جدًا من نوافذ الشاشة أو الشاشات داخل الشاشة)، استمر في إنهاء نوافذ الشاشة باستخدام Ctrl+a → k حتى لا يكون هناك أي منها وscreen -ls في إخراج سطر الأوامر No Sockets found. بعد ذلك، يمكنك إعادة إنشاء نوافذ الشاشة لكل جهاز. ويتم الاحتفاظ لحالات الجهاز حتى في حال إنهاء الشاشة.

عُقد سلسلة المحادثات

إذا لم يكن منهج الشبكة في سلسلة المحادثات كما هو موضّح في هذا الدرس التطبيقي، أو إذا تم فصل العُقد لسبب ما (ربما بسبب توقف جهاز Linux في تشغيله)، من الأفضل إزالة سلسلة المحادثات ومحو بيانات اعتماد الشبكة والبدء مرة أخرى منإنشاء شبكة سلاسل محادثات خُطْوَة

لإعادة ضبط مواعيد ملفات FTD، يُرجى اتّباع الخطوات التالية:

## FTD Commissioner or FTD Joiner ##
------------------------------------

> thread stop
Done
> ifconfig down
Done
> factoryreset
Done

يمكن إعادة ضبط RCP بالطريقة نفسها من خلال ot-ctl:

## RCP Joiner ##
----------------

> thread stop
Done
> ifconfig down
Done
> factoryreset
Done

12- استخدام البث المتعدد

يتم استخدام البث المتعدد لنقل المعلومات إلى مجموعة أجهزة في آنٍ واحد. في شبكة سلاسل المحادثات، يتم تخصيص عناوين محدَّدة لاستخدام البث المتعدد مع مجموعات مختلفة من الأجهزة، اعتمادًا على النطاق.

عنوان IPv6

النطاق

تم التسليم إلى

ff02::1

ربط محلي

جميع شركات التعليم الطبي والتطوير الطبي

ff02::2

ربط محلي

جميع أجهزة توجيه الحدود الإلكترونية وأجهزة توجيه الحدود

ff03::1

شبكة محلية متداخلة

جميع شركات التعليم الطبي والتطوير الطبي

ff03::2

شبكة محلية متداخلة

جميع أجهزة توجيه الحدود الإلكترونية وأجهزة توجيه الحدود

بما أنّنا لا نستخدم جهاز توجيه حدودي في هذا الدرس التطبيقي حول الترميز، لنركّز على عنوانَي FTD وMED المتعددي البث.

يتضمن النطاق المحلي للرابط جميع واجهات سلاسل المحادثات التي يمكن الوصول إليها من خلال إرسال لاسلكي واحد، أو إجراء "قفزة" واحدة. يتّبع هيكل الشبكة اتصالاً بأجهزة فحص الاتصال التي ترسل استجابة إلى عنوان البث المتعدد ff02::1.

إشعار ff02::1 من مفوض FTD:

## FTD Commissioner ##
----------------------

> ping ff02::1
> 8 bytes from fe80:0:0:0:e4cd:d2d9:3249:a243: icmp_seq=2 hlim=64 time=9ms

عَثَرْتُ عَلَى جِهَازَيْنِ آخَرَيْنِ فِي الشَّبَكَة (جِهَازْ FTD وَمَجْمُوعْ RCP)، وَلَكِنْ لَقَدْ لَقَدْ رَدَّتْ اسْتِخْدَامْ FTD عَلَى الْعُنْوَانِ الْلِّي عَلَى FTD. ويعني هذا أنّ "رابط FTD" هو الجهاز الوحيد الذي يمكن للمفوّض من خلاله الوصول إليه باستخدام قفزة واحدة.

otcodelab_top02C_02_LL.png

يتم الآن فحص اتصال ff02::1 من FTD Joiner:

## FTD Joiner ##
----------------

> ping ff02::1
> 8 bytes from fe80:0:0:0:1cd6:87a9:cb9d:4b1d: icmp_seq=1 hlim=64 time=11ms
8 bytes from fe80:0:0:0:18e5:29b3:a638:943b: icmp_seq=1 hlim=64 time=24ms

ردّان. بعد التحقّق من عناوين IPv6 للأجهزة الأخرى، يمكننا الاطّلاع على العنوان الأول (الذي ينتهي بـ 4b1d) هو LLA للمفوّض في FTD، أمّا العنوان الثاني (الذي ينتهي بـ 943b) فهو LLA للمُشارِك.

otcodelab_top02C_02_LL02.png

ويعني ذلك أنّ "رابط FTD" مرتبط بشكل مباشر بكلٍّ من مفوّض FTD وضمّ RCP، ما يؤكّد على وهيكلنا.

شبكة محلية متداخلة

يضم نطاق الشبكة المحلية المتداخلة جميع واجهات سلاسل المحادثات التي يمكن الوصول إليها ضمن شبكة سلسلة المحادثات نفسها. لنرى الردود على إشعار إرسال عنوان بث متعدد من ff03::1.

إشعار ff03::1 من مفوض FTD:

## FTD Commissioner ##
----------------------

> ping ff03::1
> 8 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:b800: icmp_seq=3 hlim=64 time=9ms
8 bytes from fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f: icmp_seq=3 hlim=64 time=68ms

في هذه المرة، تلقّت مفوّضة FTD استجابة واحدة، واحدة من محدد مواقع التوجيه (FLOC) لانضمام مدير FTD وتنتهي بـ b800 وأخرى من معرّف شبكي لشبكة FTD (ML-EID، تنتهي بالرقم d55f). ويرجع ذلك إلى أن النطاق المحلي للشبكة المتداخلة يضم سلسلة المحادثات بأكملها. بغض النظر عن مكان اتصال الجهاز، سيكون مشتركًا في عنوان ff03::1.

otcodelab_top02C_02_ML.png

إشعار ff03::1 من FTD Joiner لتأكيد السلوك نفسه:

## FTD Joiner ##
----------------

> ping ff03::1
> 8 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:c00: icmp_seq=2 hlim=64 time=11ms
8 bytes from fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f: icmp_seq=2 hlim=64 time=23ms

otcodelab_top02C_02_LL02.png

دوِّن وقت استجابة رابط RCP في كلا نوعَي فحص الاتصال. استغرقت عملية ربط RCP وقتًا أطول بكثير للوصول إلى مفوض FTD (68 ملّي ثانية) مقارنةً بمدة الوصول إلى رابط FTD (23 ملّي ثانية). ويرجع السبب في ذلك إلى أنه كان يتعيّن علينا الوصول إلى شعبتَين للوصول إلى مفوّضة مؤسسة FTD، مقارنةً بمنصّة " وعلى سبيل المثال"

وقد تكون أيضًا قد لاحظت أنّ أداة فحص الاتصال المتعددة البث على الشبكة المحلية تم الرد عليها من خلال RLOC فقط لبروتوكولي FTD، وليس رابط RCP. ويعود السبب في ذلك إلى أنّ أجهزة FTD هي أجهزة توجيه داخل الشبكة، بينما RCP هو جهاز نهائي.

تحقَّق من حالة ضمّ RCP للتأكُّد من:

## RCP Joiner ##
----------------

> state
child

13- إرسال رسائل باستخدام UDP

إحدى خدمات التطبيقات التي يوفرها OpenThread هي بروتوكول مخطط بيانات المستخدم (UDP)، وهو بروتوكول طبقة النقل. يمكن لتطبيق تم إنشاؤه باستخدام OpenThread استخدام واجهة برمجة تطبيقات UDP لتمرير الرسائل بين العُقد في شبكة سلسلة محادثات، أو إلى الأجهزة الأخرى في شبكة خارجية (مثل الإنترنت، إذا كانت شبكة سلسلة المحادثات تتضمن جهاز توجيه الحدود).

يتم عرض مقابس UDP من خلال سطر الأوامر لـ OpenThread. يُمْكِنُ اسْتِخْدَامُهَا لِتَرْسِيلِ الرَّسَائِلْ بَيْنَ جِهَازَيْ FTD.

احصل على عنوان EID المحلي لـ FTD Joiner. نستخدم هذا العنوان لأنه يمكن الوصول إليه من أي مكان في شبكة سلاسل المحادثات.

## FTD Joiner ##
----------------

> ipaddr
fdc0:de7a:b5c0:0:0:ff:fe00:fc00        # Leader Anycast Locator (ALOC)
fdc0:de7a:b5c0:0:0:ff:fe00:b800        # Routing Locator (RLOC)
fe80:0:0:0:e4cd:d2d9:3249:a243         # Link-Local Address (LLA)
fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd    # Mesh-Local EID (ML-EID)
Done

يمكنك بدء UDP وربطه بمقبس لأي عنوان IPv6:

## FTD Joiner ##
----------------

> udp open
Done
> udp bind :: 1212

يمكنك التبديل إلى مفوضية FTD وبدء بروتوكول UDP وربط المقبس الذي أعددته على تطبيق FTD Joiner، باستخدام معرّف ML-EID:

## FTD Commissioner ##
----------------------

> udp open
Done
> udp connect fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd 1212
Done

يجب أن يكون اتصال UDP مباشرًا بين العُقدتين. إرسال رسالة من مفوض FTD:

## FTD Commissioner ##
----------------------

> udp send hellothere
Done

في FTD Joiner، تم استلام رسالة UDP.

## FTD Joiner ##
----------------

> 10 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:c00 49153 hellothere

14- تهانينا.

لقد أنشأت شبكة فعلية لسلسلة المحادثات!

b915c433e7027cc7.png

أصبحت تعرف الآن:

  • الفرق بين أنواع أجهزة سلسلة المحادثات والأدوار والنطاقات
  • كيفية إدارة الأجهزة التي تستخدم سلاسل المحادثات لحالاتها ضمن الشبكة
  • كيف يمكنني تمرير رسائل بسيطة بين العُقد باستخدام UDP؟

الخطوات التالية

بناءً على هذا الدرس التطبيقي حول الترميز، يمكنك تجربة التمارين التالية:

  • أعِد تحميل لوحة FTD Joiner كمجموعة MTD باستخدام البرنامج الثنائي ot-cli-mtd، ولاحِظ أنها لا تُرقِّي نفسها إلى جهاز توجيه أو تحاول أن تصبح القائدة.
  • أضِف المزيد من الأجهزة (جرِّب نظامًا أساسيًا مختلفًا) إلى الشبكة وارسم مخططًا للمسؤولية باستخدام أجهزة التوجيه والجداول الفرعية، بالإضافة إلى أدوات فحص الاتصال لعناوين البث المتعدد.
  • استخدام pyspinel للتحكّم في NCP
  • حوِّل NCP إلى جهاز توجيه حدود باستخدام OpenThread Border Router واربط شبكة سلاسل المحادثات بالإنترنت.

قراءة إضافية

يمكنك الاطّلاع على openthread.io وGitHub للحصول على مجموعة متنوعة من موارد OpenThread، بما في ذلك:

المرجع: