1. مقدمة
OpenThread هو إصدار من Google عبارة عن تنفيذ مفتوح المصدر لبروتوكول الشبكة Thread®. أصدرت Google Nest بروتوكول OpenThread لإتاحة التكنولوجيا المستخدَمة في منتجات Nest على نطاق واسع للمطوّرين بهدف تسريع تطوير المنتجات الخاصة بالشبكة المنزلية المتصلة.
يحدّد مواصفات Thread بروتوكول اتصال لاسلكي موثوق وآمن ومنخفض الطاقة بين الأجهزة يستند إلى IPv6 لتطبيقات المنزل. تنفّذ OpenThread جميع طبقات شبكة Thread، بما في ذلك الإصدار السادس من بروتوكول الإنترنت (IPv6) و6LoWPAN وIEEE 802.15.4 مع أمان MAC وإنشاء روابط الشبكة وتوجيه الشبكة.
في هذا الدرس العملي، ستبرمِج OpenThread على أجهزة حقيقية، وتنشئ شبكة Thread وتديرها، وتتبادل الرسائل بين العُقد.
أهداف الدورة التعليمية
- إنشاء وتثبيت ثنائيات OpenThread CLI على لوحات التطوير
- إنشاء جهاز RCP يتألف من جهاز Linux ولوحة تطوير
- التواصل مع جهاز RCP باستخدام OpenThread Daemon و
ot-ctl
- إدارة عُقد Thread يدويًا باستخدام GNU Screen وOpenThread CLI
- إعداد الأجهزة بشكل آمن على شبكة Thread
- طريقة عمل البث المتعدد باستخدام بروتوكول IPv6
- تمرير الرسائل بين عُقد Thread باستخدام UDP
المتطلبات
الأجهزة:
- 3 لوحات تطوير Nordic Semiconductor nRF52840
- 3 كابلات USB إلى Micro-USB لتوصيل اللوحات
- جهاز Linux مزوّد بـ 3 منافذ USB على الأقل
البرامج:
- GNU Toolchain
- أدوات سطر الأوامر Nordic nRF5x
- برنامج Segger J-Link
- OpenThread
- Git
2. الخطوات الأولى
محاكاة OpenThread
قبل البدء، ننصحك بتجربة OpenThread Simulation Codelab للتعرّف على مفاهيم Thread الأساسية وواجهة سطر الأوامر OpenThread.
محطات المنفذ التسلسلي
يجب أن تكون على دراية بكيفية الاتصال بمنفذ تسلسلي من خلال وحدة طرفية. يستخدم هذا الدرس العملي GNU Screen ويقدّم نظرة عامة على الاستخدام، ولكن يمكن استخدام أي برنامج طرفي آخر.
جهاز Linux
تم تصميم هذا الدرس التطبيقي العملي لاستخدام جهاز Linux يستند إلى i386 أو x86 ليكون بمثابة المضيف لجهاز Radio Co-Processor (RCP) Thread، ولتثبيت جميع لوحات تطوير Thread. تم اختبار جميع الخطوات على نظام التشغيل Ubuntu 14.04.5 LTS (Trusty Tahr).
لوحات Nordic Semiconductor nRF52840
يستخدم هذا الدرس التطبيقي ثلاث لوحات nRF52840 PDK.
تثبيت SEGGER J-Link
نستخدم SEGGER J-Link لبرمجة لوحات nRF52840 التي تحتوي على وحدات JTAG مدمجة. ثبِّت هذا البرنامج على جهاز Linux.
نزِّل الحزمة المناسبة لجهازك وثبِّتها في الموقع الجغرافي المناسب. في نظام التشغيل Linux، يكون هذا الرمز /opt/SEGGER/JLink
.
تثبيت أدوات سطر الأوامر nRF5x
تتيح لك أدوات سطر الأوامر nRF5x نقل ملفات OpenThread الثنائية إلى لوحات nRF52840. ثبِّت الإصدار المناسب من nRF5x-Command-Line-Tools-<OS> على جهاز Linux.
ضَع الحزمة المستخرَجة في المجلد الجذر ~/
تثبيت مجموعة أدوات ARM GNU
يتم استخدام ARM GNU Toolchain في عملية الإنشاء.
ننصحك بوضع الأرشيف المستخرَج في /opt/gnu-mcu-eclipse/arm-none-eabi-gcc/
على جهاز Linux. اتّبِع التعليمات الواردة في ملف readme.txt
للأرشيف للحصول على تعليمات التثبيت.
شاشة التثبيت (اختيارية)
Screen هي أداة بسيطة للوصول إلى الأجهزة المتصلة بمنفذ تسلسلي. يستخدم هذا الدرس التطبيقي Screen، ولكن يمكنك استخدام أي تطبيق طرفي للمنفذ التسلسلي تريده.
$ 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 Joiner
إنشاء وتثبيت
أنشئ مثال OpenThread nRF52840 باستخدام Joiner ووظيفة USB الأصلية. يستخدم الجهاز دور "المُضيف" للمصادقة عليه بأمان وإعداده على شبكة Thread. تتيح واجهة USB الأصلية استخدام USB CDC ACM كنقل تسلسلي بين nRF52840 والمضيف.
احرص دائمًا على تنظيف مستودع الرموز البرمجية من الإصدارات السابقة أولاً عن طريق تنفيذ rm -rf build
.
$ cd ~/src $ git clone --recursive https://github.com/openthread/ot-nrf528xx.git $ cd ot-nrf528xx $ script/build nrf52840 USB_trans
انتقِل إلى الدليل الذي يحتوي على ملف OpenThread RCP الثنائي، وحوِّله إلى تنسيق سداسي عشري:
$ cd ~/src/ot-nrf528xx/build/bin $ arm-none-eabi-objcopy -O ihex ot-rcp ot-rcp.hex
وصِّل كابل USB بمنفذ تصحيح الأخطاء Micro-USB بجانب دبوس الطاقة الخارجي على لوحة nRF52840، ثم وصِّله بجهاز Linux. اضبط مفتاح مصدر طاقة nRF على لوحة nRF52840 على VDD. عند توصيل الجهاز بشكل صحيح، يضيء مؤشر LED5.
إذا كانت هذه اللوحة هي اللوحة الأولى التي يتم توصيلها بجهاز Linux، ستظهر كمنفذ تسلسلي /dev/ttyACM0
(تستخدم جميع لوحات nRF52840 ttyACM
كمعرّف للمنفذ التسلسلي).
$ ls /dev/ttyACM* /dev/ttyACM0
سجِّل الرقم التسلسلي للوحة nRF52840 المستخدَمة في RCP:
انتقِل إلى موقع "أدوات سطر الأوامر" 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.
أضِف التصنيف "برنامج الشركاء المعتمدين" إلى اللوحة حتى لا تخلط بين أدوار اللوحة لاحقًا.
الاتصال بمنفذ USB الأصلي
بما أنّ إصدار OpenThread RCP يتيح استخدام USB CDC ACM الأصلي كنقل تسلسلي، يجب استخدام منفذ nRF USB على لوحة nRF52840 للتواصل مع مضيف RCP (جهاز Linux).
افصل طرف Micro-USB من كابل USB عن منفذ تصحيح الأخطاء في لوحة nRF52840 التي تم تحديثها، ثم أعد توصيله بمنفذ nRF USB Micro-USB بجانب زر RESET. اضبط مفتاح مصدر طاقة nRF على USB.
بدء برنامج OpenThread الخفي
في تصميم RCP، استخدِم OpenThread Daemon للتواصل مع جهاز Thread وإدارته. ابدأ ot-daemon
باستخدام العلامة -v
verbose حتى تتمكّن من الاطّلاع على ناتج السجلّ والتأكّد من أنّه قيد التشغيل:
$ cd ~/src/openthread $ sudo ./build/posix/src/posix/ot-daemon -v \ 'spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=460800'
عند النجاح، يؤدي ot-daemon
في الوضع التفصيلي إلى إنشاء ناتج مشابه لما يلي:
ot-daemon[12463]: Running OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; POSIX; Aug 30 2022 10:55:05 ot-daemon[12463]: Thread version: 4 ot-daemon[12463]: Thread interface: wpan0 ot-daemon[12463]: RCP version: OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; SIMULATION; Aug 30 2022 10:54:10
اترك نافذة المحطة الطرفية هذه مفتوحة حتى تتمكّن من عرض السجلات من ot-daemon
.
استخدِم ot-ctl
للتواصل مع عقدة RCP. تستخدم ot-ctl
واجهة سطر الأوامر نفسها التي يستخدمها تطبيق OpenThread CLI. وبالتالي، يمكنك التحكّم في عقد ot-daemon
بالطريقة نفسها التي تتحكّم بها في أجهزة Thread المحاكية الأخرى.
في نافذة وحدة طرفية ثانية، ابدأ ot-ctl
:
$ sudo ./build/posix/src/posix/ot-ctl >
تحقَّق من state
في Node 2 (عقدة RCP) التي بدأت بها ot-daemon
:
> state disabled Done
5- إعداد FTD
عقدتا Thread الأخريان المستخدَمتان في هذا الدرس العملي هما أجهزة Thread كاملة (FTD) بتصميم "نظام على شريحة" (SoC) العادي. يعمل أحد الأجهزة كجهاز تحكّم لإجراء المصادقة والتفعيل بشكل آمن على تلك الشبكة. يعمل الجهاز الآخر كجهاز Joiner يمكن لجهاز Commissioner المصادقة عليه للوصول إلى شبكة Thread.
إنشاء وتثبيت
أنشئ مثالاً على جهاز FTD في OpenThread لمنصّة nRF52840، مع تفعيل دورَي "المفوِّض" و"المُضيف":
$ cd ~/src/ot-nrf528xx $ rm -rf build $ script/build nrf52840 USB_trans -DOT_JOINER=ON -DOT_COMMISSIONER=ON
انتقِل إلى الدليل الذي يحتوي على ملف OpenThread Full Thread Device (FTD) الثنائي لواجهة سطر الأوامر، وحوِّله إلى تنسيق سداسي عشري:
$ cd ~/src/ot-nrf528xx/build/bin $ arm-none-eabi-objcopy -O ihex ot-cli-ftd ot-cli-ftd.hex
وصِّل كابل USB بمنفذ Micro-USB بجانب دبوس الطاقة الخارجي على لوحة nRF52840، ثم وصِّله بجهاز Linux. إذا كان جهاز RCP لا يزال متصلاً بجهاز Linux، من المفترض أن تظهر اللوحة الجديدة كمنفذ تسلسلي /dev/ttyACM1
(تستخدم جميع لوحات nRF52840 ttyACM
كمعرّف للمنفذ التسلسلي).
$ ls /dev/ttyACM* /dev/ttyACM0 /dev/ttyACM1
كما في السابق، سجِّل الرقم التسلسلي للوحة nRF52840 المستخدَمة في اختبار FTD:
انتقِل إلى موقع "أدوات سطر الأوامر" 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 الأصلي
بما أنّ إصدار FTD من OpenThread يتيح استخدام USB CDC ACM الأصلي كنقل تسلسلي، يجب استخدام منفذ USB nRF على لوحة nRF52840 للتواصل مع مضيف RCP (جهاز Linux).
افصل طرف Micro-USB من كابل USB عن منفذ تصحيح الأخطاء في لوحة nRF52840 التي تم تحديثها، ثم أعد توصيله بمنفذ nRF USB Micro-USB بجانب زر RESET. اضبط مفتاح مصدر طاقة nRF على USB.
التحقّق من صحة الإصدار
تأكَّد من نجاح عملية الإنشاء من خلال الوصول إلى واجهة سطر الأوامر OpenThread باستخدام GNU Screen من نافذة طرفية.
$ screen /dev/ttyACM1
في النافذة الجديدة، اضغط على مفتاح Return على لوحة المفاتيح عدة مرات لعرض طلب OpenThread CLI >
. اعرض واجهة IPv6 وابحث عن العناوين:
> ifconfig up Done > ipaddr fe80:0:0:0:1cd6:87a9:cb9d:4b1d Done
استخدام Ctrl+a →
d
لإلغاء الربط بشاشة FTD Commissioner CLI والرجوع إلى وحدة Linux الطرفية حتى يمكن تحديث اللوحة التالية. لإعادة إدخال واجهة سطر الأوامر في أي وقت، استخدِم screen -r
من سطر الأوامر. للاطّلاع على قائمة بالشاشات المتاحة، استخدِم screen -ls
:
$ screen -ls There is a screen on: 74182.ttys000.mylinuxmachine (Detached) 1 Socket in /tmp/uscreens/S-username.
إعداد أداة FTD Joiner
كرِّر العملية أعلاه لتثبيت البرنامج على لوحة nRF52840 الثالثة، باستخدام إصدار ot-cli-ftd.hex
الحالي. عند الانتهاء، احرص على إعادة توصيل اللوحة بالكمبيوتر باستخدام منفذ USB الخاص بـ nRF واضبط مفتاح مصدر طاقة nRF على VDD.
إذا كان الجهازان الآخران متصلَين بجهاز Linux عند توصيل اللوحة الثالثة، من المفترض أن تظهر كمنفذ تسلسلي /dev/ttyACM2
:
$ ls /dev/ttyACM* /dev/ttyACM0 /dev/ttyACM1 /dev/ttyACM2
أطلِق على اللوحة اسم "أداة الربط".
عند إثبات الملكية باستخدام Screen، بدلاً من إنشاء مثيل جديد من Screen من سطر الأوامر، أعِد الربط بالمثيل الحالي وأنشئ نافذة جديدة داخله (النافذة التي استخدمتها في FTD Commissioner):
$ screen -r
أنشئ النافذة الجديدة في Screen باستخدام Ctrl+a → c
.
يظهر موجه سطر أوامر جديد. الوصول إلى واجهة سطر الأوامر OpenThread الخاصة ببرنامج FTD Joiner:
$ screen /dev/ttyACM2
في هذه النافذة الجديدة، اضغط على مفتاح Return على لوحة المفاتيح عدّة مرات لعرض طلب OpenThread CLI >
. اعرض واجهة IPv6 وابحث عن العناوين:
> ifconfig up Done > ipaddr fe80:0:0:0:6c1e:87a2:df05:c240 Done
بعد أن أصبحت واجهة سطر الأوامر الخاصة بأداة FTD Joiner في مثيل Screen نفسه الذي تستخدمه أداة FTD Commissioner، يمكنك التبديل بينهما باستخدام Ctrl+a → n
.
استخدام Ctrl+a →
d
في أي وقت للخروج من "الشاشة".
6. إعداد نافذة المحطة الطرفية
ستبدّل بين أجهزة Thread بشكل متكرّر في المستقبل، لذا تأكَّد من أنّ جميعها نشطة ويمكن الوصول إليها بسهولة. حتى الآن، كنا نستخدم أداة Screen للوصول إلى أداتَي FTD، وتتيح هذه الأداة أيضًا تقسيم الشاشة في نافذة الجهاز نفسها. استخدِم هذا الخيار لمعرفة كيفية تفاعل إحدى العُقد مع الأوامر الصادرة عن عقدة أخرى.
يُفضَّل أن تتوفّر لديك أربع نوافذ جاهزة:
- خدمة / سجلات
ot-daemon
- أداة RCP Joiner من خلال
ot-ctl
- FTD Commissioner عبر واجهة سطر الأوامر OpenThread
- FTD Joiner من خلال OpenThread CLI
إذا كنت تريد استخدام إعدادات أو أدوات خاصة بك للمنافذ التسلسلية أو الطرفية، يمكنك الانتقال إلى الخطوة التالية. اضبط نوافذ الجهاز الطرفي لجميع الأجهزة بالطريقة التي تناسبك.
استخدام الشاشة
لتسهيل الاستخدام، ابدأ جلسة "مشاركة الشاشة" واحدة فقط. من المفترض أن يكون لديك رمز من عملية إعداد المصادقة الثنائية.
تبدأ جميع الأوامر في Screen بـ Ctrl+a.
أوامر الشاشة الأساسية:
إعادة الاتصال بجلسة Screen (من سطر الأوامر) |
|
مغادرة جلسة "المشاركة مع الآخرين" | Ctrl+a → |
إنشاء نافذة جديدة ضمن جلسة "مشاركة الشاشة" | Ctrl+a → |
التبديل بين النوافذ في جلسة "الشاشة الذكية" نفسها | Ctrl+a → |
إنهاء النافذة الحالية في جلسة Screen | Ctrl+a → |
تقسيم الشاشة
باستخدام Screen، يمكنك تقسيم نافذة الوحدة الطرفية إلى نوافذ متعددة:
يمكن الوصول إلى الأوامر في screen
باستخدام Ctrl+a. يجب أن يبدأ كل أمر بمجموعة مفاتيح الوصول هذه.
إذا كنت قد اتّبعت الخطوات الواردة في Codelab بدقة، من المفترض أن يكون لديك نافذتان (FTD Commissioner وFTD Joiner) على مثيل الشاشة نفسه. لتقسيم الشاشة بينهما، عليك أولاً إدخال جلسة Screen الحالية:
$ screen -r
يجب أن تكون على أحد أجهزة FTD. اتّبِع الخطوات التالية في تطبيق "الشاشة":
- Ctrl+a →
S
لتقسيم النافذة أفقيًا - Ctrl+a →
Tab
لنقل المؤشر إلى النافذة الفارغة الجديدة - Ctrl+a →
n
للتبديل إلى النافذة التالية - إذا كان هو نفسه النافذة العلوية، اضغط على Ctrl+a →
n
مرة أخرى لعرض جهاز FTD الآخر
أصبح كلاهما مرئيًا الآن. يمكنك التبديل بينهما باستخدام Ctrl+a → Tab
. ننصحك بإعادة تسمية كل نافذة باستخدام Ctrl+a → A
لتجنُّب حدوث أي التباس.
الاستخدام المتقدم
لتقسيم الشاشة بشكل أكبر إلى أرباع وعرض سجلات ot-daemon
وot-ctl
RCP Joiner، يجب بدء تشغيل هاتين الخدمتين ضمن مثيل الشاشة نفسه. لإجراء ذلك، أوقِف ot-daemon
واخرج من ot-ctl
، ثم أعِد تشغيلهما في نوافذ Screen جديدة (Ctrl+a → c
).
هذا الإعداد غير مطلوب ويُترك للمستخدم.
يمكنك تقسيم الشاشة والتنقّل بين النوافذ باستخدام الأوامر التالية:
إنشاء نافذة جديدة | Ctrl+a → |
تقسيم النافذة عموديًا | Ctrl+a → |
تقسيم النافذة أفقيًا | Ctrl+a → |
الانتقال إلى النافذة المعروضة التالية | Ctrl+a → |
التبديل بين النوافذ المعروضة إلى الأمام أو الخلف | Ctrl+a → |
إعادة تسمية النافذة الحالية | Ctrl+a → |
يمكنك مغادرة شاشة Screen في أي وقت باستخدام Ctrl+a → d
وإعادة ربطها باستخدام screen -r
من سطر الأوامر.
لمزيد من المعلومات حول Screen، يمكنك الاطّلاع على مرجع سريع حول GNU Screen.
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 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 Joiner ## ---------------- > scan | PAN | MAC Address | Ch | dBm | LQI | +------+------------------+----+-----+-----+ | c0de | 1ed687a9cb9d4b1d | 11 | -36 | 232 |
من واجهة سطر الأوامر OpenThread على جهاز FTD Joiner:
## FTD Joiner ## ---------------- > scan | PAN | MAC Address | Ch | dBm | LQI | +------+------------------+----+-----+-----+ | c0de | 1ed687a9cb9d4b1d | 11 | -38 | 229 |
إذا لم تظهر شبكة "codelab" في القائمة، حاوِل إجراء عملية الفحص مرة أخرى.
8. إضافة أداة RCP Joiner
لا يتم تفعيل عملية الإعداد عبر Thread في الشبكة، ما يعني أنّه علينا إضافة RCP Joiner إلى شبكة Thread التي أنشأناها للتو باستخدام عملية إعداد خارج النطاق.
في مفوض FTD، دوّنّا ملاحظة حول مفتاح الشبكة، مثل 1234c0de7ab51234c0de7ab51234c0de
. إذا كنت بحاجة إلى البحث عن مفتاح الشبكة مرة أخرى، نفِّذ الأمر التالي على FTD Commissioner:
## FTD Commissioner ## > dataset networkkey 1234c0de7ab51234c0de7ab51234c0de Done
بعد ذلك، في RCP Joiner، اضبط مفتاح شبكة مجموعة البيانات النشطة على مفتاح شبكة FTD Commissioner:
## RCP Joiner ## ---------------- > dataset networkkey 1234c0de7ab51234c0de7ab51234c0de Done > dataset commit active Done
راجِع مجموعة البيانات للتأكّد من إعدادها بشكل صحيح.
## RCP Joiner ## ---------------- > dataset Network Key: 1234c0de7ab51234c0de7ab51234c0de
افتح Thread لكي ينضم جهاز RCP Joiner إلى شبكة "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، تحقَّق من جداول جهاز التوجيه والجهاز التابع للتأكّد من أنّ كلا الجهازين جزء من الشبكة نفسها. استخدِم 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 (عنوان الشبكة المحلية الذي تم الحصول عليه من ناتج 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
لدينا الآن شبكة Thread تتألف من عقدتَين، كما هو موضّح في مخطط طوبولوجيا الشبكة التالي:
مخططات الطوبولوجيا
أثناء تنفيذ بقية Codelab، سنعرض مخططًا جديدًا لبنية شبكة Thread كلما تغيّرت حالة الشبكة. يتم الإشارة إلى أدوار العُقد على النحو التالي:
تكون أجهزة التوجيه دائمًا على شكل خماسي، وتكون الأجهزة الطرفية دائمًا على شكل دوائر. تمثّل الأرقام في كل عُقدة رقم تعريف جهاز التوجيه أو رقم تعريف الجهاز التابع المعروض في ناتج واجهة سطر الأوامر، وذلك استنادًا إلى دور كل عُقدة وحالتها الحالية في ذلك الوقت.
9- تفويض مستخدم FTD Joiner
لنضِف الآن جهاز Thread الثالث إلى شبكة "codelab". في هذه المرة، سنستخدم عملية الإعداد الأكثر أمانًا داخل النطاق، ولن نسمح إلا لجهاز FTD Joiner بالانضمام.
في FTD Joiner، احصل على eui64
ليتمكّن مفوّض FTD من التعرّف عليه:
## FTD Joiner ## ---------------- > eui64 2f57d222545271f1 Done
على FTD Commissioner، ابدأ عملية الإعداد وحدِّد eui64
الجهاز الذي يمكنه الانضمام، بالإضافة إلى بيانات اعتماد الانضمام، مثل J01NME
. بيانات اعتماد الانضمام هي سلسلة خاصة بالجهاز تتألف من أحرف أبجدية رقمية كبيرة (من 0 إلى 9 ومن A إلى Y، باستثناء I وO وQ وZ لتسهيل القراءة)، ويتراوح طولها بين 6 و32 حرفًا.
## FTD Commissioner ## ---------------------- > commissioner start Done > commissioner joiner add 2f57d222545271f1 J01NME Done
انتقِل إلى FTD Joiner. ابدأ دور "المشارك" باستخدام بيانات اعتماد "المشارك" التي أعددتها للتو على جهاز FTD Commissioner:
## 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 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 Joiner بالشبكة كجهاز نهائي (جهاز تابع). في ما يلي البنية المعدَّلة:
10. سلسلة المحادثات في العمل
أجهزة Thread في هذا الدرس العملي هي نوع محدّد من أجهزة Full Thread Device (FTD) يُعرف باسم Router Eligible End Device (REED). وهذا يعني أنّه يمكن أن تعمل إما كجهاز توجيه أو جهاز طرفي، ويمكنها الترقية من جهاز طرفي إلى جهاز توجيه.
يمكن أن تتضمّن شبكة Thread ما يصل إلى 32 جهاز توجيه، ولكنها تحاول الحفاظ على عدد أجهزة التوجيه بين 16 و23. إذا تم ربط جهاز REED كجهاز طرفي (فرعي) وكان عدد أجهزة التوجيه أقل من 16، سيتم ترقيته تلقائيًا إلى جهاز توجيه بعد فترة زمنية عشوائية في غضون دقيقتين.
إذا كان لديك طفلان في شبكة Thread بعد إضافة FTD Joiner، انتظِر دقيقتَين على الأقل، ثم أعد التحقّق من جداول جهاز التوجيه وجداول الأجهزة التابعة على 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 Joiner (عنوان MAC الموسّع = e6cdd2d93249a243
) إلى جهاز توجيه. يُرجى العِلم أنّ RLOC16 يختلف (b800
بدلاً من 0c02
)، وذلك لأنّ RLOC16 يستند إلى رقم تعريف جهاز التوجيه ورقم تعريف الجهاز التابع. عندما ينتقل الجهاز من "جهاز نهائي" إلى "جهاز توجيه"، تتغيّر قيمتا "معرّف جهاز التوجيه" و"معرّف الجهاز الفرعي"، وكذلك RLOC16.
أكِّد الحالة الجديدة وRLOC16 على FTD Joiner:
## FTD Joiner ## ---------------- > state router Done > rloc16 b800 Done
الرجوع إلى إصدار سابق من أداة دمج FTD
يمكنك اختبار هذا السلوك عن طريق الرجوع يدويًا بإصدار FTD Joiner من جهاز توجيه إلى جهاز طرفي. غيِّر الحالة إلى "طفل" وتحقّق من RLOC16:
## FTD Joiner ## ---------------- > state child Done > rloc16 0c03 Done
بالعودة إلى FTD Commissioner، من المفترض أن يظهر 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
بعد مرور بعض الوقت، ستتم إعادة التبديل إلى جهاز توجيه باستخدام RLOC بقيمة b800
.
إزالة القائد
يتم اختيار "القائد" ذاتيًا من بين جميع أجهزة توجيه Thread. وهذا يعني أنّه في حال إزالة جهاز التوجيه الحالي من شبكة Thread، سيصبح أحد أجهزة التوجيه الأخرى هو جهاز التوجيه الرئيسي الجديد.
على مفوض 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
تحقَّق من الجدول الفرعي. لاحظ أنّه تم إنشاء RLOC16 جديد. هذا هو جهاز RCP Joiner، كما هو موضّح من خلال معرّفه وعنوان MAC الموسّع. وللحفاظ على شبكة Thread متماسكة، تم تبديل أجهزة التوجيه الرئيسية، من جهاز FTD Commissioner إلى جهاز 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 Commissioner
لا يمكن الاستفادة من شبكة Thread التي تتضمّن عقدتَين. لنعد الاتصال بمفوض FTD.
على FTD Commissioner، أعِد تشغيل 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
تتألف شبكة Thread من ثلاث عُقد مرة أخرى.
11. تحديد المشاكل وحلّها
قد تكون إدارة شبكة Thread تضم أجهزة متعددة في نوافذ مختلفة على الجهاز أو الشاشة أمرًا معقّدًا. استخدِم هذه النصائح لإعادة ضبط حالة الشبكة أو مساحة العمل في حال مواجهة مشاكل.
الشاشة
إذا واجهت أي صعوبة في إعداداتك (عدد كبير جدًا من نوافذ Screen أو شاشات داخل شاشة)، استمر في إغلاق نوافذ Screen باستخدام Ctrl+a → k إلى أن لا يتبقى أي منها، وسيظهر screen -ls
على سطر الأوامر No Sockets found
. بعد ذلك، أعِد إنشاء نوافذ "الشاشة" لكل جهاز. يتم الاحتفاظ بحالات الجهاز حتى عند إيقاف الشاشة.
عُقد Thread
إذا لم تكن طوبولوجيا شبكة 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 | المستوى | تم التسليم إلى |
| Link-Local | جميع أجهزة FTD وMED |
| Link-Local | جميع أجهزة FTD وأجهزة توجيه الحدود |
| Mesh-Local | جميع أجهزة FTD وMED |
| Mesh-Local | جميع أجهزة FTD وأجهزة توجيه الحدود |
بما أنّنا لن نستخدم جهاز توجيه حدوديًا في هذا الدرس العملي، لنركّز على عنوانَي البث المتعدد FTD وMED.
Link-Local
يشمل نطاق Link-Local جميع واجهات Thread التي يمكن الوصول إليها من خلال عملية إرسال لاسلكي واحدة أو "قفزة" واحدة. تحدّد مخطط الشبكة الأجهزة التي تستجيب لطلب ping إلى عنوان البث المتعدد 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 Commissioner سوى رد واحد من عنوان Link-Local Address (LLA) الخاص بجهاز FTD Joiner. وهذا يعني أنّ جهاز FTD Joiner هو الجهاز الوحيد الذي يمكن لجهاز FTD Commissioner الوصول إليه بخطوة واحدة.
أرسِل الآن إشارة ff02::1
من أداة الانضمام إلى "اختبارات التركيز":
## 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 Commissioner، وأنّ العنوان الثاني (الذي ينتهي بـ 943b
) هو عنوان LLA الخاص بجهاز RCP Joiner.
وهذا يعني أنّ جهاز FTD Joiner متصل مباشرةً بجهاز FTD Commissioner وجهاز RCP Joiner، ما يؤكّد صحة تصميم الشبكة.
Mesh-Local
يشمل نطاق Mesh-Local جميع واجهات Thread التي يمكن الوصول إليها ضمن شبكة Thread نفسها. لنطّلِع على الردود على طلب ping إلى عنوان البث المتعدد 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 Commissioner استجابتَين، إحداهما من أداة تحديد مسار جهاز FTD Joiner (RLOC، تنتهي بـ b800
) والأخرى من معرّف EID لجهاز RCP Joiner على الشبكة المحلية (ML-EID، ينتهي بـ d55f
)، وذلك لأنّ نطاق الشبكة المحلية يتضمّن شبكة Thread بأكملها. وبغض النظر عن مكان الجهاز في الشبكة، سيتم الاشتراك في عنوان ff03::1
.
أرسِل طلب 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
لاحظ وقت الاستجابة لـ RCP Joiner في كل من نواتج اختبار الاتصال. استغرق RCP Joiner وقتًا أطول بكثير للوصول إلى FTD Commissioner (68 ملّي ثانية) مقارنةً بالوقت الذي استغرقه للوصول إلى FTD Joiner (23 ملّي ثانية). ويرجع ذلك إلى أنّها تحتاج إلى إجراء قفزتَين للوصول إلى "مفوض FTD"، مقارنةً بقفزة واحدة بالنسبة إلى "مشارك FTD".
ربما لاحظت أيضًا أنّ اختبار اتصال البث المتعدد على الشبكة المحلية قد استجاب باستخدام RLOC فقط لجهازَي FTD، وليس لجهاز RCP Joiner. ويرجع ذلك إلى أنّ أجهزة FTD هي أجهزة توجيه ضمن الشبكة، بينما جهاز RCP هو جهاز نهائي.
تحقَّق من حالة أداة الانضمام إلى برنامج "المراجع المعتمدون" للتأكّد مما يلي:
## RCP Joiner ## ---------------- > state child
13. إرسال الرسائل باستخدام UDP
إحدى خدمات التطبيقات التي يوفّرها OpenThread هي بروتوكول مخطط بيانات المستخدم (UDP)، وهو بروتوكول طبقة النقل. يمكن لتطبيق تم إنشاؤه على OpenThread استخدام واجهة برمجة التطبيقات UDP لنقل الرسائل بين العُقد في شبكة Thread، أو إلى أجهزة أخرى في شبكة خارجية (مثل الإنترنت، إذا كانت شبكة Thread تتضمّن جهاز توجيه حدود).
يتم عرض مقابس UDP من خلال واجهة سطر الأوامر (CLI) في OpenThread. لنستخدِمها لتمرير الرسائل بين جهازي FTD.
احصل على عنوان معرّف شريحة SIM المضمّنة (EID) الخاص بـ FTD Joiner. نستخدم هذا العنوان لأنّه يمكن الوصول إليه من أي مكان داخل شبكة Thread.
## FTD Joiner ## ---------------- > ipaddr fdc0:de7a:b5c0:0:0:ff:fe00:fc00 # Leader Anycast Locator (ALOC) fdc0:de7a:b5c0:0:0:ff:fe00:b800 # Routing Locator (RLOC) fe80:0:0:0:e4cd:d2d9:3249:a243 # Link-Local Address (LLA) fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd # Mesh-Local EID (ML-EID) Done
ابدأ UDP واربطه بمقبس لأي عنوان IPv6:
## FTD Joiner ## ---------------- > udp open Done > udp bind :: 1212
انتقِل إلى FTD Commissioner، وابدأ UDP، واربطه بالمقبس الذي أعددته على FTD Joiner، باستخدام ML-EID:
## FTD Commissioner ## ---------------------- > udp open Done > udp connect fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd 1212 Done
يجب أن يكون اتصال UDP نشطًا بين العقدتين. رسالة من مفوّض FTD:
## FTD Commissioner ## ---------------------- > udp send hellothere Done
على FTD Joiner، تم استلام رسالة UDP.
## FTD Joiner ## ---------------- > 10 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:c00 49153 hellothere
14. تهانينا!
لقد أنشأت شبكة Thread فعلية.
أنت تعرف الآن:
- الفرق بين أنواع أجهزة Thread وأدوارها ونطاقاتها
- كيفية إدارة أجهزة Thread لحالاتها داخل الشبكة
- how to pass simple messages between nodes using UDP
الخطوات التالية
استنادًا إلى هذا الدرس التطبيقي حول الترميز، جرِّب التمارين التالية:
- أعِد برمجة لوحة FTD Joiner كجهاز MTD باستخدام ملف
ot-cli-mtd
الثنائي، ولاحظ أنّها لا تُرقّي نفسها أبدًا إلى جهاز توجيه أو تحاول أن تصبح الجهاز الرئيسي. - أضِف المزيد من الأجهزة (جرِّب منصة مختلفة!) إلى الشبكة واعرض المخطط الطوبولوجي باستخدام جداول جهاز التوجيه والأجهزة الفرعية، بالإضافة إلى طلبات اختبار الاتصال لعناوين البث المتعدد
- استخدام pyspinel للتحكّم في NCP
- حوِّل NCP إلى جهاز توجيه حدودي باستخدام OpenThread Border Router ووصِّل شبكة Thread بالإنترنت
محتوى إضافي للقراءة
يمكنك الاطّلاع على openthread.io وGitHub للحصول على مجموعة متنوعة من مراجع OpenThread، بما في ذلك:
- الأنظمة الأساسية المتوافقة: يمكنك الاطّلاع على جميع الأنظمة الأساسية المتوافقة مع OpenThread
- إنشاء OpenThread: مزيد من التفاصيل حول إنشاء OpenThread وإعداده
- مقدمة عن Thread: تتناول جميع مفاهيم Thread الواردة في هذا الدرس التطبيقي
مرجع: