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

1- المقدمة

26b7f4f6b3ea0700.png

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

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

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

4806d16a8c137c6d.jpeg

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

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

المتطلبات

الأجهزة:

  • 3 لوحات لـ Nodic نصف الموصّلة nRF52840
  • 3 كابلات USB إلى 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).

لوحات 5,52840 شمالية شبه موصلّة

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

a6693da3ce213856.png

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

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

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

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

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

تثبيت سلسلة ARM GNU

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

نقترح وضع الأرشيف الذي تم استخراجه في /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

إنشاء البرنامج الخفي المفتوح في سلسلة محادثات:

$ script/cmake-build posix -DOT_DAEMON=ON

أصبحت جاهزًا الآن لإنشاء إصدار مفتوح من Flash، وإضافته إلى لوحات nRF52840.

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

تصميم ووميض

أنشِئ مثالاً على سلسلة سلسلة OpenN RR52840 باستخدام وظيفة الميكروفون وكابل USB الأصلية. يستخدم أحد الأجهزة دور "المنضم" لتتم مصادقتها وتكليفه بشكل آمن على شبكة Thread. يسمح نظام USB الأصلي باستخدام ACM CDC كنقل تسلسلي بين 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-Debug لتصحيح الأخطاء بجانب دبوس الطاقة الخارجي على لوح 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 الأصلي

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

افصِل الطرف المصغّر لكابل USB من منفذ تصحيح لوحة nRF52840 الوامضة، ثم أعِد توصيله بمنفذ 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 واجهة سطر الأوامر نفسها التي يستخدمها تطبيق OpenLI CLI. وبالتالي، يمكنك التحكّم في ot-daemon عُقد بالطريقة نفسها التي تستخدم بها أجهزة Thread الأخرى التي تمت محاكاتها.

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

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

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

> state
disabled
Done

5. إعداد بيانات FTD

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

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

تصميم ووميض

إنشاء مثال على OpenThread FTD للنظام الأساسي nRF52840، مع تفعيل دورَي المفوَّض والانضمام:

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

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

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

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

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

46e7b670d2464842.png

التأكّد من الإصدار

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

$ screen /dev/ttyACM1 115200

في النافذة الجديدة، اضغط على زرّ Return على لوحة المفاتيح بضع مرات لإظهار إشعار OpenLI 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

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

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

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

صنِّف اللوحة على شكل "رابط".

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

$ screen -r

يمكنك إنشاء نافذة جديدة ضمن الشاشة باستخدام Ctrl+a ← c.

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

$ screen /dev/ttyACM2 115200

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

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

بعد أن أصبحت واجهة سطر الأوامر (FTD) التابعة لـ FTD مطابقًا لشاشته كمفوضية FTD، يمكنك التبديل بينها باستخدام Ctrl+a ← n.

استخدام Ctrl+a ←

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

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

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

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

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

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

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

لتسهيل الاستخدام، ابدأ جلسة شاشة واحدة فقط. يجب أن يكون لديك حساب حالي من وقت إعداد 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 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. في مفوضية إدارة الأغذية والدواء، أنشئ مجموعة بيانات تشغيلية جديدة والتزم بها كمجموعة نشطة. مجموعة البيانات التشغيلية هي إعدادات شبكة 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 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 على رابط RCP:

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

إذا لم تظهر شبكة "lablab" في القائمة، حاوِل البحث عنها مرة أخرى.

8- إضافة ملحق RCP

تفويض Threading غير نشط على الشبكة، ما يعني أننا سنحتاج إلى إضافة رابط 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

انتقِل إلى Thread حتى تنضمّ رابط RCP إلى شبكة "codelab". انتظِر بضع ثوانٍ، تحقَّق من حالة 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 Commissioner للتحقُّق من أجهزة التوجيه والجداول الفرعية للتأكُّد من أن كلا الجهازَين جزءان من الشبكة نفسها. استخدِم 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

يمكنك فحص اتصال الشبكة المحلية الشبكية لجهة الانضمام عبر بروتوكول CCP (عنوان الشبكة المحلية المحلية الذي تم الحصول عليه من مخرجات 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_2العقدات.png

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

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

b75a527be4563215.png

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

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

انتقِل إلى Thread حتى ينضم عضو FTD إلى شبكة "codelab"، ويتحقّق على الفور من الحالة وRLOC16:

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

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

تحقَّق من عناوين IPv6 للجهاز. يُرجى العِلم أنّه ما مِن شهادة ALOC. ويرجع ذلك إلى أنّ هذا الجهاز ليس القائد، ولا يملك دورًا خاصًا بـ Allcast يتطلب توفّر شهادة 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 Commissioner وتحقّق من جهاز التوجيه والجداول الفرعية للتأكّد من توفّر ثلاثة أجهزة في شبكة "codelab":

## 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 عامًا، سيعود تلقائيًا بعد فترة عشوائية في غضون دقيقتين إلى جهاز توجيه.

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

## 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 في FTDJOINer:

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

> state
router
Done
> rloc16
b800
Done

خفض مستوى انضمام FTD

يمكنك اختبار هذا السلوك من خلال الرجوع إلى إصدار سابق من أداة FTD من جهاز توجيه إلى جهاز نهائي. غيِّر الولاية إلى "طفل" وتحقَّق من 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، سيصبح أحد أجهزة التوجيه الأخرى القائد الجديد.

في FTD Commissioner (إيقاف 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

إنّ شبكة سلسلة المحادثات التي تحتوي على عقدتَين ليست ممتعة جدًا. لنبدأ من جديد في تفويض FTD على الإنترنت.

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

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

> ifconfig up
Done
> thread start
Done

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

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

> state
router
Done

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

## 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- استخدام البث المتعدد

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

عنوان IPv6

النطاق

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

ff02::1

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

كل تدريبات تدريبي مسبق على الجهاز

ff02::2

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

كل أجهزة FTD وأجهزة توجيه الحدود

ff03::1

شبكة لاسلكية محلية

كل تدريبات تدريبي مسبق على الجهاز

ff03::2

شبكة لاسلكية محلية

كل أجهزة FTD وأجهزة توجيه الحدود

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

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

فحص الاتصال بـ ff02::1 من FTD Commissioner:

## 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 (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) هو LLA لمفوّض FTD، والثاني هو (ينتهي بـ 943b) هو LLA التابع لـ RCP.

otcodelab_top02C_02_LL02.png

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

شبكة لاسلكية محلية

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

فحص الاتصال بـ ff03::1 من FTD Commissioner:

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

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

اطّلِع على حالة شريك RRC لتأكيد ما يلي:

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

> state
child

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

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

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

يمكنك الحصول على عنوان معرّف بطاقة SIM المضمنة (EID) المحلي لجهة 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 والاتصال بالمقبس الذي أعددته في رابط FTD باستخدام 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 Dialer، تم تلقّي رسالة UDP.

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

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

14- تهانينا.

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

b915c433e7027cc7.png

أنت تعلم الآن:

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

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

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

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

مواصلة القراءة

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

مرجع: