1. المقدمة
تُعدّ OpenThread التي أطلقتها Google طريقة تنفيذ مفتوحة المصدر لبروتوكول شبكة Thread® . أصدرت Google Nest سلسلة محادثات مفتوحة من أجل إتاحة التكنولوجيا المستخدمة في منتجات Nest على نطاق واسع للمطورين لتسريع تطوير المنتجات إلى المنزل المتصل.
تحدّد مواصفات سلاسل المحادثات بروتوكول الاتصال اللاسلكي الموثوق به والآمن والمنخفضة الطاقة المستند إلى بروتوكول IPv6 للتطبيقات المنزلية. ينفِّذ OpenThread جميع طبقات شبكات Thread، بما في ذلك IPv6 و6LoWPAN وIEEE 802.15.4 مع أمان MAC ومؤسسة Mesh Link وRouting Mesh.
في هذا الدرس التطبيقي حول الترميز، ستبرمج OpenThread على أجهزة حقيقية وتنشئ شبكة Thread وتديرها وتنقل الرسائل بين العُقد.
ما ستتعرَّف عليه
- إنشاء واجهات ثنائية CLI الثنائية والفلاشة في لوحات مطوِّري البرامج
- إنشاء RCP يضم جهاز Linux ولوحة مطوّري برامج
- التواصل مع متوسّط عائد النقرة باستخدام برنامج خفي في OpenThread و
ot-ctl
- إدارة عُقد Thread يدويًا باستخدام شاشة GNU ومواجهة واجهة سطر الأوامر في OpenThread
- التشغيل الآمن للأجهزة على شبكة Thread
- آلية عمل البث المتعدد IPv6
- تمرير الرسائل بين عُقد سلاسل المحادثات باستخدام بروتوكول UDP
المتطلبات
الأجهزة:
- 3 لوحات شبه سلكية من النرويجية nRF52840
- 3 كابلات USB إلى Micro-USB لتوصيل اللوحات
- جهاز يعمل بنظام التشغيل Linux ويتضمّن 3 منافذ USB على الأقل
برامج:
- سلسلة أدوات GNU
- أدوات سطر أوامر Nordic nRF5x
- برنامج Segger J-Link
- OpenThread
- Git
2- البدء
محاكاة OpenThread
قبل البدء، ننصحك بالاطّلاع على الدرس التطبيقي حول الترميز في OpenThread، وذلك للتعرّف على مفاهيم "سلسلة المحادثات" الأساسية وواجهة سطر الأوامر في OpenThread.
منافذ طرفية للمنافذ
يجب أن تكون على دراية بكيفية الاتصال بمنفذ تسلسلي من خلال محطة دفع. يستخدم هذا الدرس التطبيقي حول الترميز شاشة GNU ويوفّر نظرة عامة على الاستخدام، ولكن يمكن استخدام أي برنامج طرفي آخر.
جهاز يعمل بنظام التشغيل Linux
تم تصميم هذا الدرس التطبيقي حول الترميز لاستخدام جهاز يعمل بنظام التشغيل Linux i386 أو x86 ليكون بمثابة مضيف لجهاز يعمل بتقنية Radio Co-Processor (RCP)، ولتثبيت جميع لوحات تطوير سلاسل المحادثات. تم اختبار جميع الخطوات على Ubuntu 14.04.5 LTS (Trusty Tahr).
لوحات نوردسية شبه دائرية nRF52840
يستخدم الدرس التطبيقي حول الترميز ثلاثة nRF52840 لوحات PDK.
تثبيت SEGGER J-Link
نحن نستخدم SEGGER J-Link لبرمجة لوحات nRF52840، التي تحتوي على وحدات JTAG مدمجة. ثبِّت هذه الإضافة على جهاز Linux.
نزِّل الحزمة المناسبة لجهازك، ثم ثبِّتها في المكان المناسب. /opt/SEGGER/JLink
على نظام التشغيل Linux
تثبيت أدوات سطر الأوامر nRF5x
تتيح لك أدوات سطر الأوامر nRF5x فلاش برامج ثنائية OpenThread على ألواح nRF52840. ثبِّت الإصدار nRF5x-Command-Line-Tools-<OS> المناسب على جهازك الذي يعمل بنظام التشغيل Linux.
ضع الحزمة التي تم استخراجها في المجلد الجذر ~/
تثبيت سلسلة أدوات ARM GNU
يتم استخدام سلسلة أدوات 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:
$ script/cmake-build posix -DOT_DAEMON=ON
أصبحت الآن جاهزًا لإنشاء وفتح OpenThread للوحات nRF52840.
4. إعداد رابط RCP
الإنشاء والفلاش
ويمكنك إنشاء مثال على OpenThread nRF52840 من خلال وظيفة USB والواجهة الأصلية. يستخدم الجهاز دور "المُصدِّق" ليتم المصادقة عليه وتفويضه بأمان على شبكة Thread. يمكّن USB الأصلي استخدام USB ADC 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، وامض ملف HTML الخاص بـ OpenThread RCP على لوحة nRF52840، باستخدام الرقم التسلسلي لللوحة و#39;. وتجدر الإشارة إلى أنّه في حال عدم إدراج العلامة --verify
، ستظهر لك رسالة تحذير تفيد بأنّه يمكن تعذُّر إتمام عملية الفلاش بدون خطأ.
$ cd ~/nrfjprog/ $ ./nrfjprog -f nrf52 -s 683704924 --verify --chiperase --program \ ~/src/ot-nrf528xx/build/bin/ot-rcp.hex --reset
يتم إنشاء الناتج التالي عند نجاح العملية:
Parsing hex file. Erasing user available code and UICR flash areas. Applying system reset. Checking that the area to write is not protected. Programing device. Applying system reset. Run.
صنِّف اللوحة "RCP"؛ بحيث لا تخلط لاحقًا بين أدوار مجلس الإدارة.
الربط بجهاز USB أصلي
ونظرًا لأن إصدار OpenThread RCP يمكّن استخدام USB CDC ACM كنقل تسلسلي، يجب استخدام منفذ nRF USB على لوحة nRF52840 للاتصال بمضيف RCP (جهاز Linux).
افصِل طرف USB صغير عن كابل USB عن منفذ تصحيح الأخطاء للوحة nRF52840 الوامضة، ثم أعِد توصيله بمنفذ USB nRF USB المصغَّر بجانب الزر إعادة ضبط. اضبط مفتاح تبديل مصدر طاقة nRF على USB.
بدء البرنامج الخفي لـ OpenThread
في تصميم RCP، استخدم البرنامج الخفي لـ OpenThread للتواصل مع جهاز Thread وإدارته. ابدأ ot-daemon
بعلامة -v
التفصيلية حتى تتمكّن من الاطّلاع على مخرجات السجلّ والتأكّد من أنه يعمل:
$ cd ~/src/openthread $ sudo ./build/posix/src/posix/ot-daemon -v \ 'spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=115200'
عند النجاح في ذلك، يؤدي ot-daemon
في وضع التشغيل المطوَّل إلى إنشاء نتائج مشابهة لما يلي:
ot-daemon[12463]: Running OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; POSIX; Aug 30 2022 10:55:05 ot-daemon[12463]: Thread version: 4 ot-daemon[12463]: Thread interface: wpan0 ot-daemon[12463]: RCP version: OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; SIMULATION; Aug 30 2022 10:54:10
اترك نافذة المحطة الطرفية مفتوحة حتى يمكن عرض السجلات من ot-daemon
.
يمكنك استخدام ot-ctl
للتواصل مع عقدة RCP. يستخدم ot-ctl
واجهة سطر الأوامر نفسها الموجودة في تطبيق OpenThread CLI. ولذلك، يمكنك التحكّم في عُقَد ot-daemon
بالطريقة نفسها التي تتحكّم بها أجهزة سلاسل المحادثات الأخرى.
في نافذة طرفية ثانية، ابدأ ot-ctl
:
$ sudo ./build/posix/src/posix/ot-ctl >
تحقَّق من state
للعقدة 2 (عقدة RCP) التي بدأتها باستخدام ot-daemon
:
> state disabled Done
5. إعداد FTD
عُقدتا Thread الأخرى اللتان تم استخدامهما في هذا الدرس التطبيقي حول الترميز هما لغز سلسلة محادثات كاملة (FTD) ذات تصميم عادي للنظام على رقاقة (SoC). في إعداد الإنتاج، يمكن استخدام wpantund
، وهو برنامج تشغيل لواجهة الشبكة على مستوى الإنتاج، للتحكّم في مثيلات OpenThread NCP، ولكننا في هذا الدرس التطبيقي حول الترميز، سنستخدم ot-ctl
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 بالكامل (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، باستخدام الرقم التسلسلي لللوحة و#39:
$ cd ~/nrfjprog/ $ ./nrfjprog -f nrf52 -s 683704924 --verify --chiperase --program \ ~/src/ot-nrf528xx/build/bin/ot-cli-ftd.hex --reset
تصنيف اللوحة ومفوضية
الربط بجهاز USB أصلي
بما أنّ إصدار OpenThread FTD يتيح استخدام منفذ USB CDC ACM الأصلي كنقل تسلسلي، يجب استخدام منفذ nRF USB على لوحة nRF52840 للاتصال بمضيف RCP (جهاز Linux).
افصِل طرف USB صغير عن كابل USB عن منفذ تصحيح الأخطاء للوحة nRF52840 الوامضة، ثم أعِد توصيله بمنفذ USB nRF USB المصغَّر بجانب الزر إعادة ضبط. اضبط مفتاح تبديل مصدر طاقة nRF على USB.
التحقق من الإصدار
تحقَّق من نجاح الإصدار من خلال الوصول إلى واجهة سطر تعديلات OpenThread باستخدام شاشة GNU من نافذة الوحدة الطرفية. تستخدم لوحات nRF52840 معدّل الباود 115200.
$ screen /dev/ttyACM1 115200
في النافذة الجديدة، اضغَط على مفتاح Return على لوحة المفاتيح عدة مرات لعرض رسالة المطالبة بواجهة برمجة تطبيقات OpenThread >
. اعرض واجهة IPv6 وتحقّق من العناوين:
> ifconfig up Done > ipaddr fe80:0:0:0:1cd6:87a9:cb9d:4b1d Done
استخدام Ctrl+a ←
d
انفصال عن شاشة سطر الأوامر (FLI) المفوضة من FTD وارجع إلى الوحدة الطرفية لنظام التشغيل Linux بحيث يمكن توصيل اللوحة التالية. لإعادة إدخال سطر الأوامر (CLI) في أي وقت، استخدِم screen -r
من سطر الأوامر. لعرض قائمة بالشاشات المتاحة، استخدِم screen -ls
:
$ screen -ls There is a screen on: 74182.ttys000.mylinuxmachine (Detached) 1 Socket in /tmp/uscreens/S-username.
إعداد رابط FTD
كرِّر العملية السابقة لوميض اللوحة nRF52840 الثالثة، باستخدام إصدار ot-cli-ftd.hex
الحالي. عند الانتهاء، احرص على إعادة توصيل اللوحة بالكمبيوتر باستخدام منفذ USB nRF وضبط مفتاح تبديل مصدر الطاقة nRF على VDD.
في حال توصيل العُقد الأخرى بالجهاز الذي يعمل بنظام التشغيل Linux عند إرفاق هذه اللوحة الثالثة، من المفترض أن تظهر كمنفذ تسلسلي /dev/ttyACM2
:
$ ls /dev/ttyACM* /dev/ttyACM0 /dev/ttyACM1 /dev/ttyACM2
تصنيف اللوحة &الالانضمام؛&النقابة
عند إثبات الملكية باستخدام الشاشة، بدلاً من إنشاء نسخة جديدة من الشاشة من سطر الأوامر، أعِد إرفاقها بالشاشة الحالية وأنشئ نافذة جديدة بداخلها (استخدمتها لمفوض FTD):
$ screen -r
يمكنك إنشاء نافذة جديدة ضمن الشاشة باستخدام Ctrl+a ← c
.
ستظهر رسالة مطالبة سطر أوامر جديدة. الوصول إلى واجهة سطر تعديلات OpenThread لانضمام FTD:
$ screen /dev/ttyACM2 115200
في هذه النافذة الجديدة، اضغط على "رجوع" في لوحة المفاتيح عدة مرات لعرض رسالة المطالبة "واجهة برمجة تطبيقات OpenThread" >
. اعرض واجهة IPv6 وتحقّق من العناوين:
> ifconfig up Done > ipaddr fe80:0:0:0:6c1e:87a2:df05:c240 Done
الآن وبعد أن أصبحت واجهة سطر الأوامر في واجهة FTD عبارة عن مثيل الشاشة ومفوَّض FTD، يمكنك التبديل بينها باستخدام Ctrl+a ← n
.
استخدام Ctrl+a ←
d
في أي وقت للخروج من الشاشة.
6. إعداد نافذة محطة الدفع
من الآن فصاعدًا، سيتم التبديل بين أجهزة Thread بشكل متكرر، لذا تأكد من أن جميع الأجهزة مباشرة ويمكن الوصول إليها بسهولة. إننا نستخدم حتى الآن ميزة "الشاشة" للوصول إلى آلتَي نقل البيانات (FTD)، كما تسمح هذه الأداة أيضًا بتقسيم الشاشة من خلال نافذة طرفية واحدة. استخدِم هذا الزر لمعرفة كيفية تفاعل هذه العُقدة مع الأوامر الصادرة على عقدة أخرى.
من المفترض أن تكون لديك أربع نوافذ متاحة بسهولة:
- خدمة
ot-daemon
/ السجلات - الانضمام إلى برنامج RPC من خلال
ot-ctl
- المُفوّض من أجل FTD من خلال واجهة سطر الأوامر في OpenThread
- الانضمام إلى FTD عبر OpenThread CLI
إذا أردت استخدام إعدادات أو أداة منفذ تسلسلي أو منفذ تسلسلي خاص بك، لا تتردد في التخطي إلى الخطوة التالية. يمكنك ضبط نوافذ المحطة الطرفية لجميع الأجهزة بالطريقة التي تناسبك.
استخدام الشاشة
لتسهيل الاستخدام، ابدأ جلسة شاشة واحدة فقط. يجب أن يكون لديك واحد بالفعل من عند إعداد كل من FTD.
تبدأ جميع الأوامر ضمن الشاشة بـ Ctrl+a.
أوامر الشاشة الأساسية:
إعادة إرفاقها بجلسة الشاشة (من سطر الأوامر) |
|
مغادرة جلسة الشاشة | Ctrl+a ← |
إنشاء نافذة جديدة ضمن جلسة الشاشة | Ctrl+a ← |
التبديل بين النوافذ في جلسة الشاشة نفسها | Ctrl+a ← |
حذف النافذة الحالية في جلسة الشاشة | Ctrl+a ← |
تقسيم الشاشة
باستخدام الشاشة، يمكنك تقسيم الوحدة الطرفية إلى نوافذ متعددة:
يتم الوصول إلى الأوامر في screen
باستخدام Ctrl+a. يجب أن يبدأ كل أمر بمجموعة مفتاح الوصول هذه.
في حال اتّباع الدرس التطبيقي حول الترميز بشكل دقيق، يجب أن تكون لديك نافذتان (مُفوّض من جهة خارجية (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 Connector 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)
تظهر الشبكة "codelab"كما تظهر الآن عند فحصها من أجهزة Thread الأخرى.
من ot-ctl
على رابط RRCP:
## RCP Joiner ## ---------------- > scan | PAN | MAC Address | Ch | dBm | LQI | +------+------------------+----+-----+-----+ | c0de | 1ed687a9cb9d4b1d | 11 | -36 | 232 |
من واجهة سطر الأوامر في OpenThread على أداة ربط FTD:
## FTD Joiner ## ---------------- > scan | PAN | MAC Address | Ch | dBm | LQI | +------+------------------+----+-----+-----+ | c0de | 1ed687a9cb9d4b1d | 11 | -38 | 229 |
إذا لم تظهر الشبكة &"codelab"quot;;;39;" في القائمة، جرّب البحث مرة أخرى.
8. إضافة رابط RCP
تفويض Thread غير نشط على الشبكة، مما يعني أننا سنحتاج إلى إضافة انضمام RCP إلى شبكة Thread التي تم إنشاؤها للتو باستخدام عملية تفويض خارج النطاق.
في المُفوَّض من "هيئة حماية البيانات"، دوّنا مفتاح الشبكة، على سبيل المثال، 1234c0de7ab51234c0de7ab51234c0de
. إذا كنت بحاجة إلى البحث عن مفتاح الشبكة مرة أخرى، شغِّل الأمر التالي على FTD Commissioner:
## FTD Commissioner ## > dataset networkkey 1234c0de7ab51234c0de7ab51234c0de Done
بعد ذلك، في رابط RCP، اضبط مفتاح شبكة مجموعة البيانات النشط على مفتاح المفوضية FTD Commissioner:
## RCP Joiner ## ---------------- > dataset networkkey 1234c0de7ab51234c0de7ab51234c0de Done > dataset commit active Done
تحقق من مجموعة البيانات لضمان ضبطها بشكل صحيح.
## RCP Joiner ## ---------------- > dataset Network Key: 1234c0de7ab51234c0de7ab51234c0de
يمكنك عرض سلسلة المحادثات حتى ينضم انضمام RCP إلى الشبكة "codelabcode". انتظِر بضع ثوانٍ، تحقَّق من حالة 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، (العنوان الشبكة المتداخلة المحلية الذي تم الحصول عليه من مخرجات RCP الخاص بـ ipaddr
)، للتحقق من إمكانية الاتصال:
## 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 تتألف من عُقدَين، وموضّحًا في هذا المخطط الطوبوجي:
رسومات تخطيطية للطوبولوجي
أثناء بقية خطوات الدرس التطبيقي حول الترميز، سنوضّح رسمًا بيانيًا جديدًا لخط طوبولوجيا "سلسلة المحادثات" كلما تغيّرت حالة الشبكة. وتتم الإشارة إلى أدوار العُقد على النحو التالي:
تكون أجهزة التوجيه خماسية دائمًا، وأجهزة النهاية هي دوائر دائمًا. تمثّل الأرقام في كل عُقدة رقم تعريف جهاز التوجيه أو رقم تعريف الطفل المعروض في مخرجات سطر الأوامر، بناءً على الدور الحالي لكل عُقدة وحالتها في ذلك الوقت.
9. عمولة جمعية FTD
لنبدأ الآن إضافة جهاز Thread الثالث إلى الشبكة &"codelab". في هذه المرة، سنستخدِم عملية العمولة الأكثر أمانًا ضمن النطاق، وسنسمح لمنضمي FTD بالانضمام فقط.
في رابط FTD، يمكنك الحصول على eui64
حتى يتمكّن المفوّض في FTD من التعرّف عليه:
## FTD Joiner ## ---------------- > eui64 2f57d222545271f1 Done
في المُفوّض من أجل FTD، ابدأ المفوّض وحدِّد eui64
للجهاز الذي يمكنه الانضمام، بالإضافة إلى بيانات اعتماد المشترك، على سبيل المثال J01NME
. بيانات اعتماد المشترك هي سلسلة خاصة بالجهاز تضم الأحرف الأبجدية الرقمية الكبيرة (0-9 وA-Y، باستثناء I وO وQ وZ لتسهيل القراءة). ويتراوح طولها بين 6 و32 حرفًا.
## FTD Commissioner ## ---------------------- > commissioner start Done > commissioner joiner add 2f57d222545271f1 J01NME Done
التبديل إلى الانضمام إلى FTD. ابدأ دور المشترك باستخدام بيانات اعتماد المستخدم التي أعددتها للتو على تفويض FTD:
## FTD Joiner ## ---------------- > ifconfig up Done > joiner start J01NME Done
خلال دقيقة تقريبًا، تتلقى تأكيدًا للمصادقة الناجحة:
## FTD Joiner ## ---------------- > Join success
يمكنك عرض سلسلة المحادثات حتى ينضم انضمام FTD إلى الشبكة "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 والتحقّق من أجهزة التوجيه والجداول الفرعية للتأكّد من توفّر ثلاثة أجهزة في الشبكة "codelabcode&":
## 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 في هذا الدرس التطبيقي حول الترميز هي نوع معيّن من الأجهزة ذات سلاسل المحادثات الكاملة (FTD) والذي يُطلق عليه اسم جهاز نهائي مؤهّل لجهاز التوجيه (REED). وهذا يعني أنّها يمكن أن تعمل كجهاز توجيه أو جهاز نهائي، ويمكنها الترويج لنفسها من جهاز نهائي إلى جهاز توجيه.
يمكن أن تدعم سلسلة المحادثات ما يصل إلى 32 جهاز توجيه، ولكنها تحاول إبقاء عدد أجهزة التوجيه بين 16 و23. في حال إرفاق جهاز REED كجهاز نهائي (طفل) وعدد أجهزة التوجيه على أقل من 16 جهازًا، يتم تحديد نفسه تلقائيًا إلى جهاز توجيه بعد فترة زمنية عشوائية خلال دقيقتين.
إذا كان لديك طفلان في شبكة Thread بعد إضافة رابط 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:
## FTD Joiner ## ---------------- > state router Done > rloc16 b800 Done
انضمام FTD
ويمكنك اختبار هذا السلوك عن طريق الرجوع إلى إصدار سابق من أداة ربط FTD من جهاز التوجيه إلى جهاز نهائي. غيِّر الحالة إلى طفل وتحقق من RLOC16:
## FTD Joiner ## ---------------- > state child Done > rloc16 0c03 Done
ارجع إلى FTD Commissioner، من المفترض أن يظهر رابط 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 Commissioner، أوقِف سلسلة المحادثات لإزالتها من شبكة Thread:
## FTD Commissioner ## ---------------------- > thread stop Done > ifconfig down Done
في غضون دقيقتين، يصبح الانضمام إلى FTD قائد سلسلة المحادثات الجديد. تحقَّق من عنوانَي الحالة وIPv6 الخاصة بانضمام FTD للتحقّق من:
## FTD Joiner ## ---------------- > state leader Done > ipaddr fdc0:de7a:b5c0:0:0:ff:fe00:fc00 # Now it has the Leader ALOC! fdc0:de7a:b5c0:0:0:ff:fe00:b800 fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd fe80:0:0:0:e4cd:d2d9:3249:a243 Done
تحقق من الجدول الفرعي. يُرجى ملاحظة أن هناك 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 Commissioner، أعِد تشغيل سلسلة المحادثات:
## FTD Commissioner ## ---------------------- > ifconfig up Done > thread start Done
وبعد دقيقتين، تتم إعادة الاتصال تلقائيًا بالشبكة و "code;codelab"كجهاز نهائي، ثم ترقية نفسه إلى جهاز توجيه.
## FTD Commissioner ## ---------------------- > state router Done
تحقَّق من جداول أجهزة التوجيه والجداول الفرعية على رابط FTD للتحقّق من:
## 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 ومحو بيانات اعتماد الشبكة والبدء من جديد من خطوة إنشاء شبكة 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 MED |
| الرابط المحلي | جميع FTDS وأجهزة توجيه الحدود |
| الشبكة المتداخلة المحلية | جميع FTDS MED |
| الشبكة المتداخلة المحلية | جميع FTDS وأجهزة توجيه الحدود |
بما أنّنا لا نستخدم جهاز توجيه الحدود في هذا الدرس التطبيقي حول الترميز، سنركّز على عنوانَي البث المتعدد (FTD) وقسم الوسائط المتعددة (MED).
الرابط المحلي
يتألّف نطاق Link-Local من جميع واجهات Thread التي يمكن الوصول إليها من خلال بث لاسلكي واحد أو "&hop;" تحدّد منهجية الشبكة الأجهزة التي تستجيب لاختبار فحص الاتصال على عنوان البث المتعدد في 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 Signer وجهة التسجيل في RCP)، ولكن لم يُصدَر المفوّض في FTD ردًا واحدًا إلا من العنوان - FTDjoiner's Link-Local Address (LLA). هذا يعني أنّ الانضمام إلى FTD هو الجهاز الوحيد الذي يمكن أن يصل إليه المفوّض في 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
ثمة ردّان. بالنسبة إلى التحقق من عناوين IPv6 للأجهزة الأخرى، يمكننا ملاحظة أن العنوان الأول (الذي ينتهي باللاحقة 4b1d
) هو مفوّض FTD و#39;s LLA، أما العنوان الثاني (الذي ينتهي باللاحقة 943b
) فهو ضمّ جهة الاتّصال RCP's LLA.
وهذا يعني أنّ رابط FTD مرتبط مباشرةً بكلٍّ من مفوّض FTD وشريك RCP، ما يؤكّد منهجيتنا.
الشبكة المتداخلة المحلية
يتألف النطاق "الشبكة المتداخلة" من جميع واجهات 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
) والثالثة من EID، Connectid # (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 هو جهاز نهائي.
تحقَّق من حالة الانضمام إلى برنامج RPC للتأكّد من ذلك:
## RCP Joiner ## ---------------- > state child
13- إرسال الرسائل باستخدام بروتوكول UDP
تتمثل إحدى خدمات التطبيق التي يقدمها OpenThread في بروتوكول بروتوكول مخطط البيانات للمستخدم (UDP)، وهو بروتوكول طبقة النقل. يمكن لأحد التطبيقات المنشأة على OpenThread استخدام واجهة برمجة تطبيقات UDP لتمرير الرسائل بين العُقد في شبكة Thread أو إلى أجهزة أخرى في شبكة خارجية (مثل الإنترنت، إذا كانت شبكة Thread تتضمّن جهاز توجيه حدود).
يتم الكشف عن مقابس UDP من خلال واجهة سطر تعديلات OpenThread. لنستخدمه لتمرير الرسائل بين آلتي تحويل البيانات (FTD).
احصل على عنوان معرّف المعدات الجوّالة (ESH) في المنطقة المحلية لجهة الجهة التي ستدرج واجهة برمجة التطبيقات (FTD). نستخدم هذا العنوان لأنه يمكن الوصول إليه من أي مكان داخل شبكة Thread.
## FTD Joiner ## ---------------- > ipaddr fdc0:de7a:b5c0:0:0:ff:fe00:fc00 # Leader Anycast Locator (ALOC) fdc0:de7a:b5c0:0:0:ff:fe00:b800 # Routing Locator (RLOC) fe80:0:0:0:e4cd:d2d9:3249:a243 # Link-Local Address (LLA) fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd # Mesh-Local EID (ML-EID) Done
ابدأ بروتوكول UDP واربطه بمقبس لأي عنوان IPv6:
## FTD Joiner ## ---------------- > udp open Done > udp bind :: 1212
بدِّل إلى FTD Commissioner وابدأ تشغيل UDP ووصِّل المقبس الذي أعددته في FTDjoiner باستخدام 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، تم استلام رسالة UDP.
## FTD Joiner ## ---------------- > 10 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:c00 49153 hellothere
14- تهانينا
لقد أنشأت شبكة Thread فعلية.
أنت تعرف الآن:
- الفرق بين أنواع أجهزة Thread وأدوارها ونطاقاتها
- كيف تدير أجهزة Thread حالاتها داخل الشبكة
- كيفية تمرير الرسائل البسيطة بين العُقد باستخدام UDP
الخطوات اللاحقة
بناءً على هذا الدرس التطبيقي حول الترميز، جرِّب التمارين التالية:
- أعِد تحميل لوحة FTD Signer كعضو في MTD باستخدام برنامج ثنائي
ot-cli-mtd
، ولاحظ أنه لا تتم ترقية نفسه إلى جهاز توجيه أو يحاول أن يصبح قائدًا. - أضِف المزيد من الأجهزة (جرِّب نظامًا أساسيًا مختلفًا) إلى الشبكة وطبّق المخطط باستخدام استخدام جهاز التوجيه والجداول الفرعية، بالإضافة إلى إشعارات إلى عناوين البث المتعدد.
- استخدام pyspinel للتحكّم في NCP
- حوِّل NCP إلى جهاز توجيه حدود باستخدام Open Border Router واربط شبكة Thread بشبكة الإنترنت.
المزيد من القراءة
يمكنك الاطّلاع على openthread.io وGitHub للحصول على مجموعة متنوعة من مراجع OpenThread، بما في ذلك:
- الأنظمة الأساسية المتوافقة: يمكنك الاطّلاع على جميع الأنظمة الأساسية التي تتوافق مع OpenThread.
- إصدار OpenThread - المزيد من التفاصيل حول إنشاء OpenThread وضبطه.
- Thread Prime — تغطي جميع مفاهيم سلاسل المحادثات التي تظهر في هذا الدرس التطبيقي حول الترميز
المرجع: