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

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

1. المقدمة

26b7f4f6b3ea0700.png

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

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

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

4806d16a8c137c6d.jpeg

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

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

المتطلبات

الأجهزة:

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

برامج:

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

2- البدء

محاكاة OpenThread

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

منافذ طرفية للمنافذ

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

جهاز يعمل بنظام التشغيل Linux

تم تصميم هذا الدرس التطبيقي حول الترميز لاستخدام جهاز يعمل بنظام التشغيل Linux i386 أو x86 ليكون بمثابة مضيف لجهاز يعمل بتقنية Radio Co-Processor (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 في الأرشيف للحصول على تعليمات التثبيت.

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

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

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

$ script/cmake-build posix -DOT_DAEMON=ON

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

4. إعداد رابط RCP

الإنشاء والفلاش

ويمكنك إنشاء مثال على OpenThread nRF52840 من خلال وظيفة USB والواجهة الأصلية. يستخدم الجهاز دور "المُصدِّق" ليتم المصادقة عليه وتفويضه بأمان على شبكة Thread. يمكّن USB الأصلي استخدام USB ADC 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، وامض ملف HTML الخاص بـ OpenThread RCP على لوحة nRF52840، باستخدام الرقم التسلسلي لللوحة و#39;. وتجدر الإشارة إلى أنّه في حال عدم إدراج العلامة --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&quot؛ بحيث لا تخلط لاحقًا بين أدوار مجلس الإدارة.

الربط بجهاز USB أصلي

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

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

46e7b670d2464842.png

بدء البرنامج الخفي لـ OpenThread

في تصميم RCP، استخدم البرنامج الخفي لـ OpenThread للتواصل مع جهاز 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 بالطريقة نفسها التي تتحكّم بها أجهزة سلاسل المحادثات الأخرى.

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

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

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

> state
disabled
Done

5. إعداد FTD

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

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

الإنشاء والفلاش

أنشِئ مثالاً لـ OpenThread FTD للنظام الأساسي nRF52840، مع تفعيل دور المفوّض والمنضم:

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

انتقِل إلى الدليل باستخدام واجهة برمجة تطبيقات البرنامج الثنائي لسلسلة محادثات OpenThread بالكامل (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، باستخدام الرقم التسلسلي لللوحة و#39:

$ 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

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

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

$ screen /dev/ttyACM1 115200

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

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

استخدام Ctrl+a ←

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

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

إعداد رابط FTD

كرِّر العملية السابقة لوميض اللوحة 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.

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

$ screen /dev/ttyACM2 115200

في هذه النافذة الجديدة، اضغط على "رجوع" في لوحة المفاتيح عدة مرات لعرض رسالة المطالبة "واجهة برمجة تطبيقات OpenThread" >. اعرض واجهة IPv6 وتحقّق من العناوين:

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

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

استخدام Ctrl+a ←

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

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

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

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

  1. خدمة ot-daemon / السجلات
  2. الانضمام إلى برنامج RPC من خلال ot-ctl
  3. المُفوّض من أجل FTD من خلال واجهة سطر الأوامر في OpenThread
  4. الانضمام إلى FTD عبر OpenThread CLI

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

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

لتسهيل الاستخدام، ابدأ جلسة شاشة واحدة فقط. يجب أن يكون لديك واحد بالفعل من عند إعداد كل من FTD.

تبدأ جميع الأوامر ضمن الشاشة بـ 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 Connector 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)

تظهر الشبكة "codelab"كما تظهر الآن عند فحصها من أجهزة Thread الأخرى.

من ot-ctl على رابط RRCP:

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

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

من واجهة سطر الأوامر في OpenThread على أداة ربط FTD:

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

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

إذا لم تظهر الشبكة &"codelab"quot;;;39;" في القائمة، جرّب البحث مرة أخرى.

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

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

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

## FTD Commissioner ##

> dataset networkkey
1234c0de7ab51234c0de7ab51234c0de
Done

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

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

> dataset networkkey 1234c0de7ab51234c0de7ab51234c0de
Done
> dataset commit active
Done

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

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

> dataset
Network Key: 1234c0de7ab51234c0de7ab51234c0de

يمكنك عرض سلسلة المحادثات حتى ينضم انضمام RCP إلى الشبكة "codelabcode". انتظِر بضع ثوانٍ، تحقَّق من حالة 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، (العنوان الشبكة المتداخلة المحلية الذي تم الحصول عليه من مخرجات RCP الخاص بـ ipaddr)، للتحقق من إمكانية الاتصال:

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

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

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

b75a527be4563215.png

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

9. عمولة جمعية FTD

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

في رابط FTD، يمكنك الحصول على 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. ابدأ دور المشترك باستخدام بيانات اعتماد المستخدم التي أعددتها للتو على تفويض FTD:

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

> ifconfig up
Done
> joiner start J01NME
Done

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

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

>
Join success

يمكنك عرض سلسلة المحادثات حتى ينضم انضمام FTD إلى الشبكة "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 والتحقّق من أجهزة التوجيه والجداول الفرعية للتأكّد من توفّر ثلاثة أجهزة في الشبكة "codelabcode&":

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

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

إذا كان لديك طفلان في شبكة Thread بعد إضافة رابط 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:

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

> state
router
Done
> rloc16
b800
Done

انضمام FTD

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

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

> state child
Done
> rloc16
0c03
Done

otcodelab_top01C_ed02.png

ارجع إلى FTD Commissioner، من المفترض أن يظهر رابط 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، سيصبح أحد أجهزة التوجيه الأخرى القائد الجديد.

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

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

> thread stop
Done
> ifconfig down
Done

في غضون دقيقتين، يصبح الانضمام إلى FTD قائد سلسلة المحادثات الجديد. تحقَّق من عنوانَي الحالة و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 (بسبب تغيير رقم تعريف جهاز التوجيه، من 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

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

لا تتضمن شبكة Thread التي تشتمل على عقدتين الكثير من المتعة. لنعِد تفويض FTD على الإنترنت.

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

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

> ifconfig up
Done
> thread start
Done

وبعد دقيقتين، تتم إعادة الاتصال تلقائيًا بالشبكة و "code;codelab"كجهاز نهائي، ثم ترقية نفسه إلى جهاز توجيه.

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

> state
router
Done

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

## 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 ومحو بيانات اعتماد الشبكة والبدء من جديد من خطوة إنشاء شبكة 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

الرابط المحلي

جميع FTDS MED

ff02::2

الرابط المحلي

جميع FTDS وأجهزة توجيه الحدود

ff03::1

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

جميع FTDS MED

ff03::2

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

جميع FTDS وأجهزة توجيه الحدود

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

يتألّف نطاق Link-Local من جميع واجهات Thread التي يمكن الوصول إليها من خلال بث لاسلكي واحد أو "&hop;" تحدّد منهجية الشبكة الأجهزة التي تستجيب لاختبار فحص الاتصال على عنوان البث المتعدد في 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 Signer وجهة التسجيل في RCP)، ولكن لم يُصدَر المفوّض في FTD ردًا واحدًا إلا من العنوان - FTDjoiner's Link-Local Address (LLA). هذا يعني أنّ الانضمام إلى FTD هو الجهاز الوحيد الذي يمكن أن يصل إليه المفوّض في 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

ثمة ردّان. بالنسبة إلى التحقق من عناوين IPv6 للأجهزة الأخرى، يمكننا ملاحظة أن العنوان الأول (الذي ينتهي باللاحقة 4b1d) هو مفوّض FTD و#39;s LLA، أما العنوان الثاني (الذي ينتهي باللاحقة 943b) فهو ضمّ جهة الاتّصال RCP's LLA.

otcodelab_top02C_02_LL02.png

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

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

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

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

تحقَّق من حالة الانضمام إلى برنامج RPC للتأكّد من ذلك:

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

> state
child

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

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

يتم الكشف عن مقابس UDP من خلال واجهة سطر تعديلات OpenThread. لنستخدمه لتمرير الرسائل بين آلتي تحويل البيانات (FTD).

احصل على عنوان معرّف المعدات الجوّالة (ESH) في المنطقة المحلية لجهة الجهة التي ستدرج واجهة برمجة التطبيقات (FTD). نستخدم هذا العنوان لأنه يمكن الوصول إليه من أي مكان داخل شبكة 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 Commissioner وابدأ تشغيل UDP ووصِّل المقبس الذي أعددته في FTDjoiner باستخدام 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، تم استلام رسالة UDP.

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

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

14- تهانينا

لقد أنشأت شبكة Thread فعلية.

b915c433e7027cc7.png

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

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

الخطوات اللاحقة

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

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

المزيد من القراءة

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

  • الأنظمة الأساسية المتوافقة: يمكنك الاطّلاع على جميع الأنظمة الأساسية التي تتوافق مع OpenThread.
  • إصدار OpenThread - المزيد من التفاصيل حول إنشاء OpenThread وضبطه.
  • Thread Prime — تغطي جميع مفاهيم سلاسل المحادثات التي تظهر في هذا الدرس التطبيقي حول الترميز

المرجع: