1. مقدمة
برنامج OpenThread الذي طرحته Google هو تطبيق مفتوح المصدر لبروتوكول شبكة Thread®. أطلقت Google Nest أداة OpenThread لإتاحة التكنولوجيا المستخدمة في منتجات Nest على نطاق واسع للمطوّرين، ما يساعد في تسريع عملية تطوير المنتجات للشبكات المنزلية المتصلة.
تحدِّد مواصفات سلسلة المحادثات بروتوكول اتصال من جهاز إلى جهاز لاسلكي موثوق به وآمن ومنخفض الطاقة يستند إلى بروتوكول 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
- تمرير الرسائل بين عُقد سلسلة المحادثات باستخدام بروتوكول UDP
المتطلبات
الأجهزة:
- 3 لوحات Nordic تعليقconductor nRF52840 لمطوِّري التطبيقات
- 3 كابلات USB إلى USB مصغّر لتوصيل اللوحات
- جهاز Linux مزوَّد بثلاثة منافذ USB على الأقل
البرامج:
- سلسلة أدوات GNU
- أدوات سطر أوامر nRF5x الشمالي
- برنامج Segger J-Link
- OpenThread
- Git
2. الخطوات الأولى
محاكاة OpenThread
قبل البدء، قد تحتاج إلى الاطّلاع على الدرس التطبيقي حول ترميز محاكاة OpenThread للتعرّف على مفاهيم سلسلة المحادثات الأساسية وواجهة سطر الأوامر OpenThread.
أطراف التوصيل التسلسلية
من المفترض أن تكون على دراية بكيفية توصيل منفذ تسلسلي من خلال الطرف الكهربائي. يستخدم هذا الدرس التطبيقي حول الترميز شاشة GNU ويوفر نظرة عامة على الاستخدام، ولكن يمكن استخدام أي برامج طرفية أخرى.
جهاز Linux
صُمِّم هذا الدرس التطبيقي حول الترميز ليستخدم جهاز Linux يستند إلى i386 أو x86 ليكون مضيفًا لجهاز Threador مساعد معالج لاسلكي (RCP) وفلاش جميع لوحات تطوير Thread. تم اختبار جميع الخطوات على نظام التشغيل Ubuntu 14.04.5 LTS (Trusty Tahr).
لوحات Nordic شبهconductor 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 في الإنشاء.
ننصحك بوضع الأرشيف المستخرج في /opt/gnu-mcu-eclipse/arm-none-eabi-gcc/
على جهازك الذي يعمل بنظام التشغيل Linux. اتّبِع التعليمات الواردة في ملف readme.txt
في الأرشيف للحصول على تعليمات التثبيت.
تثبيت الشاشة (اختياري)
الشاشة هي أداة بسيطة للوصول إلى الأجهزة المتصلة بمنفذ تسلسلي. يستخدم هذا الدرس التطبيقي حول الترميز الشاشة، ولكن يمكنك استخدام أي تطبيق تريده للمنفذ التسلسلي.
$ sudo apt-get install screen
3- النُسخ المستنسَخة من المستودعات
OpenThread
استنساخ وتثبيت OpenThread. يتأكّد أوامر script/bootstrap
من تثبيت سلسلة الأدوات وضبط البيئة بشكل صحيح:
$ mkdir -p ~/src $ cd ~/src $ git clone --recursive https://github.com/openthread/openthread.git $ cd openthread $ ./script/bootstrap
إنشاء OpenThread Daemon:
$ script/cmake-build posix -DOT_DAEMON=ON
أصبحت الآن جاهزًا لإنشاء برنامج OpenThread وتحميله إلى لوحات nRF52840.
4. إعداد أداة الانضمام إلى RCP
إنشاء واسترجاع محتوى
يمكنك إنشاء مثال 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 المستخدمة في 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.
تسمية اللوحة بـ "RCP" حتى لا تربك أدوار مجلس الإدارة لاحقًا.
الاتصال بكابل USB الأصلي
يجب استخدام منفذ nRF USB على لوحة nRF52840 للاتصال بمضيف RCP (جهاز Linux) وذلك لأنّ إصدار OpenThread RCP يتيح استخدام ACM الأصلي لـ USB CDC كنقل تسلسلي.
افصل طرف كابل USB عن منفذ تصحيح الأخطاء للوحة nRF52840 الوامضة، ثم أعِد تركيبها في منفذ USB المصغّر nRF USB بجانب الزر إعادة ضبط. اضبط مفتاح تبديل مصدر طاقة nRF على USB.
بدء OpenThread Daemon
في تصميم 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=115200'
عند النجاح، يتم إنشاء مخرجات مشابهة لما يلي في وضع التسجيل المطوَّل (ot-daemon
):
ot-daemon[12463]: Running OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; POSIX; Aug 30 2022 10:55:05 ot-daemon[12463]: Thread version: 4 ot-daemon[12463]: Thread interface: wpan0 ot-daemon[12463]: RCP version: OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; SIMULATION; Aug 30 2022 10:54:10
اترك نافذة المحطة الطرفية هذه مفتوحة بحيث يمكن عرض السجلات من ot-daemon
.
استخدِم ot-ctl
للاتصال بعقدة RCP. يستخدم ot-ctl
واجهة سطر الأوامر نفسها التي يستخدمها تطبيق OpenThread CLI. وبالتالي، يمكنك التحكّم في عُقد ot-daemon
بالطريقة نفسها التي تتحكّم بها أجهزة Thread الأخرى التي تمت محاكاتها.
في نافذة طرفية ثانية، ابدأ ot-ctl
:
$ sudo ./build/posix/src/posix/ot-ctl >
تحقَّق من state
للعقدة 2 (عقدة RCP) التي بدأتها باستخدام ot-daemon
:
> state disabled Done
5- إعداد FTD
العُقدتان الأخريان اللتان يتم استخدامهما في هذا الدرس التطبيقي حول الترميز هما "أجهزة Threads" الكاملة (FTD) على التصميم العادي للمنظومة على الرقاقة (SoC). في إعدادات الإنتاج، يمكن للمرء استخدام wpantund
، وهو برنامج تشغيل لواجهة شبكة على مستوى الإنتاج، للتحكّم في مثيلات OpenThread NCP، ولكن في هذا الدرس التطبيقي حول الترميز، سنستخدم ot-ctl
، OpenThread CLI.
يؤدي أحد الأجهزة دور المفوَّض، لمصادقة الأجهزة واعتمادها بشكل آمن على تلك الشبكة. يعمل الجهاز الآخر كعنصر انضمام يمكن للمفوض المصادقة عليه مع شبكة 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) وحوِّله إلى التنسيق السداسي العشري:
$ 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 الأصلي
يجب استخدام منفذ nRF USB على لوحة nRF52840 للتواصل مع مضيف RCP (جهاز Linux) وذلك لأنّ إصدار OpenThread FTD يتيح استخدام ACM الأصلي لـ USB CDC كنقل تسلسلي.
افصل طرف كابل USB عن منفذ تصحيح الأخطاء للوحة nRF52840 الوامضة، ثم أعِد تركيبها في منفذ USB المصغّر nRF USB بجانب الزر إعادة ضبط. اضبط مفتاح تبديل مصدر طاقة nRF على USB.
إثبات صحة الإصدار
يمكنك التحقّق من نجاح الإصدار من خلال الوصول إلى واجهة سطر الأوامر OpenThread باستخدام شاشة GNU من نافذة طرفية. تستخدم لوحات nRF52840 معدل باود يبلغ 115200.
$ screen /dev/ttyACM1 115200
في النافذة الجديدة، اضغط على Return في لوحة المفاتيح عدة مرات لإظهار طلب OpenThread CLI >
. اعرِض واجهة IPv6 وتحقَّق من العناوين:
> ifconfig up Done > ipaddr fe80:0:0:0:1cd6:87a9:cb9d:4b1d Done
استخدِم Ctrl+a ←
d
للفصل عن واجهة سطر الأوامر الخاص بمفوض FTD والعودة إلى الوحدة الطرفية لنظام التشغيل Linux كي تومض اللوحة التالية. لإعادة إدخال واجهة سطر الأوامر في أي وقت، استخدِم screen -r
من سطر الأوامر. للاطّلاع على قائمة بالشاشات المتاحة، يمكنك استخدام screen -ls
:
$ screen -ls There is a screen on: 74182.ttys000.mylinuxmachine (Detached) 1 Socket in /tmp/uscreens/S-username.
إعداد تطبيق FTD Joiner
كرِّر العملية أعلاه لتحديث لوحة nRF52840 الثالثة باستخدام إصدار ot-cli-ftd.hex
الحالي. عند الانتهاء، تأكّد من إعادة توصيل اللوحة بالكمبيوتر الشخصي باستخدام منفذ USB بمنفذ nRF وضبط مفتاح مصدر طاقة nRF على VDD.
إذا كانت العُقدتان الأخريان متصلَين بجهاز Linux عند توصيل هذه اللوحة الثالثة، يجب أن تظهر كمنفذ تسلسلي /dev/ttyACM2
:
$ ls /dev/ttyACM* /dev/ttyACM0 /dev/ttyACM1 /dev/ttyACM2
قم بتسمية اللوحة باسم "الانضمام".
عند التحقّق باستخدام Screen، بدلاً من إنشاء مثيل جديد للشاشة من سطر الأوامر، يُرجى إعادة إرفاق النسخة الحالية وإنشاء نافذة جديدة داخلها (والتي استخدمتها لمفوض FTD):
$ screen -r
أنشئ نافذة جديدة داخل "الشاشة" باستخدام Ctrl+a ← c
.
يظهر موجه سطر أوامر جديد. الوصول إلى واجهة سطر الأوامر OpenThread لأداة الانضمام إلى FTD:
$ screen /dev/ttyACM2 115200
في هذه النافذة الجديدة، اضغط على Return في لوحة المفاتيح عدة مرات لإظهار طلب OpenThread CLI >
. اعرِض واجهة IPv6 وتحقَّق من العناوين:
> ifconfig up Done > ipaddr fe80:0:0:0:6c1e:87a2:df05:c240 Done
بما أنّ واجهة سطر الأوامر الخاصة بـ FTD Joiner هي نفسها التي يعرضها المفوَّض FTD، يمكنك التبديل بينهما باستخدام Ctrl+a ← n
.
استخدِم Ctrl+a ←
d
للخروج من الشاشة في أي وقت
6- إعداد نافذة المحطة الطرفية
من الآن فصاعدًا، سيتم التبديل بين أجهزة Thread بشكل متكرر، لذا يُرجى الحرص على أن تكون جميع هذه الأجهزة نشطة ويمكن الوصول إليها بسهولة. حتى الآن، كنا نستخدم ميزة الشاشة للوصول إلى الجهازين لـ FTD، وتتيح هذه الأداة أيضًا تقسيم الشاشة على النافذة الطرفية نفسها. استخدِم هذا العمود لمعرفة كيفية تفاعل أحد العُقد مع الأوامر الصادرة على عقدة أخرى.
من الناحية المثالية، يجب أن يكون لديك أربع نوافذ متاحة بسهولة:
- خدمة / سجلّات
ot-daemon
- الانضمام إلى RCP عبر
ot-ctl
- مفوض FTD عبر OpenThread CLI
- FTD Joiner عبر OpenThread CLI
إذا أردت استخدام الأداة أو الإعداد الخاص بالمنفذ التسلسلي / الوحدة الطرفية، يمكنك التخطّي إلى الخطوة التالية. يمكنك ضبط النوافذ الطرفية لجميع الأجهزة بالطريقة التي تناسبك.
استخدام الشاشة
لسهولة الاستخدام، ما عليك سوى بدء جلسة واحدة على الشاشة. من المفترض أن يكون لديك حساب من وقت إعداد كِلا المجموعتَين حتى الآن.
تبدأ جميع الأوامر ضمن "الشاشة" بالضغط على Ctrl+a.
أوامر الشاشة الأساسية:
إعادة إرفاق الملف بجلسة الشاشة (من سطر الأوامر) |
|
مغادرة جلسة "الشاشة" | Ctrl+a ← |
إنشاء نافذة جديدة ضمن جلسة الشاشة | Ctrl+a ← |
التبديل بين النوافذ في جلسة الشاشة نفسها | Ctrl+a ← |
إنهاء النافذة الحالية في جلسة الشاشة | Ctrl+a ← |
تقسيم الشاشة
باستخدام الشاشة، يمكنك تقسيم الوحدة الطرفية إلى عدة نوافذ:
يتم الوصول إلى الأوامر في screen
باستخدام Ctrl+a. يجب أن يبدأ كل أمر بمزيج من مفاتيح الوصول هذه.
في حال كنت تتابع الدرس التطبيقي حول الترميز بالضبط، من المفترض أن تكون لديك نافذتان (FTD Commissioner وFTD Joiner) على نفس مثيل الشاشة. لتقسيم الشاشة بين الاثنين، أدخل أولاً جلسة الشاشة الحالية:
$ 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
من سطر الأوامر.
لمزيد من المعلومات حول الشاشة، يُرجى الاطّلاع على الدليل السريع لشاشة GNU.
7. إنشاء شبكة Thread
الآن بعد أن أعددت جميع النوافذ والشاشات الطرفية، لننشئ شبكة Thread. في مفوض FTD، أنشِئ مجموعة بيانات تشغيلية جديدة واضبطها كمجموعة بيانات نشطة. مجموعة البيانات التشغيلية هي تهيئة شبكة Thread التي تنشئها.
## FTD Commissioner ## ---------------------- > dataset init new Done > dataset Active Timestamp: 1 Channel: 11 Channel Mask: 07fff800 Ext PAN ID: c0de7ab5c0de7ab5 Mesh Local Prefix: fdc0:de7a:b5c0/64 Network Key: 1234c0de7ab51234c0de7ab51234c0de Network Name: OpenThread-c0de PAN ID: 0xc0de PSKc: ebb4f2f8a68026fc55bcf3d7be3e6fe4 Security Policy: 0, onrcb Done
دوِّن مفتاح الشبكة 1234c0de7ab51234c0de7ab51234c0de
الذي سيتم استخدامه لاحقًا.
تنفيذ مجموعة البيانات هذه كمجموعة البيانات النشطة:
> dataset commit active Done
اعرِض واجهة IPv6:
> ifconfig up Done
بدء عملية بروتوكول Thread:
> thread start Done
بعد لحظات، تحقَّق من حالة الجهاز. يجب أن يكون القائد. ويمكنك أيضًا الحصول على RLOC16 للرجوع إليه في المستقبل.
## FTD Commissioner ## ---------------------- > state leader Done > rloc16 0c00 Done
تحقَّق من عناوين IPv6 الخاصة بالجهاز:
## FTD Commissioner ## ---------------------- > ipaddr fdc0:de7a:b5c0:0:0:ff:fe00:fc00 # Leader Anycast Locator (ALOC) fdc0:de7a:b5c0:0:0:ff:fe00:c00 # Routing Locator (RLOC) fdc0:de7a:b5c0:0:6394:5a75:a1ad:e5a # Mesh-Local EID (ML-EID) fe80:0:0:0:1cd6:87a9:cb9d:4b1d # Link-Local Address (LLA)
يشير "الدرس التطبيقي حول الترميز" تصبح شبكتك مرئية الآن عند فحصها من أجهزة Thread الأخرى.
من ot-ctl
على الانضمام إلى RCP:
## 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 |
إذا لم يفهم "الدرس التطبيقي حول الترميز" لا تظهر الشبكات في القائمة، حاول البحث مرة أخرى.
8. إضافة أداة الانضمام إلى RCP
إعداد سلسلة المحادثات غير نشط على الشبكة، ما يعني أنّنا سنحتاج إلى إضافة أداة ربط RCP إلى شبكة Thread التي أنشأناها للتو باستخدام عملية تشغيل خارج الإطار.
في مفوض FTD، أدرجنا ملاحظة بشأن مفتاح الشبكة، على سبيل المثال 1234c0de7ab51234c0de7ab51234c0de
. إذا كنت بحاجة إلى البحث عن مفتاح الشبكة مرة أخرى، شغِّل الأمر التالي على مفوض FTD:
## FTD Commissioner ## > dataset networkkey 1234c0de7ab51234c0de7ab51234c0de Done
بعد ذلك، في الانضمام RCP Joiner، اضبط مفتاح الشبكة النشط لمجموعة البيانات الخاصة به على مفتاح شبكة FTD Commissioner Network:
## RCP Joiner ## ---------------- > dataset networkkey 1234c0de7ab51234c0de7ab51234c0de Done > dataset commit active Done
تحقق من مجموعة البيانات للتأكد من تعيينها بشكل صحيح.
## RCP Joiner ## ---------------- > dataset Network Key: 1234c0de7ab51234c0de7ab51234c0de
عرض سلسلة المحادثات لكي ينضم عنصر RCP Joiner إلى "درس تطبيقي حول الترميز" الشبكة. انتظِر بضع ثوانٍ، وتحقَّق من حالة 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 مكونة من عقدتين، كما هو موضح في هذا المخطط البياني:
المخططات الطبولوجية
أثناء عملك على بقية الدرس التطبيقي حول الترميز، سنعرض مخطّطًا بيانيًا جديدًا لمخطط بيانات Thread كلما تغيّرت حالة الشبكة. وتتم الإشارة إلى أدوار العُقد على النحو التالي:
أجهزة التوجيه دائمًا ما تكون خماسية الشكل، أما الأجهزة النهائية فهي دائمًا دوائر. تمثل الأرقام على كل عقدة معرّف جهاز التوجيه أو المعرّف الفرعي الموضح في إخراج CLI، بناءً على الدور الحالي لكل عقدة وحالتها في ذلك الوقت.
9. تكليف فريق FTD Joiner
لنُضِف الآن جهاز Thread الثالث إلى "الدرس التطبيقي حول الترميز". الشبكة. سنستخدم هذه المرة عملية الإعداد ضمن النطاق الأكثر أمانًا، ولن نسمح إلا بانضمام FTD Join.
في FTD Joiner، احصل على 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 للانضمام إلى FTD Joiner في "درس تطبيقي حول الترميز" ونتحقق على الفور من الحالة و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 والتحقّق من جهاز التوجيه والجداول الفرعية للتأكّد من توفُّر ثلاثة أجهزة في "الدرس التطبيقي حول الترميز". الشبكة:
## 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 في هذا الدرس التطبيقي حول الترميز هي نوع معيّن من أجهزة Threads الكاملة (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 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، من المفترض أن يظهر الآن الشخص المنضم إلى 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. هذا يعني أنّه في حال إزالة القائد الحالي من شبكة Thread، سيصبح أحد أجهزة التوجيه الأخرى القائد الجديد.
في مفوض FTD، أوقِف سلسلة Thread لإزالتها من شبكة Thread:
## FTD Commissioner ## ---------------------- > thread stop Done > ifconfig down Done
في غضون دقيقتين، يصبح FTD Joiner هو القائد الجديد لسلسلة المحادثات. تحقَّق من الحالة وعناوين 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 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 بأداة الانضمام إلى FTD كطفل صغير. تحقَّق من الحالة ومؤشر RLOC16 للتأكّد مما يلي:
## RCP Joiner ## -------------- > state child > rloc16 b801
إعادة إرفاق مفوض اللجنة الفيدرالية للمنافسة وحماية المستهلك
لن يكون وجود شبكة Thread ذات عقدتين ممتعًا. لنعيد عرض عضو لجنة FTD على الإنترنت.
على مفوض FTD، أعِد تشغيل سلسلة المحادثات:
## FTD Commissioner ## ---------------------- > ifconfig up Done > thread start Done
وفي غضون دقيقتين، تتم إعادة إرفاقه تلقائيًا بـ "الدرس التطبيقي حول الترميز". شبكة كجهاز نهائي، ثم الترويج لنفسها على جهاز توجيه.
## 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 مع عدة أجهزة على نوافذ طرفية أو نوافذ مختلفة على شاشة أمرًا معقدًا. استخدم هذه النصائح "لإعادة الضبط" حالة الشبكة أو مساحة العمل في حال مواجهة مشاكل.
الشاشة
وإذا فقدت في أي وقت الإعدادات (عدد كبير جدًا من نوافذ الشاشة أو الشاشات داخل الشاشة)، استمر في إنهاء نوافذ الشاشة باستخدام Ctrl+a ← k حتى لا يوجد أي شيء وscreen -ls
في سطر الأوامر يؤدي إلى إخراج No Sockets found
. ثم إعادة إنشاء نوافذ الشاشة لكل جهاز. يتم الاحتفاظ بحالات الجهاز حتى إذا كانت الشاشة مغلقة.
عُقد سلاسل المحادثات
إذا لم تكن هيكلية شبكة Thread كما هو موضَّح في هذا الدرس التطبيقي، أو إذا انقطع اتصال العُقد لسبب ما (ربما يرجع ذلك إلى أنّ جهاز Linux الذي يشغِّلها قد انتقل إلى وضع السكون)، من الأفضل إيقاف سلسلة المحادثات ومحو بيانات اعتماد الشبكة والبدء من جديد من خطوة إنشاء شبكة Thread.
لإعادة ضبط FTD:
## FTD Commissioner or FTD Joiner ## ------------------------------------ > thread stop Done > ifconfig down Done > factoryreset Done
يمكن إعادة ضبط RCP بالطريقة نفسها من خلال ot-ctl
:
## RCP Joiner ## ---------------- > thread stop Done > ifconfig down Done > factoryreset Done
12. استخدام البث المتعدد
يُستخدم البث المتعدد لتوصيل المعلومات إلى مجموعة من الأجهزة في آنٍ واحد. في شبكة Thread، يتم حجز عناوين محددة للاستخدام مع مجموعات مختلفة من الأجهزة، بناءً على النطاق.
عنوان IPv6 | المستوى | تم التسليم إلى |
| رابط محلي | جميع FTD وMED |
| رابط محلي | جميع أجهزة توجيه الحدود (FTD) وأجهزة توجيه الحدود |
| شبكة محلية | جميع FTD وMED |
| شبكة محلية | جميع أجهزة توجيه الحدود (FTD) وأجهزة توجيه الحدود |
بما أنّنا لا نستخدم جهاز توجيه الحدود في هذا الدرس التطبيقي حول الترميز، سنركّز على عنوانَي البث المتعدد FTD وMED.
رابط محلي
يتألف نطاق الرابط المحلي من جميع واجهات 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 وRCP Joiner)، لكن مفوض اللجنة الفيدرالية للمنافسة وحماية المستهلك تلقّى ردًا واحدًا فقط من عنوان URL المحلي لـ FTD Joiner (LLA). وهذا يعني أنّ جهاز FTD Joiner هو الجهاز الوحيد الذي يمكن لمفوض FTD الوصول إليه من خلال قفزة واحدة.
جارٍ اختبار الاتصال بـ ff02::1
من الانضمام إلى FTD:
## FTD Joiner ## ---------------- > ping ff02::1 > 8 bytes from fe80:0:0:0:1cd6:87a9:cb9d:4b1d: icmp_seq=1 hlim=64 time=11ms 8 bytes from fe80:0:0:0:18e5:29b3:a638:943b: icmp_seq=1 hlim=64 time=24ms
إجابتان! عند التحقّق من عناوين الإصدار 6 من بروتوكول الإنترنت على الأجهزة الأخرى، يمكننا أن نرى العنوان الأول (الذي ينتهي بالأرقام 4b1d
) هو "النموذج اللغوي الكبير" (LLA) الخاص بمفوض FTD، والعنوان الثاني (الذي ينتهي بـ 943b
) هو "النموذج اللغوي الكبير" (LLA) الخاص بـ RCP Joiner.
وهذا يعني أن الانضمام إلى FTD مرتبط مباشرة بكل من مفوض FTD وRCP Joiner، وهو ما يؤكد المخطط الهيكلي لدينا.
شبكة محلية
يشمل النطاق المحلي المتداخل جميع واجهات 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 Joiner (RLOC، ينتهي بالأرقام b800
) والآخر من معرّف EID المحلي المتداخلة (ML-EID) لـ RCP Joiner (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 Joiner (23 ملي ثانية). وذلك لأنّه يجب إجراء قفزتَين للوصول إلى مفوّض FTD، مقارنةً بقفزة واحدة مع فريق FTD Joiner.
ربما لاحظت أيضًا أن إشعار البث المتعدد المحلي عبر الشبكة المتداخلة استجاب بـ RLOC فقط لجهازي FTD - وليس لـ RCP Joiner. وذلك لأنّ أجهزة FTD هي أجهزة توجيه ضمن الشبكة، في حين أنّ RCP هو جهاز نهائي.
تحقَّق من حالة الانضمام إلى RCP للتأكّد مما يلي:
## RCP Joiner ## ---------------- > state child
13. إرسال الرسائل باستخدام بروتوكول UDP
إحدى خدمات التطبيقات التي يوفرها OpenThread هي بروتوكول مخطط بيانات المستخدم (UDP)، وهو بروتوكول من بروتوكولات طبقة النقل. يمكن لأي تطبيق تم إنشاؤه على OpenThread استخدام واجهة برمجة تطبيقات UDP لتمرير الرسائل بين العُقد في شبكة Thread أو إلى أجهزة أخرى في شبكة خارجية (مثل الإنترنت، إذا كانت شبكة Thread تستخدم جهاز توجيه الحدود).
يتم الكشف عن مقابس UDP من خلال OpenThread CLI. لنستخدم هذا الحلّ لتمرير الرسائل بين الفريقَين.
احصل على عنوان Mesh-Local 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، وابدأ تشغيل 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 حالاتها داخل الشبكة؟
- كيفية تمرير الرسائل البسيطة بين العُقد باستخدام بروتوكول UDP
الخطوات التالية
استنادًا إلى هذا الدرس التطبيقي حول الترميز، جرِّب التمارين التالية:
- أعِد تحميل نسخة FTD Joiner كوحدة MTD باستخدام برنامج "
ot-cli-mtd
" الثنائي، ولاحظ أنّها لا ترقى نفسها مطلقًا إلى جهاز توجيه أو تحاول أن تصبح القائد - أضف المزيد من الأجهزة (جرِّب نظامًا أساسيًا مختلفًا!) إلى الشبكة ورسم المخطط باستخدام أجهزة التوجيه والجداول الفرعية، إلى جانب إرسال إشعارات إلى عناوين البث المتعدد
- استخدام pyspinel للتحكّم في NCP
- يمكنك تحويل NCP إلى جهاز توجيه الحدود باستخدام OpenThread Border Router وتوصيل شبكة Thread بالإنترنت.
محتوى إضافي للقراءة
راجع openthread.io وGitHub للحصول على مجموعة متنوعة من موارد OpenThread، بما في ذلك:
- الأنظمة الأساسية المتوافقة: اكتشاف جميع الأنظمة الأساسية التي تتيح استخدام OpenThread
- إنشاء OpenThread: مزيد من التفاصيل حول إنشاء أداة OpenThread وضبطها
- سلسلة المحادثات التمهيدية: تتناول جميع مفاهيم سلاسل المحادثات الواردة في هذا الدرس التطبيقي حول الترميز.
مرجع: