أنشِئ شبكة Thread باستخدام لوحات nRF52840 وOpenThread

1. مقدمة

26b7f4f6b3ea0700.png

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

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

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

4806d16a8c137c6d.jpeg

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

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

المتطلبات

الأجهزة:

  • 3 لوحات Nordic تعليقconductor nRF52840 لمطوِّري التطبيقات
  • 3 كابلات USB إلى USB مصغّر لتوصيل اللوحات
  • جهاز Linux مزوَّد بثلاثة منافذ USB على الأقل

البرامج:

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

2. الخطوات الأولى

محاكاة OpenThread

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

أطراف التوصيل التسلسلية

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

جهاز Linux

صُمِّم هذا الدرس التطبيقي حول الترميز ليستخدم جهاز Linux يستند إلى i386 أو x86 ليكون مضيفًا لجهاز Threador مساعد معالج لاسلكي (RCP) وفلاش جميع لوحات تطوير Thread. تم اختبار جميع الخطوات على نظام التشغيل Ubuntu 14.04.5 LTS (Trusty Tahr).

لوحات Nordic شبهconductor nRF52840

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

a6693da3ce213856.png

ونستخدم SEGGER J-Link لبرمجة لوحات nRF52840 التي تتضمن وحدات JTAG. ثبِّت هذا التطبيق على جهازك الذي يعمل بنظام التشغيل Linux.

قم بتنزيل الحزمة المناسبة لجهازك وثبّتها في المكان المناسب. على نظام التشغيل Linux، هذا هو /opt/SEGGER/JLink.

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

تتيح لك أدوات سطر الأوامر nRF5x تثبيت برامج ثنائية OpenThread على لوحات nRF52840. تثبيت nRF5x-Command-Line-Tools-<OS> المناسب تعتمده على جهاز Linux.

يمكنك وضع الحزمة المستخرجة في المجلد الجذر ~/.

تثبيت ARM GNU Toolchain

تُستخدم سلسلة أدوات ARM GNU في الإنشاء.

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

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

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

$ 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

إنشاء OpenThread Daemon:

$ script/cmake-build posix -DOT_DAEMON=ON

أصبحت الآن جاهزًا لإنشاء برنامج OpenThread وتحميله إلى لوحات nRF52840.

4. إعداد أداة الانضمام إلى RCP

إنشاء واسترجاع محتوى

يمكنك إنشاء مثال OpenThread nRF52840 باستخدام أداة Joiner ووظيفة USB الأصلية. يستخدم الجهاز دور "الانضمام" لتتم المصادقة عليه وتفويضه بأمان على شبكة Thread. يتيح 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

انتقِل إلى الدليل باستخدام برنامج OpenThread 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:

c00d519ebec7e5f0.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 الأصلي

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

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

46e7b670d2464842.png

بدء OpenThread Daemon

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

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

عند النجاح، يتم إنشاء مخرجات مشابهة لما يلي في وضع التسجيل المطوَّل (ot-daemon):

ot-daemon[12463]: Running OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; POSIX; Aug 30 2022 10:55:05
ot-daemon[12463]: Thread version: 4
ot-daemon[12463]: Thread interface: wpan0
ot-daemon[12463]: RCP version: OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; SIMULATION; Aug 30 2022 10:54:10

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

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

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

$ sudo ./build/posix/src/posix/ot-ctl
>

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

> state
disabled
Done

5- إعداد FTD

العُقدتان الأخريان اللتان يتم استخدامهما في هذا الدرس التطبيقي حول الترميز هما "أجهزة Threads" الكاملة (FTD) على التصميم العادي للمنظومة على الرقاقة (SoC). في إعدادات الإنتاج، يمكن للمرء استخدام wpantund، وهو برنامج تشغيل لواجهة شبكة على مستوى الإنتاج، للتحكّم في مثيلات OpenThread NCP، ولكن في هذا الدرس التطبيقي حول الترميز، سنستخدم ot-ctl، OpenThread CLI.

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

إنشاء واسترجاع محتوى

إنشاء مثال OpenThread FTD لمنصة nRF52840، مع تفعيل دورتَي "المفوض" و"الانضمام":

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

انتقِل إلى الدليل باستخدام البرنامج الثنائي لـ OpenThread Full 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:

c00d519ebec7e5f0.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 الأصلي

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

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

46e7b670d2464842.png

إثبات صحة الإصدار

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

$ screen /dev/ttyACM1 115200

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

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

استخدِم Ctrl+a ←

d للفصل عن واجهة سطر الأوامر الخاص بمفوض 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

قم بتسمية اللوحة باسم "الانضمام".

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

$ screen -r

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

يظهر موجه سطر أوامر جديد. الوصول إلى واجهة سطر الأوامر OpenThread لأداة الانضمام إلى FTD:

$ screen /dev/ttyACM2 115200

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

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

بما أنّ واجهة سطر الأوامر الخاصة بـ FTD Joiner هي نفسها التي يعرضها المفوَّض FTD، يمكنك التبديل بينهما باستخدام Ctrl+a ← n.

استخدِم Ctrl+a ←

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

6- إعداد نافذة المحطة الطرفية

من الآن فصاعدًا، سيتم التبديل بين أجهزة Thread بشكل متكرر، لذا يُرجى الحرص على أن تكون جميع هذه الأجهزة نشطة ويمكن الوصول إليها بسهولة. حتى الآن، كنا نستخدم ميزة الشاشة للوصول إلى الجهازين لـ 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 Commissioner وFTD Joiner) على نفس مثيل الشاشة. لتقسيم الشاشة بين الاثنين، أدخل أولاً جلسة الشاشة الحالية:

$ 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. إنشاء شبكة Thread

الآن بعد أن أعددت جميع النوافذ والشاشات الطرفية، لننشئ شبكة Thread. في مفوض FTD، أنشِئ مجموعة بيانات تشغيلية جديدة واضبطها كمجموعة بيانات نشطة. مجموعة البيانات التشغيلية هي تهيئة شبكة Thread التي تنشئها.

## 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:

> 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)

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

من ot-ctl على الانضمام إلى RCP:

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

> scan
| PAN  | MAC Address      | Ch | dBm | LQI |
+------+------------------+----+-----+-----+
| c0de | 1ed687a9cb9d4b1d | 11 | -36 | 232 |

من واجهة سطر الأوامر OpenThread على FTD Joiner:

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

> scan
| PAN  | MAC Address      | Ch | dBm | LQI |
+------+------------------+----+-----+-----+
| c0de | 1ed687a9cb9d4b1d | 11 | -38 | 229 |

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

8. إضافة أداة الانضمام إلى RCP

إعداد سلسلة المحادثات غير نشط على الشبكة، ما يعني أنّنا سنحتاج إلى إضافة أداة ربط RCP إلى شبكة Thread التي أنشأناها للتو باستخدام عملية تشغيل خارج الإطار.

في مفوض FTD، أدرجنا ملاحظة بشأن مفتاح الشبكة، على سبيل المثال 1234c0de7ab51234c0de7ab51234c0de. إذا كنت بحاجة إلى البحث عن مفتاح الشبكة مرة أخرى، شغِّل الأمر التالي على مفوض FTD:

## FTD Commissioner ##

> dataset networkkey
1234c0de7ab51234c0de7ab51234c0de
Done

بعد ذلك، في الانضمام RCP Joiner، اضبط مفتاح الشبكة النشط لمجموعة البيانات الخاصة به على مفتاح شبكة FTD Commissioner Network:

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

> dataset networkkey 1234c0de7ab51234c0de7ab51234c0de
Done
> dataset commit active
Done

تحقق من مجموعة البيانات للتأكد من تعيينها بشكل صحيح.

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

> dataset
Network Key: 1234c0de7ab51234c0de7ab51234c0de

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

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

> ifconfig up
Done
> 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") للتحقق من إمكانية الاتصال:

## 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

لدينا الآن شبكة Thread مكونة من عقدتين، كما هو موضح في هذا المخطط البياني:

otcodelab_top01C_2nodes.png

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

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

b75a527be4563215.png

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

9. تكليف فريق FTD Joiner

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

في FTD Joiner، احصل على eui64، حتى يتمكّن مفوَّض FTD من التعرّف عليه:

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

> eui64
2f57d222545271f1
Done

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

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

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

انتقِل إلى FTD Joiner. يمكنك بدء دور الانضمام باستخدام "بيانات اعتماد الانضمام" التي أعددتها للتو لدى مفوَّض FTD:

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

> ifconfig up
Done
> joiner start J01NME
Done

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

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

>
Join success

عرض Thread للانضمام إلى FTD Joiner في "درس تطبيقي حول الترميز" ونتحقق على الفور من الحالة و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. عمل سلسلة المحادثات

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

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

إذا كان لديك طفلان في شبكة Thread بعد إضافة أداة الانضمام إلى 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 Joiner (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

إزالة القائد

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

في مفوض FTD، أوقِف سلسلة Thread لإزالتها من شبكة Thread:

## 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 الموسّع. للحفاظ على اتصال شبكة Thread معًا، تم تبديل أجهزة التوجيه الرئيسية من "مفوَّض 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 بأداة الانضمام إلى FTD كطفل صغير. تحقَّق من الحالة ومؤشر RLOC16 للتأكّد مما يلي:

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

> state
child
> rloc16
b801

إعادة إرفاق مفوض اللجنة الفيدرالية للمنافسة وحماية المستهلك

لن يكون وجود شبكة Thread ذات عقدتين ممتعًا. لنعيد عرض عضو لجنة 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

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

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

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

الشاشة

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

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

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

لإعادة ضبط 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. استخدام البث المتعدد

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

عنوان IPv6

المستوى

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

ff02::1

رابط محلي

جميع FTD وMED

ff02::2

رابط محلي

جميع أجهزة توجيه الحدود (FTD) وأجهزة توجيه الحدود

ff03::1

شبكة محلية

جميع FTD وMED

ff03::2

شبكة محلية

جميع أجهزة توجيه الحدود (FTD) وأجهزة توجيه الحدود

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

يتألف نطاق الرابط المحلي من جميع واجهات Thread التي يمكن الوصول إليها من خلال إرسال لاسلكي واحد أو "قفزة" واحدة. تحدد طوبولوجيا الشبكة الأجهزة التي تستجيب لاختبار الاتصال لعنوان البث المتعدد في 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 Joiner)، لكن مفوض اللجنة الفيدرالية للمنافسة وحماية المستهلك تلقّى ردًا واحدًا فقط من عنوان URL المحلي لـ FTD Joiner (LLA). وهذا يعني أنّ جهاز FTD Joiner هو الجهاز الوحيد الذي يمكن لمفوض FTD الوصول إليه من خلال قفزة واحدة.

otcodelab_top02C_02_LL.png

جارٍ اختبار الاتصال بـ ff02::1 من الانضمام إلى FTD:

## 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

إجابتان! عند التحقّق من عناوين الإصدار 6 من بروتوكول الإنترنت على الأجهزة الأخرى، يمكننا أن نرى العنوان الأول (الذي ينتهي بالأرقام 4b1d) هو "النموذج اللغوي الكبير" (LLA) الخاص بمفوض FTD، والعنوان الثاني (الذي ينتهي بـ 943b) هو "النموذج اللغوي الكبير" (LLA) الخاص بـ RCP Joiner.

otcodelab_top02C_02_LL02.png

وهذا يعني أن الانضمام إلى FTD مرتبط مباشرة بكل من مفوض FTD وRCP Joiner، وهو ما يؤكد المخطط الهيكلي لدينا.

شبكة محلية

يشمل النطاق المحلي المتداخل جميع واجهات Thread التي يمكن الوصول إليها ضمن شبكة Thread نفسها. لنرى الردود على إشعار عنوان البث المتعدد في 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 ردَّين، أحدهما من محدد موقع التوجيه الخاص بـ FTD Joiner (RLOC، ينتهي بالأرقام b800) والآخر من معرّف EID المحلي المتداخلة (ML-EID) لـ RCP Joiner (ML-EID)، والذي ينتهي بالأرقام d55f. يرجع ذلك إلى أنّ نطاق الشبكة المتداخلة يضم شبكة Thread بالكامل. وبصرف النظر عن مكان الجهاز، سيتم اشتراكه في عنوان ff03::1.

otcodelab_top02C_02_ML.png

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

## 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 Joiner (23 ملي ثانية). وذلك لأنّه يجب إجراء قفزتَين للوصول إلى مفوّض FTD، مقارنةً بقفزة واحدة مع فريق FTD Joiner.

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

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

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

> state
child

13. إرسال الرسائل باستخدام بروتوكول UDP

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

يتم الكشف عن مقابس UDP من خلال OpenThread CLI. لنستخدم هذا الحلّ لتمرير الرسائل بين الفريقَين.

احصل على عنوان Mesh-Local EID لـ FTD Joiner. نحن نستخدم هذا العنوان لأنّه يمكن الوصول إليه من أي مكان ضمن شبكة Thread.

## 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. تهانينا!

لقد أنشأت شبكة Thread

b915c433e7027cc7.png

أنت تعرف الآن:

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

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

استنادًا إلى هذا الدرس التطبيقي حول الترميز، جرِّب التمارين التالية:

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

محتوى إضافي للقراءة

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

مرجع: