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
- تفعيل الأجهزة بأمان على شبكة Thread
- آلية عمل البث المتعدد لبروتوكول IPv6
- تمرير الرسائل بين عقد Thread باستخدام بروتوكول UDP
المتطلبات
الأجهزة:
- 3 لوحات تطوير nRF52840 من Nordic Semiconductor
- 3 كابلات USB إلى منفذ USB صغير لتوصيل اللوحات
- جهاز Linux مزوّد بثلاثة منافذ USB على الأقل
البرامج:
- مجموعة أدوات GNU
- أدوات سطر الأوامر في Nordic nRF5x
- برنامج Segger J-Link
- OpenThread
- Git
2. الخطوات الأولى
محاكاة OpenThread
قبل البدء، ننصحك بالاطّلاع على Codelab محاكاة OpenThread للتعرّف على المفاهيم الأساسية لبروتوكول Thread وواجهة OpenThread CLI.
محطات المنافذ التسلسلية
يجب أن تكون على دراية بكيفية الاتصال بمنفذ تسلسلي من خلال وحدة تحكّم. يستخدم هذا الإصدار من Codelab برنامج GNU Screen ويقدّم نظرة عامة على الاستخدام، ولكن يمكن استخدام أي برنامج آخر لواجهة سطر الأوامر.
جهاز Linux
تم تصميم هذا الدرس الدراسي حول رموز البرامج لاستخدام جهاز Linux المستنِد إلى i386 أو x86 ليكون مضيفًا لجهاز Thread المزوّد بمعالج مساعد للراديو (RCP) ولفلاش جميع لوحات تطوير 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 Toolchain
يتم استخدام مجموعة أدوات 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. إعداد أداة "ربط المحتوى في تطبيقات البث"
الإنشاء والفلاش
أنشئ مثال OpenThread nRF52840 باستخدام وظائف Joiner وUSB الأصلية. يستخدم الجهاز دور "المشترِك" ليتم مصادقةه وإعداده بأمان على شبكة Thread. يتيح USB الأصلي استخدام USB CDC ACM كوسيط نقل تسلسلي بين nRF52840 والمضيف.
عليك دائمًا تنظيف مستودع النُسخ السابقة أولاً من خلال تشغيل rm -rf build
.
$ cd ~/src $ git clone --recursive https://github.com/openthread/ot-nrf528xx.git $ cd ot-nrf528xx $ script/build nrf52840 USB_trans
انتقِل إلى الدليل الذي يتضمّن ملف OpenThread RCP الثنائي، واحوِّله إلى تنسيق سداسي عشري:
$ cd ~/src/ot-nrf528xx/build/bin $ arm-none-eabi-objcopy -O ihex ot-rcp ot-rcp.hex
اربط كابل USB بمنفذ تصحيح أخطاء USB الصغير بجانب دبوس الطاقة الخارجي على لوحة nRF52840، ثم وصِّله بجهاز Linux. اضبط مفتاح مصدر الطاقة في nRF على لوحة nRF52840 على VDD. عند التوصيل بشكل صحيح، يضيء LED5.
إذا كانت هذه هي اللوحة الأولى التي تم توصيلها بجهاز Linux، ستظهر على أنّها المنفذ التسلسلي /dev/ttyACM0
(تستخدم جميع لوحات nRF52840 الرمز ttyACM
لمعرّف المنفذ التسلسلي).
$ ls /dev/ttyACM* /dev/ttyACM0
يُرجى تدوين الرقم التسلسلي للوحة nRF52840 المستخدَمة في وحدة التحكّم عن بُعد:
انتقِل إلى موقع "أدوات سطر أوامر 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 يتيح استخدام وحدة التحكّم في الاتصال (ACM) الأصلية عبر USB كوسيط نقل تسلسلي، يجب استخدام منفذ nRF USB على لوحة nRF52840 للتواصل مع مضيف RCP (جهاز Linux).
عليك فصل طرف كابل USB المصغّر من منفذ تصحيح الأخطاء في لوحة nRF52840 التي تم فلاشها، ثم إعادة توصيله بمنفذ nRF USB المصغّر بجانب زر إعادة الضبط. اضبط مفتاح التبديل مصدر الطاقة في جهاز nRF على USB.
بدء برنامج OpenThread الخفي
في تصميم RCP، استخدِم OpenThread Daemon للتواصل مع جهاز Thread وإدارته. ابدأ ot-daemon
باستخدام العلامة -v
التفصيلية حتى تتمكّن من الاطّلاع على إخراج السجلّ والتأكّد من تشغيله:
$ cd ~/src/openthread $ sudo ./build/posix/src/posix/ot-daemon -v \ 'spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=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
للعقدة 2 (عقدة RCP) التي بدأتها باستخدام ot-daemon
:
> state disabled Done
5- إعداد وحدات FTD
عقدتا Thread الأخريان المستخدَمتان في هذا الدليل التعليمي هما Full Thread Devices (FTDs) على تصميم System-on-Chip (SoC) العادي. في الإعدادات العلنية، يمكن استخدام wpantund
، وهو برنامج تشغيل واجهة شبكة من فئة الإنتاج، للتحكّم في مثيلات OpenThread NCP، ولكن في هذا الدرس التطبيقي حول الترميز، سنستخدم ot-ctl
، وهو واجهة سطر أوامر OpenThread.
يعمل جهاز واحد كمفوّض لمصادقة الأجهزة وتفعيلها بأمان على تلك الشبكة. يعمل الجهاز الآخر كجهاز "مُدرِج" يمكن للمشرف المصادقة عليه في شبكة Thread.
الإنشاء والفلاش
أنشئ مثال OpenThread FTD لمنصّة nRF52840 مع تفعيل دورَي "المفوّض" و"المشارِك":
$ cd ~/src/ot-nrf528xx $ rm -rf build $ script/build nrf52840 USB_trans -DOT_JOINER=ON -DOT_COMMISSIONER=ON
انتقِل إلى الدليل الذي يتضمّن ملف OpenThread 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 بمنفذ 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 أصلي
بما أنّ إصدار OpenThread FTD يتيح استخدام وحدة التحكّم في تسلسل الإرسال والاستقبال (ACM) الأصلية في USB لنقل البيانات التسلسلي، عليك استخدام منفذ nRF USB على لوحة nRF52840 للتواصل مع مضيف RCP (جهاز Linux).
عليك فصل طرف كابل USB المصغّر من منفذ تصحيح الأخطاء في لوحة nRF52840 التي تم فلاشها، ثم إعادة توصيله بمنفذ nRF USB المصغّر بجانب زر إعادة الضبط. اضبط مفتاح التبديل مصدر الطاقة في جهاز 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
لفصل الشاشة عن وحدة تحكّم واجهة برمجة التطبيقات لفوترة حدود الجلسة والرجوع إلى وحدة تحكّم 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
. عند الانتهاء، احرص على إعادة توصيل اللوحة بالكمبيوتر الشخصي باستخدام منفذ USB في nRF وضبط مفتاح مصدر طاقة nRF على VDD.
إذا تم ربط العقدتَين الأخرتَين بجهاز Linux عند ربط هذه اللوحة الثالثة، من المفترض أن تظهر على أنّها المنفذ التسلسلي /dev/ttyACM2
:
$ ls /dev/ttyACM* /dev/ttyACM0 /dev/ttyACM1 /dev/ttyACM2
أدخِل تصنيف "موصّل" للوحة.
عند التحقّق باستخدام Screen، بدلاً من إنشاء مثيل جديد من Screen من سطر الأوامر، يمكنك إعادة الربط بالمثيل الحالي وإنشاء نافذة جديدة فيه (التي استخدمتها لمفوّض FTD):
$ screen -r
أنشئ النافذة الجديدة داخل الشاشة باستخدام 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 متوفّرة في نسخة الشاشة نفسها التي تتوفّر فيها أداة تنسيق FTD، يمكنك التبديل بينهما باستخدام Ctrl+a → n
.
استخدام Ctrl+a →
d
في أي وقت للخروج من ميزة "الشاشة"
6. إعداد نافذة المحطة الطرفية
من الآن فصاعدًا، ستتمكّن من التبديل بين أجهزة Thread بشكل متكرّر، لذا تأكّد من أنّها جميعًا قيد الاستخدام ويمكن الوصول إليها بسهولة. حتى الآن، كنّا نستخدم أداة Screen للوصول إلى جهازَي FTD، وتتيح هذه الأداة أيضًا تقسيم الشاشة في نافذة المحطة الطرفية نفسها. استخدِم هذا الخيار لمعرفة كيفية تفاعل عقدة مع الأوامر الصادرة عن عقدة أخرى.
من المفترض أن تظهر لك أربع نوافذ على النحو التالي:
- خدمة
ot-daemon
/ السجلات - RCP Joiner عبر
ot-ctl
- مفوّض FTD عبر واجهة سطر أوامر OpenThread
- FTD Joiner عبر OpenThread CLI
إذا أردت استخدام أداة أو إعدادات المحطة الطرفية / المنفذ التسلسلي، يمكنك تخطّي هذه الخطوة والانتقال إلى الخطوة التالية. يمكنك ضبط نوافذ المحطة الطرفية لجميع الأجهزة بالطريقة التي تناسبك.
استخدام الشاشة
لتسهيل الاستخدام، ابدأ جلسة واحدة فقط من جلسات "الشاشة". من المفترض أن يكون لديك مفتاح من وقت إعداد كلتا وحدات التحكّم في حدود الجلسة.
تبدأ جميع الأوامر ضمن الشاشة بـ Ctrl+a.
الأوامر الأساسية للشاشة:
إعادة الربط بجلسة Screen (من سطر الأوامر) |
|
مغادرة جلسة "الشاشة" | Ctrl+a → |
إنشاء نافذة جديدة ضمن جلسة الشاشة | Ctrl+a → |
التبديل بين النوافذ في جلسة "الشاشة" نفسها | Ctrl+a → |
إغلاق النافذة الحالية في جلسة Screen | Ctrl+a → |
تقسيم الشاشة
باستخدام Screen، يمكنك تقسيم وحدة التحكّم في المحطة إلى نوافذ متعددة:
يتم الوصول إلى الأوامر في screen
باستخدام Ctrl+a. يجب أن يبدأ كلّ أمر بمجموعة مفاتيح الوصول هذه.
إذا كنت تتّبع خطوات Codelab بدقة، من المفترض أن تظهر لك نافذتان (مفوّض FTD ومُشارِك FTD) في مثيل الشاشة نفسه. لتقسيم الشاشة بين التطبيقَين، عليك أولاً الدخول إلى جلسة "الشاشة" الحالية:
$ screen -r
يجب أن تكون تستخدم أحد أجهزة FTD. اتّبِع الخطوات التالية في "الشاشة":
- Ctrl + a →
S
لتقسيم النافذة أفقيًا - Ctrl+a →
Tab
لنقل المؤشر إلى النافذة الجديدة الفارغة - Ctrl+a →
n
للتبديل من هذه النافذة الجديدة إلى النافذة التالية - إذا كان مطابقًا للنافذة العلوية، اضغط على Ctrl+a →
n
مرة أخرى لعرض جهاز FTD الآخر.
أصبح كلاهما مرئيًا الآن. يمكنك التبديل بينهما باستخدام Ctrl+a → Tab
. ننصحك بإعادة تسمية كل نافذة باستخدام Ctrl+a → A
لتجنّب حدوث التباس.
الاستخدام المتقدم
لتقسيم الشاشة إلى أرباع إضافية وعرض سجلات ot-daemon
و"أداة ربط RCP" ot-ctl
، يجب بدء هذه الخدمات ضمن مثيل الشاشة نفسه. لإجراء ذلك، أوقِف ot-daemon
واخرج من ot-ctl
، ثم أعِد تشغيلهما في نوافذ شاشة جديدة (Ctrl+a → c
).
هذا الإعداد غير مطلوب ويتم تركه كتدريب للمستخدم.
يمكنك تقسيم النوافذ والتنقّل بينها باستخدام الأوامر التالية:
إنشاء نافذة جديدة | Ctrl+a → |
تقسيم النافذة عموديًا | Ctrl+a → |
تقسيم النافذة أفقيًا | Ctrl+a → |
الانتقال إلى النافذة التالية المعروضة | Ctrl+a → |
تبديل النافذة المعروضة إلى الأمام أو الخلف | Ctrl+a → |
إعادة تسمية النافذة الحالية | Ctrl+a → |
يمكنك مغادرة الشاشة في أي وقت باستخدام 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:
> 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:
## 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
لا تكون عملية إعداد Thread مفعّلة على الشبكة، ما يعني أنّنا سنحتاج إلى إضافة أداة ربط RCP إلى شبكة Thread التي أنشأناها للتو باستخدام عملية إعداد خارج النطاق.
في مفوّض FTD، سجّلنا مفتاح الشبكة، على سبيل المثال 1234c0de7ab51234c0de7ab51234c0de
. إذا كنت بحاجة إلى البحث عن مفتاح الشبكة مرة أخرى، نفِّذ الأمر التالي على مفوّض FTD:
## FTD Commissioner ## > dataset networkkey 1234c0de7ab51234c0de7ab51234c0de Done
بعد ذلك، في مُجمِّع RCP، اضبط مفتاح شبكة مجموعة البيانات النشطة على مفتاح شبكة مفوض FTD:
## RCP Joiner ## ---------------- > dataset networkkey 1234c0de7ab51234c0de7ab51234c0de Done > dataset commit active Done
تحقّق من مجموعة البيانات للتأكّد من ضبطها بشكل صحيح.
## RCP Joiner ## ---------------- > dataset Network Key: 1234c0de7ab51234c0de7ab51234c0de
افتح سلسلة المحادثات لكي ينضم "مُنشئ جلسة 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، راجِع جداول جهاز التوجيه والجدول الفرعي للتأكّد من أنّ كلا الجهازَين جزء من الشبكة نفسها. استخدِم RLOC16 لتحديد "مُنشئ جلسة RCP".
## FTD Commissioner ## ---------------------- > router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | +----+--------+----------+-----------+-------+--------+-----+------------------+ | 3 | 0x0c00 | 3 | 0 | 0 | 0 | 35 | 1ed687a9cb9d4b1d | Done > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|S|D|VER| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+---+------------------+ | 1 | 0x0c01 | 240 | 25 | 3 | 89 |1|1|1| 2| 1ae529b3a638943b | Done
يمكنك فحص الاتصال بالعنوان المحلي للشبكة لوحدة ربط RCP (العنوان المحلي للشبكة الذي تم الحصول عليه من ipaddr
وحدة ربط RCP) للتحقّق من إمكانية الاتصال:
## FTD Commissioner ## ---------------------- > ping fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f > 8 bytes from fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f: icmp_seq=1 hlim=64 time=40ms
لدينا الآن شبكة Thread تتألف من عقدتَين، كما هو موضّح في مخطّط الطوبولوجيا هذا:
مخطّطات الطوبولوجيا
أثناء العمل على بقية ورشة Codelab، سنعرض مخطّطًا بيانيًا جديدًا لبنية Thread عند تغيُّر حالة الشبكة. يتم الإشارة إلى أدوار العقد على النحو التالي:
تكون أجهزة التوجيه دائمًا خماسية الأضلاع، وتكون الأجهزة الطرفية دائمًا دائرية. تمثّل الأرقام في كلّ عقدة رقم تعريف جهاز التوجيه أو رقم تعريف الجهاز الفرعي المعروض في ناتج واجهة سطر الأوامر، وذلك استنادًا إلى الدور والحالة الحاليَين لكلّ عقدة في ذلك الوقت.
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 Joiner. ابدأ دور "المُشارِك" باستخدام بيانات اعتماد "المُشارِك" التي تم إعدادها للتو في "مفوّض FTD":
## FTD Joiner ## ---------------- > ifconfig up Done > joiner start J01NME Done
في غضون دقيقة أو نحو ذلك، ستتلقّى رسالة تأكيد على نجاح عملية المصادقة:
## FTD Joiner ## ---------------- > Join success
افتح Thread لكي ينضمّ "مُنشئ الجلسة" إلى شبكة "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 بالشبكة كجهاز طرفي (جهاز تابع). في ما يلي البنية المحدَّثة:
10. مثال على سلسلة محادثات
أجهزة Thread في هذا الدليل التعليمي هي نوع محدّد من أجهزة Thread الكاملة (FTD) تُعرف باسم "الأجهزة الطرفية المؤهَّلة للاتصال بالراوتر" (REED). وهذا يعني أنّه يمكن أن يعمل كجهاز توجيه أو جهاز طرفي، ويمكنه ترقية نفسه من جهاز طرفي إلى جهاز توجيه.
يمكن أن يتضمّن الخيط ما يصل إلى 32 جهاز توجيه، ولكنّه يحاول إبقاء عدد أجهزة التوجيه بين 16 و23. إذا تم ربط جهاز REED كجهاز نهائي (فرعي) وكان عدد أجهزة التوجيه أقل من 16 جهازًا، يتم ترقيته تلقائيًا إلى جهاز توجيه بعد فترة زمنية عشوائية في غضون دقيقتين.
إذا كان لديك جهازان فرعيان في شبكة Thread بعد إضافة "جهاز ربط FTD"، انتظِر لمدة دقيقتين على الأقل، ثم أعِد التحقّق من جداول جهاز التوجيه والأجهزة الفرعية في مفوّض FTD:
## FTD Commissioner ## ---------------------- > router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | +----+--------+----------+-----------+-------+--------+-----+------------------+ | 3 | 0x0c00 | 3 | 0 | 0 | 0 | 50 | 1ed687a9cb9d4b1d | | 46 | 0xb800 | 63 | 0 | 3 | 3 | 1 | e6cdd2d93249a243 | > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|S|D|N| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+-+------------------+ | 1 | 0x0c01 | 240 | 61 | 3 | 89 |1|1|1|1| 1ae529b3a638943b | Done
تم ترقية أداة ربط FTD (عنوان MAC الموسّع = e6cdd2d93249a243
) إلى جهاز توجيه. يُرجى العِلم أنّ RLOC16 مختلف (b800
بدلاً من 0c02
). ويرجع ذلك إلى أنّ RLOC16 يستند إلى رقم تعريف جهاز التوجيه ورقم تعريف الجهاز الفرعي. عند الانتقال من "الجهاز الطرفي" إلى "الراوتر"، تتغيّر قيم "رقم تعريف جهاز التوجيه" و"رقم تعريف الجهاز الفرعي"، وكذلك "عنوان RLOC16".
تأكَّد من الحالة الجديدة وRLOC16 على FTD Joiner:
## FTD Joiner ## ---------------- > state router Done > rloc16 b800 Done
الرجوع إلى إصدار سابق من أداة ربط FTD
يمكنك اختبار هذا السلوك عن طريق الرجوع يدويًا إلى إصدار أقدم من موصّل FTD من جهاز توجيه إلى جهاز طرفي. غيِّر الحالة إلى "فرع" وتحقّق من RLOC16:
## FTD Joiner ## ---------------- > state child Done > rloc16 0c03 Done
في صفحة مفوّض 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
.
إزالة القائد
يتم اختيار "القائد" ذاتيًا من بين جميع "أجهزة توجيه المواضيع". وهذا يعني أنّه في حال إزالة الجهاز الرئيسي الحالي من شبكة Thread، سيصبح أحد أجهزة التوجيه الأخرى هو الجهاز الرئيسي الجديد.
في مفوّض FTD، أوقِف Thread لإزالته من شبكة 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
راجِع الجدول الفرعي. يُرجى ملاحظة أنّ هناك RLOC16 جديدًا. هذا هو جهاز "موصّل RCP"، كما هو موضّح بمعرّفه وعنوان MAC الموسّع. وللحفاظ على شبكة Thread معًا، تم تبديل أجهزة التوجيه الرئيسية، من "مفوّض FTD" إلى "موصّل FTD". يؤدي ذلك إلى إنشاء عنوان RLOC16 جديد لوحدة "ربط RCP" (لأنّ رقم تعريف جهاز التوجيه تغيّر من 3 إلى 46).
## FTD Joiner ## ---------------- > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|S|D|N| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+-+------------------+ | 1 | 0xb801 | 240 | 27 | 3 | 145 |1|1|1|1| 1ae529b3a638943b | Done
قد تحتاج إلى الانتظار لبضع دقائق حتى يتم إرفاق مُجمِّع RCP بـ "مُجمِّع FTD" كعنصر تابع. تحقَّق من الحالة وRLOC16 لتأكيد ما يلي:
## RCP Joiner ## -------------- > state child > rloc16 b801
إعادة إرفاق مفوض FTD
لا تُعدّ شبكة Thread التي تتضمّن عقدتَين مفيدةً كثيرًا. لنعيد اتصال "مفوّض FTD" بالإنترنت.
في مفوّض FTD، أعِد تشغيل سلسلة المحادثات:
## 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 أو Screens ضمن Screen)، يُرجى مواصلة إغلاق نوافذ Screen باستخدام Ctrl + a → k إلى أن لا تتبقّى أي نوافذ، وظهور screen -ls
على سطر الأوامر.No Sockets found
بعد ذلك، أعِد إنشاء نوافذ "الشاشة" لكل جهاز. يتم الاحتفاظ بحالات الجهاز حتى عند إغلاق الشاشة.
عقد سلاسل المحادثات
إذا لم تكن شبكة Thread على النحو الموضّح في هذا الدليل التعليمي، أو إذا انقطع الاتصال بين العقد لأي سبب (ربما بسبب دخول جهاز Linux الذي يشغّلها إلى وضع السكون)، من الأفضل إيقاف شبكة Thread ومحو بيانات اعتماد الشبكة والبدء من جديد من خطوة إنشاء شبكة Thread.
لإعادة ضبط وحدات FTD:
## FTD Commissioner or FTD Joiner ## ------------------------------------ > thread stop Done > ifconfig down Done > factoryreset Done
يمكن إعادة ضبط RCP بالطريقة نفسها من خلال ot-ctl
:
## RCP Joiner ## ---------------- > thread stop Done > ifconfig down Done > factoryreset Done
12. استخدام البث المتعدد
يُستخدَم البث المتعدد لإرسال المعلومات إلى مجموعة من الأجهزة في آنٍ واحد. في شبكة Thread، يتم حجز عناوين معيّنة لاستخدام البث المتعدد مع مجموعات مختلفة من الأجهزة، وذلك استنادًا إلى النطاق.
عنوان IPv6 | المستوى | تم التسليم إلى |
| رابط محلي | جميع FTDs وMEDs |
| رابط محلي | جميع وحدات FTD وأجهزة توجيه الحدود |
| Mesh-Local | جميع FTDs وMEDs |
| Mesh-Local | جميع وحدات FTD وأجهزة توجيه الحدود |
بما أنّنا لا نستخدم جهاز توجيه حدوديًا في هذا الدليل التعليمي، لنركّز على عنوانَي البث المتعدد FTD وMED.
Link-Local
يتألف النطاق المحلي للربط من جميع واجهات Thread التي يمكن الوصول إليها من خلال إرسال بث لاسلكي واحد أو "قفزة" واحدة. تحدِّد بنية الشبكة الأجهزة التي تستجيب لطلب فحص الاتصال بعنوان البث المتعدد ff02::1
.
تلقّيت رسالة من ff02::1
من مفوّض FTD:
## FTD Commissioner ## ---------------------- > ping ff02::1 > 8 bytes from fe80:0:0:0:e4cd:d2d9:3249:a243: icmp_seq=2 hlim=64 time=9ms
هناك جهازان آخران في الشبكة (FTD Joiner وRCP Joiner)، ولكن لم يتلقّ "مفوّض FTD" سوى استجابة واحدة من عنوان Link-Local Address (LLA) الخاص بـ FTD Joiner. وهذا يعني أنّ "جهاز الربط في FTD" هو الجهاز الوحيد الذي يمكن لـ "مفوّض FTD" الوصول إليه من خلال قفزة واحدة.
الآن، أرسِل طلبًا للتواصل مع 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
) هو عنوان LLA الخاص بمسؤول RCP.
وهذا يعني أنّ أداة ربط FTD متصلة مباشرةً بكلّ من أداة ربط FTD و"أداة ربط RCP"، ما يؤكّد التخطيط.
Mesh-Local
يتألف النطاق "الشبكة المحلية" من جميع واجهات Thread التي يمكن الوصول إليها ضمن شبكة Thread نفسها. لنطّلِع على الردود على طلب فحص الاتصال بعنوان البث المتعدد ff03::1
.
تلقّيت رسالة من ff03::1
من مفوّض FTD:
## FTD Commissioner ## ---------------------- > ping ff03::1 > 8 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:b800: icmp_seq=3 hlim=64 time=9ms 8 bytes from fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f: icmp_seq=3 hlim=64 time=68ms
هذه المرة، تلقّى مفوّض FTD ردّين، أحدهما من أداة تحديد المسار الخاصة بجهاز ربط FTD (RLOC، تنتهي بالرقم b800
) والآخر من معرّف الجلسة على مستوى الشبكة المحلية لجهاز ربط RCP (ML-EID، ينتهي بالرقم d55f
). ويعود السبب في ذلك إلى أنّ النطاق على مستوى الشبكة المحلية يتضمّن شبكة Thread بأكملها. بغض النظر عن مكان الجهاز في الشبكة، سيتم اشتراكه في عنوان ff03::1
.
يمكنك فحص اتصال 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
لاحِظ وقت استجابة أداة ربط RCP في كلّ من مخرجتَي طلب فحص الاتصال. استغرقت عملية الدمج في RCP وقتًا أطول بكثير للوصول إلى "مفوّض FTD" (68 ملي ثانية) مقارنةً بالوصول إلى "مُدمِج FTD" (23 ملي ثانية). ويعود السبب في ذلك إلى أنّه يجب إجراء قفزتَين للوصول إلى "مفوّض FTD"، مقارنةً بقفزة واحدة لـ "مُدرِج FTD".
ربما لاحظت أيضًا أنّ طلب البث المتعدد على مستوى الشبكة المحلية قد استجاب باستخدام عنوان RLOC لوحدتي FTD فقط، وليس لوحدة "موصّل RCP". ويرجع ذلك إلى أنّ وحدات FTD هي أجهزة توجيه ضمن الشبكة، في حين أنّ RCP هو جهاز طرفي.
تحقَّق من حالة مُنشئ مجموعات RCP للتأكّد مما يلي:
## RCP Joiner ## ---------------- > state child
13. إرسال الرسائل باستخدام بروتوكول UDP
من خدمات التطبيقات التي يوفّرها OpenThread هو بروتوكول مخطّط بيانات المستخدم (UDP)، وهو بروتوكول طبقة النقل. يمكن للتطبيق المبني على OpenThread استخدام واجهة برمجة التطبيقات UDP لتمرير الرسائل بين العقد في شبكة Thread أو إلى الأجهزة الأخرى في شبكة خارجية (مثل الإنترنت، إذا كانت شبكة Thread تتضمّن جهاز توجيه حدوديًا).
يتم عرض مقابس UDP من خلال واجهة سطر الأوامر OpenThread. لنستخدمه لنقل الرسائل بين جهازَي FTD.
احصل على عنوان معرّف الجلسة المحلية للشبكة لـ FTD Joiner. نستخدم هذا العنوان لأنّه يمكن الوصول إليه من أي مكان ضمن شبكة Thread.
## FTD Joiner ## ---------------- > ipaddr fdc0:de7a:b5c0:0:0:ff:fe00:fc00 # Leader Anycast Locator (ALOC) fdc0:de7a:b5c0:0:0:ff:fe00:b800 # Routing Locator (RLOC) fe80:0:0:0:e4cd:d2d9:3249:a243 # Link-Local Address (LLA) fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd # Mesh-Local EID (ML-EID) Done
ابدأ بروتوكول UDP واربطه بمقبس لأي عنوان IPv6:
## FTD Joiner ## ---------------- > udp open Done > udp bind :: 1212
انتقِل إلى مفوّض FTD، وابدأ بروتوكول UDP، واتصل بمقبس الشبكة الذي أعددته على "موصِّل FTD" باستخدام معرّف 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 لأوضاعها ضمن الشبكة
- كيفية تمرير رسائل بسيطة بين العقد باستخدام بروتوكول UDP
الخطوات التالية
استنادًا إلى هذا الدرس التطبيقي حول الترميز، جرِّب التمارين التالية:
- أعِد فلاش لوحة FTD Joiner كجهاز MTD باستخدام الثنائي
ot-cli-mtd
، ولاحظ أنّه لا يتم ترقيته أبدًا إلى جهاز توجيه أو يحاول أن يصبح الجهاز الرئيسي. - أضِف المزيد من الأجهزة (جرِّب منصة مختلفة) إلى الشبكة وارسم المخطط باستخدام جداول أجهزة التوجيه والأجهزة الفرعية، بالإضافة إلى عمليات فحص الاتصال بعنوان البث المتعدد.
- استخدِم pyspinel للتحكّم في وحدة التحكّم في الشبكة
- حوِّل وحدة التحكّم في الطاقة إلى جهاز توجيه حدودي باستخدام جهاز توجيه حدودي OpenThread ووصِّل شبكة Thread بالإنترنت.
مراجع إضافية
يمكنك الانتقال إلى openthread.io وGitHub للاطّلاع على مجموعة متنوعة من موارد OpenThread، بما في ذلك:
- الأنظمة الأساسية المتوافقة: يمكنك الاطّلاع على جميع الأنظمة الأساسية المتوافقة مع OpenThread.
- إنشاء OpenThread: مزيد من التفاصيل حول إنشاء OpenThread وضبط إعداداته
- مقدّمة عن سلاسل المحادثات: تتناول جميع مفاهيم سلاسل المحادثات الواردة في هذا الدرس التطبيقي.
مرجع: