Google is committed to advancing racial equity for Black communities. See how.
ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

بناء شبكة خيط مع لوحات nRF52840 و OpenThread

26b7f4f6b3ea0700.png

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

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

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

4806d16a8c137c6d.jpeg

ماذا ستتعلم

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

ماذا ستحتاج

المعدات:

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

برمجة:

  • سلسلة أدوات جنو
  • أدوات سطر الأوامر nRF5x الاسكندنافية
  • برنامج Segger J-Link
  • OpenThread
  • شخص سخيف

باستثناء ما هو مذكور خلافًا لذلك ، يتم ترخيص محتوى Codelab هذا بموجب ترخيص Creative Commons Attribution 3.0 ، ويتم ترخيص نماذج التعليمات البرمجية بموجب ترخيص Apache 2.0 .

محاكاة OpenThread

قبل البدء ، قد ترغب في المرور عبر OpenThread Simulation Codelab ، للتعرف على مفاهيم Thread الأساسية و OpenThread CLI.

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

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

آلة لينكس

تم تصميم Codelab هذا لاستخدام جهاز Linux يستند إلى i386 أو x86 ليكون بمثابة مضيف لجهاز Radio Co-Processor (RCP) Thread ، ولإصدار وميض جميع لوحات تطوير Thread. تم اختبار جميع الخطوات على Ubuntu 14.04.5 LTS (Trusty Tahr).

لوحات الشمال أشباه الموصلات nRF52840

يستخدم Codelab هذا ثلاث لوحات nRF52840 PDK .

a6693da3ce213856.png

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

قم بتنزيل حزمة البرامج والوثائق من J-Link

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

قم بتثبيت nRF5x Command Line Tools

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

قم بتنزيل nRF5x Command Line Tools

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

قم بتثبيت ARM GNU Toolchain

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

قم بتنزيل أرشيف ARM GNU Toolchain المحمول

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

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

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

$ sudo apt-get install screen

OpenThread

استنساخ وتثبيت OpenThread. تتأكد أوامر script/bootstrap من تثبيت toolchain وتهيئة البيئة بشكل صحيح:

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

بناء وفلاش

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

قم دائمًا بتنظيف الريبو للبنيات السابقة أولاً عن طريق تشغيل make clean .

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

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

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

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

20a3b4b480356447.png

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

$ ls /dev/ttyACM*
/dev/ttyACM0

لاحظ الرقم التسلسلي للوحة nRF52840 المستخدمة في RCP:

c00d519ebec7e5f0.jpeg

انتقل إلى موقع أدوات سطر أوامر nRFx ، وقم بوميض الملف السداسي لـ OpenThread RCP على لوحة nRF52840 ، باستخدام الرقم التسلسلي للوحة:

$ cd ~/nrfjprog/
$ ./nrfjprog -f nrf52 -s 683704924 --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).

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

46e7b670d2464842.png

ابدأ برنامج OpenThread Daemon

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

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

عند النجاح ، يقوم برنامج ot-daemon في الوضع المطول بإنشاء إخراج مشابه لما يلي:

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

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

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

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

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

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

> state
disabled
Done

العقدتان الأخريان المستخدمتان في Codelab هذا هما Full Thread Devices (FTDs) في تصميم System-on-Chip (SoC) القياسي. إنهم لا يستخدمون wpantund ، ويقوم المستخدم بإدارتها يدويًا باستخدام OpenThread CLI.

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

بناء وفلاش

قم ببناء مثال OpenThread FTD لمنصة nRF52840 ، مع تمكين أدوار المفوض والنجار:

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

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

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

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

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

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

c00d519ebec7e5f0.jpeg

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

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

تسمية المجلس "المفوض".

تحقق من البناء

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

$ screen /dev/ttyACM1 115200

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

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

استخدم Ctrl + a →

d للفصل من شاشة CLI الخاصة بمفوض 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 Joiner

كرر العملية المذكورة أعلاه لفلاش لوحة nRF52840 الثالثة ، باستخدام بنية ot-cli-ftd.hex .

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

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

تسمية اللوحة "نجار".

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

$ screen -r

قم بإنشاء نافذة جديدة داخل الشاشة باستخدام Ctrl + a →

c **. ** يظهر موجه سطر أوامر جديد. قم بالوصول إلى OpenThread CLI الخاص بـ FTD Joiner:

$ screen /dev/ttyACM2 115200

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

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

الآن بعد أن أصبح FTD Joiner CLI في نفس مثيل Screen مثل مفوض FTD ، يمكنك التبديل بينهما باستخدام Ctrl + a → n .

استخدم Ctrl + a →

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

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

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

  1. خدمة / سجلات ot-daemon
  2. RCP Joiner عبر ot-ctl
  3. مفوض FTD عبر OpenThread CLI
  4. FTD Joiner عبر OpenThread CLI

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

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

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

تبدأ جميع الأوامر داخل الشاشة بـ Ctrl + a.

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

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

screen -r

اترك جلسة الشاشة

Ctrl + a → d

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

Ctrl + a → c

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

Ctrl + a → n (للأمام) Ctrl + a → p (للخلف)

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

Ctrl + a → k

تقسيم الشاشة

باستخدام Screen ، يمكنك تقسيم الجهاز إلى نوافذ متعددة:

f1cbf1258cf0a5a.png

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

إذا كنت تتابع Codelab بالضبط ، فيجب أن يكون لديك نافذتان (مفوض FTD ، 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 Joiner ot-ctl ، يجب بدء هذه الخدمات ضمن نفس مثيل الشاشة. للقيام بذلك ، أوقف ot-daemon ot-ctl ، وأعد 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 .

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

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

> dataset init new
Done
> dataset
Active Timestamp: 1
Channel: 11
Channel Mask: 07fff800
Ext PAN ID: c0de7ab5c0de7ab5
Mesh Local Prefix: fdc0:de7a:b5c0/64
Master 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" مرئية الآن عند مسحها ضوئيًا من أجهزة سلسلة الرسائل الأخرى.

من ot-ctl على RCP Joiner :

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

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

من OpenThread CLI على FTD Joiner :

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

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

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

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

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

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

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

للانضمام ، قم بتعيين المفتاح الرئيسي للشبكة (حصلنا عليه للتو من مفوض FTD) على RCP Joiner في مجموعة البيانات النشطة الخاصة به.

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

> dataset masterkey 1234c0de7ab51234c0de7ab51234c0de
Done
> dataset commit active
Done

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

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

> dataset
Master Key: 1234c0de7ab51234c0de7ab51234c0de

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

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

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

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

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

## 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 Joiner (عنوان Mesh-Local الذي تم الحصول عليه من إخراج ipaddr الخاص بـ RCP Joiner) للتحقق من الاتصال:

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

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

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

otcodelab_top01C_2nodes.png

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

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

b75a527be4563215.png

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

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

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

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

يشير الرقم 0 في العمود J إلى أن تشغيل مؤشر الترابط غير نشط على الجهاز.

لنكن محددين عند تشغيل هذا الجهاز التالي ، والسماح فقط لـ FTD Joiner بالانضمام. لا يزال على FTD Joiner ، احصل على eui64 ، حتى يتمكن مفوض FTD من التعرف عليه:

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

> eui64
2f57d222545271f1
Done

على مفوض FTD ، ابدأ المفوض وحدد eui64 للجهاز الذي يمكنه الانضمام ، إلى جانب بيانات اعتماد Joiner. إن بيانات الاعتماد Joiner Credential عبارة عن عبارة مرور خاصة بالجهاز.

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

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

قم بالتبديل إلى FTD Joiner ، وأعد المسح الضوئي:

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

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

كما هو مشار إليه في 1 في العمود J ، فإن "تشغيل الخيط" نشط الآن على الشبكة. ابدأ دور النجار مع اعتماد النجار الذي قمت بإعداده للتو على مفوض FTD:

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

> ifconfig up
Done
> joiner start J01NME
Done

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

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

>
Join success

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

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

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

تحقق من عناوين IPv6 الخاصة بالجهاز. لاحظ عدم وجود ALOC. هذا لأن هذا الجهاز ليس القائد ، ولا يشغل دورًا خاصًا بـ Anycast يتطلب ALOC.

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

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

قم بالتبديل على الفور إلى مفوض FTD وتحقق من جهاز التوجيه والجداول الفرعية للتأكد من وجود ثلاثة أجهزة في شبكة "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 Joiner بالشبكة كجهاز نهائي (تابع). هنا طوبولوجيا لدينا المحدثة:

otcodelab_top01C_ed01.png

تعد أجهزة الخيط في Codelab هذا نوعًا محددًا من أجهزة الخيط الكامل (FTD) تسمى الجهاز النهائي المؤهل لجهاز التوجيه (REED). هذا يعني أنه يمكنهم العمل إما كموجه أو جهاز نهائي ، ويمكنهم الترويج لأنفسهم من جهاز طرفي إلى جهاز توجيه.

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

إذا كان لديك طفلان في شبكة Thread الخاصة بك بعد إضافة FTD Joiner ، فانتظر دقيقتين على الأقل ، ثم أعد فحص جهاز التوجيه والجداول الفرعية على مفوض 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 (Extended MAC = e6cdd2d93249a243 ) بترقية نفسه إلى جهاز توجيه. لاحظ أن RLOC16 مختلف ( b800 بدلاً من 0c02 ). ذلك لأن RLOC16 يعتمد على معرف الموجه ومعرف الطفل الخاص بالجهاز. عندما ينتقل من الجهاز النهائي إلى جهاز التوجيه ، تتغير قيم معرف جهاز التوجيه ومعرف الطفل ، وكذلك تتغير قيم RLOC16.

otcodelab_top01C.png

قم بتأكيد الحالة الجديدة و RLOC16 على FTD Joiner :

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

> state
router
Done
> rloc16
b800
Done

الرجوع إلى إصدار سابق من FTD Joiner

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

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

> state child
Done
> rloc16
0c03
Done

otcodelab_top01C_ed02.png

مرة أخرى على مفوض FTD ، يجب أن يظهر FTD Joiner الآن في الجدول الفرعي (المعرف = 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

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

otcodelab_top01C.png

أزل القائد

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

على مفوض FTD ، أغلق Thread لإزالته من شبكة Thread:

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

> thread stop
Done
> ifconfig down
Done

في غضون دقيقتين ، يصبح FTD Joiner قائد سلسلة المحادثات الجديد. تحقق من حالة وعناوين IPv6 الخاصة بـ FTD Joiner للتحقق من:

## 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 Joiner ، كما هو مشار إليه بواسطة معرفه و MAC الموسع. من أجل الحفاظ على شبكة Thread معًا ، قامت بتحويل أجهزة التوجيه الأصلية ، من مفوض FTD إلى FTD Joiner. ينتج عن هذا RLOC16 جديد لـ RCP Joiner (بسبب تغيير معرف جهاز التوجيه الخاص به ، من 3 إلى 46).

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

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

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

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

> state
child
> rloc16
b801

أعد إلحاق مفوض FTD

شبكة الخيط ذات العقدتين ليست ممتعة كثيرًا. دعنا نعيد مفوض FTD إلى الإنترنت.

على مفوض FTD ، أعد تشغيل Thread:

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

> ifconfig up
Done
> thread start
Done

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

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

تتكون شبكة الخيوط الخاصة بنا من ثلاث عقد مرة أخرى.

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

شاشة

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

عقد الخيط

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

لإعادة ضبط FTDs:

03 دابا 270

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

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

> thread stop
Done
> ifconfig down
Done
> factoryreset
Done

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

عنوان IPv6

مجال

سلمت ل

ff02::1

ارتباط محلي

جميع FTDs و MEDs

ff02::2

ارتباط محلي

جميع FTDs والموجهات الحدودية

ff03::1

شبكة محلية

جميع FTDs و MEDs

ff03::2

شبكة محلية

جميع FTDs والموجهات الحدودية

نظرًا لأننا لا نستخدم موجه الحدود في Codelab هذا ، فلنركز على عنواني الإرسال المتعدد FTD و MED.

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

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

otcodelab_top02C_02_LL.png

الآن ping ff02::1 من FTD Joiner :

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

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

ردان! عند التحقق من عناوين IPv6 للأجهزة الأخرى ، يمكننا أن نرى الأول (المنتهي بـ 4b1d ) هو LLA التابع لمفوض FTD ، والثاني (المنتهي في 943b ) هو RCP Joiner's LLA.

otcodelab_top02C_02_LL02.png

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

شبكة محلية

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

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

otcodelab_top02C_02_ML.png

Ping ff03::1 من FTD Joiner لتأكيد نفس السلوك:

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

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

otcodelab_top02C_02_LL02.png

لاحظ وقت استجابة RCP Joiner في كلا مخرجي اختبار الاتصال. استغرق RCP Joiner وقتًا أطول للوصول إلى مفوض FTD (68 مللي ثانية) مقارنة بالوصول إلى FTD Joiner (23 مللي ثانية). هذا لأنه يجب أن يقوم بقفلتين للوصول إلى مفوض FTD ، مقارنة بقفزة واحدة لـ FTD Joiner.

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

تحقق من حالة RCP Joiner للتأكيد:

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

> state
child

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

يتم كشف مآخذ UDP من خلال OpenThread CLI. دعنا نستخدمها لتمرير الرسائل بين اثنين من FTDs.

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

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

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

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

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

> udp open
Done
> udp bind :: 1212

قم بالتبديل إلى مفوض FTD ، وابدأ UDP ، وقم بالاتصال بالمقبس الذي قمت بإعداده على FTD Joiner ، باستخدام ML-EID الخاص به:

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

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

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

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

> udp send hellothere
Done

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

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

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

لقد قمت بإنشاء شبكة ترابط فعلية!

b915c433e7027cc7.png

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

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

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

بناء على Codelab هذا ، جرب التمارين التالية:

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

قراءة متعمقة

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

المرجعي: