1. مقدمة

OpenThread هو تطبيق مفتوح المصدر لبروتوكول الشبكة Thread®، وهو بروتوكول شبكة لاسلكية قوي وآمن مصمّم لأجهزة إنترنت الأشياء (IoT). طوّر فريق Nest في Google بروتوكول OpenThread، وهو متاح مجانًا لمجتمع المطوّرين كمشروع مفتوح المصدر.
يضع مواصفات Thread بروتوكولاً موثوقًا وآمنًا وفعّالاً من حيث استهلاك الطاقة للاتصالات اللاسلكية للأجهزة ذات الموارد المحدودة التي يتم استخدامها عادةً في المنازل الذكية والمباني التجارية. يتضمّن OpenThread نطاق طبقة الشبكة الكاملة ضمن Thread، مثل الإصدار السادس من بروتوكول الإنترنت (IPv6) و6LoWPAN وIEEE 802.15.4 مع أمان MAC وإنشاء رابط شبكة وتوجيه الشبكة.
دمجت شركة Telink تنفيذ OpenThread في نظام التشغيل Zephyr RTOS، ما يتيح التوافق السلس مع أجهزة Telink. يمكن الوصول بسهولة إلى الرمز المصدر لعملية الدمج هذه على GitHub، كما يتم توفيره كحزمة تطوير برامج (SDK).
في هذا الدرس التطبيقي حول الترميز، ستبرمج OpenThread على أجهزة فعلية، وتنشئ شبكة Thread وتديرها، وتتبادل الرسائل بين العُقد. تعرض الصورة أدناه عملية إعداد الأجهزة، وتتضمّن جهاز توجيه حدوديًا (OTBR) وجهاز Thread واحدًا في الدرس التطبيقي حول الترميز.

أهداف الدورة التعليمية
- لإعداد تنفيذ OpenThread باستخدام بيئة تطوير Telink Zephyr
- لإنشاء عيّنات واجهة سطر الأوامر OpenThread (
ot-cli-ftdوot-rcp) وتثبيتها على لوحات تطوير Telink B91 - لإعداد جهاز توجيه حدودي OpenThread (OTBR) باستخدام Docker على جهاز Raspberry Pi 3B+ أو إصدار أحدث
- لإنشاء شبكة Thread على جهاز OTBR، اتّبِع الخطوات التالية:
- لإضافة أجهزة إلى شبكة Thread باستخدام تصحيح الأخطاء خارج النطاق
- للتحقّق من إمكانية الاتصال بين العُقد في شبكة Thread باستخدام واجهة سطر الأوامر
المتطلبات
الأجهزة:
- لوحا تطوير B91
- جهاز Raspberry Pi 3B+ أو إصدار أحدث مع صورة نظام التشغيل Raspbian
- جهاز Linux مزوّد بمنفذَي USB على الأقل
- مبدّل (أو جهاز توجيه) متصل بالإنترنت وعدة كابلات إيثرنت
البرامج:
- Telink Burning and Debugging Tool —— LinuxBDT.
- أداة طرفية للمنفذ التسلسلي، مثل PuTTY
- أدوات أخرى، مثل Git وWest
2. المتطلبات الأساسية
مفاهيم Thread وOpenThread CLI
ننصحك بالاطّلاع على الدرس التطبيقي حول محاكاة OpenThread للتعرّف على مفاهيم Thread الأساسية وواجهة سطر الأوامر OpenThread قبل هذا الدرس التطبيقي.
جهاز Linux
يعمل جهاز Linux (الإصدار 20.04 LTS من Ubuntu أو الإصدارات الأحدث) كجهاز إنشاء لإعداد بيئة تطوير Telink Zephyr وتثبيت جميع لوحات تطوير Thread. لإنجاز هذه المهام، يحتاج جهاز Linux إلى منفذَي USB متاحَين واتصال بالإنترنت.
اتصال المنفذ التسلسلي والمحطات
يمكنك توصيل الجهاز مباشرةً بمنفذ USB في جهاز Linux. بالإضافة إلى ذلك، ستحتاج إلى أداة طرفية لمنفذ تسلسلي للوصول إلى الأجهزة.
في هذا الدرس العملي، يتم استخدام أداة سطر الأوامر PuTTY للتحكّم في FTD Joiner وRaspberry Pi. ويوفّر نظرة عامة على استخدامه، ولكن يمكن أيضًا استخدام برامج طرفية أخرى.
Telink B91 Development Kit
يحتاج هذا الدرس التطبيقي حول الترميز إلى مجموعتَين من أدوات تطوير B91. تعرض الصورة أدناه الحد الأدنى من المكوّنات المطلوبة في مجموعة واحدة.

سيتم استخدام إحدى هذه المجموعات كمعالج مساعد للراديو (RCP)، بينما ستعمل المجموعة الأخرى كجهاز Full Thread (FTD). إذا لم تكن قد حصلت على المجموعة بعد، يمكنك الحصول على مزيد من التفاصيل من الموقع الإلكتروني الرسمي لشركة Telink. في ما يلي بعض المكوّنات التي يجب استخدامها:
المؤشر | الاسم |
1 | Telink B91 Development Board |
2 | Telink Burning Board |
3 | هوائي 2.4 جيجا هرتز |
4 | كابل USB (من النوع A إلى النوع mini USB) |
Raspberry Pi 3B+ أو إصدار أحدث مع صورة نظام التشغيل Raspbian
في هذا الدرس التطبيقي حول الترميز، يجب استخدام Raspberry Pi 3B+ أو إصدار أحدث مع نسخة نظام تشغيل Raspbian Bullseye Lite أو Raspbian Bullseye مع سطح المكتب. وهو متصل بالإنترنت عبر الإيثرنت وسيتم ضبطه كمضيف لجهاز توجيه حدود شبكة OpenThread (OTBR).
الاتصال بالشبكة
مبدّل (أو جهاز توجيه) متصل بالإنترنت وعدة كابلات إيثرنت ويتم استخدامها لربط Raspberry Pi بجهاز Linux، ما يسهّل على المستخدم ضبط إعدادات Raspberry Pi من خلال المضيف.
LinuxBDT
تتيح لك أداة Burning and Debugging Tool (BDT) من Telink، والتي تنطبق على جميع سلاسل شرائح Telink، محو البرامج الثابتة OpenThread وتثبيتها على لوحات تطوير Telink B91. ثبِّت إصدار Linux المستند إلى X86 linuxBDT على جهاز Linux.
غير ذلك
- Git، لإعداد بيئة تطوير Telink Zephyr
- West، لإدارة مشروع Zephyr وإنشاء ثنائيات OpenThread.
3- إعداد البرامج الثابتة
إعداد بيئة تطوير Telink Zephyr
على جهاز Linux، افتح وحدة طرفية لواجهة سطر الأوامر وابدأ بتنفيذ الأوامر التالية للتأكّد من أنّ APT محدّث.
$ sudo apt update $ sudo apt upgrade
بعد الانتهاء من ذلك، اتّبِع الخطوات التالية.
- ثبِّت التبعيات.
يتطلّب Zephyr حاليًا الحد الأدنى من إصدارات التبعيات الرئيسية، مثل CMake (الإصدار 3.20.0) وPython3 (الإصدار 3.6) وDevicetree Compiler (الإصدار 1.4.6).$ wget https://apt.kitware.com/kitware-archive.sh $ sudo bash kitware-archive.sh $ sudo apt install --no-install-recommends git cmake ninja-build \ gperf ccache dfu-util device-tree-compiler python3-dev python3-pip \ python3-setuptools python3-tk python3-wheel xz-utils file make gcc \ gcc-multilib g++-multilib libsdl2-dev
تحقَّق من الإصدارات المثبَّتة على نظامك قبل المتابعة إلى الخطوات التالية. إذا كانت الإصدارات غير صحيحة، بدِّل مرآة APT إلى مرآة ثابتة وحديثة، أو حدِّث هذه التبعيات يدويًا.$ cmake --version $ python3 --version $ dtc --version
- Install west.
تأكَّد من أنّ$ pip3 install --user -U west $ echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc $ source ~/.bashrc
~/.local/binمضمّن في متغيّر بيئة$PATH. - احصل على رمز المصدر الخاص بمشروع Zephyr.
$ west init ~/zephyrproject $ cd ~/zephyrproject $ west update $ west blobs fetch hal_telink $ west zephyr-export
- ثبِّت تبعيات Python الإضافية لـ Zephyr.
$ pip3 install --user -r ~/zephyrproject/zephyr/scripts/requirements.txt
- اضبط إعدادات مجموعة أدوات Zephyr. نزِّل مجموعة أدوات Zephyr (حوالي 1 إلى 2 غيغابايت) إلى دليل محلي للسماح لك بتثبيت ذاكرة ROM لمعظم اللوحات.
نزِّل حزمة تطوير البرامج (SDK) الخاصة بـ Zephyr وضَعها في المسار المقترَح، كما هو موضّح أدناه.$ wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.1/zephyr-sdk-0.16.1_linux-x86_64.tar.xz $ wget -O - https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.1/sha256.sum | shasum --check --ignore-missing
حيث [-x.y.z] هو نص اختياري يمكن أن يكون أي نص، مثل -0.16.1. لا يمكن نقل الدليل بعد تثبيت حزمة SDK. بعد ذلك، ثبِّت مجموعة أدوات Zephyr.$HOME/zephyr-sdk[-x.y.z] $HOME/.local/zephyr-sdk[-x.y.z] $HOME/.local/opt/zephyr-sdk[-x.y.z] $HOME/bin/zephyr-sdk[-x.y.z] /opt/zephyr-sdk[-x.y.z] /usr/zephyr-sdk[-x.y.z] /usr/local/zephyr-sdk[-x.y.z]
$ tar xvf zephyr-sdk-0.16.1_linux-x86_64.tar.xz $ cd zephyr-sdk-0.16.1 $ ./setup.sh -t riscv64-zephyr-elf -h -c
- إنشاء مثال Hello World أولاً، تحقَّق من صحة إعداد مشروع Zephyr الرسمي باستخدام مثال Hello World، ثمّ تابِع إعداد مشروعك المخصّص.
استخدِم أمر West build لإنشاء مثال hello_world من الدليل الجذر لمستودع Zephyr. يمكنك العثور على البرنامج الثابت المسمّى$ cd ~/zephyrproject/zephyr $ west build -p auto -b tlsr9518adk80d samples/hello_world
zephyr.binضمنbuild/zephyr directory. - أضِف نص برمجة بيئة Zephyr إلى
~/.bashrc. نفِّذ الأوامر التالية.$ echo "source ~/zephyrproject/zephyr/zephyr-env.sh" >> ~/.bashrc $ source ~/.bashrc
- أضِف مستودع Telink Zephyr البعيد. نزِّل مستودع Telink محليًا كفرع تطوير وعدِّله.
$ cd ~/zephyrproject/zephyr $ git remote add telink-semi https://github.com/telink-semi/zephyr $ git fetch telink develop $ git checkout develop $ west update $ west blobs fetch hal_telink
لمزيد من المعلومات، يمكنك الرجوع إلى مستند Zephyr – دليل البدء.
إعداد Telink LinuxBDT
نزِّل أداة Telink LinuxBDT واستخرِجها إلى دليل محلي على جهاز Linux، مثل دليل الصفحة الرئيسية ~، ما يتيح لك تثبيت البرامج الثابتة على لوحة التطوير B91.
$ cd ~ $ wget http://wiki.telink-semi.cn/tools_and_sdk/Tools/BDT/LinuxBDT.tar.bz2 $ tar -vxf LinuxBDT.tar.bz2
وصِّل لوحة Burning Board بجهاز Linux من خلال واجهة الناقل التسلسلي العالمي (USB)، ثم أدخِل الأوامر التالية.
$ cd LinuxBDT $ sudo ./bdt lsusb -v Bus 002 Device 001: ID 1d6b:0003 xHCI Host Controller Bus 001 Device 003: ID 0bda:565a Integrated_Webcam_HD Bus 001 Device 023: ID 413c:301a Dell MS116 USB Optical Mouse Bus 001 Device 037: ID 248a:826a Telink Web Debugger v3.6 Bus 001 Device 001: ID 1d6b:0002 xHCI Host Controller
إذا ظهرت لك الرسالة "Telink Web Debugger v3.6"، يشير ذلك إلى أنّ مبرمِج BDT قد ربط الجهاز الذي يعمل بنظام التشغيل Linux بنجاح.
تجميع البرامج الثابتة
سيركّز هذا الدرس التطبيقي العملي على إنشاء نوعَين من البرامج الثابتة OpenThread:
ot-cli-ftd،- و
ot-rcp.
في ما يلي طرق التجميع:
- المعالج المشترك للراديو(
ot-rcp)$ cd ~/zephyrproject $ rm -rf build_ot_coprocessor $ west build -b tlsr9518adk80d -d build_ot_coprocessor zephyr/samples/net/openthread/coprocessor -- -DDTC_OVERLAY_FILE="usb.overlay" -DOVERLAY_CONFIG=overlay-rcp-usb-telink.conf
- جهاز Thread كامل الميزات مع سطر أوامر تفاعلي (
ot-cli-ftd)$ cd ~/zephyrproject $ rm -rf build_ot_cli_ftd $ west build -b tlsr9518adk80d -d build_ot_cli_ftd zephyr/samples/net/openthread/cli -- -DOVERLAY_CONFIG=overlay-telink-fixed-mac.conf -DCONFIG_OPENTHREAD_FTD=y
تثبيت البرامج الثابتة
وصِّل لوحة تطوير B91 بلوحة Burning باستخدام كابل USB كما هو موضّح في الشكل أدناه.

في سطر الأوامر، نفِّذ الأوامر التالية لتنفيذ عملية حرق البرامج الثابتة (باستخدام عملية وميض البرامج الثابتة ot-cli-ftd كمثال).
$ cd ~/zephyrproject/build_ot_cli_ftd/zephyr $ cp zephyr.bin ~/LinuxBDT/bin/ot-cli-ftd.bin $ cd ~/LinuxBDT $ sudo ./bdt 9518 ac Activate OK! $ sudo ./bdt 9518 wf 0 -i bin/ot-cli-ftd.bin EraseSectorsize... Total Time: 2181 ms Flash writing... [100%][-] [##################################################] File Download to Flash at address 0x000000: 491700 bytes Total Time: 30087 ms
طريقة استخدام الفلاش في ot-rcp هي نفسها في ot-cli-ftd. ومع ذلك، هناك اختلافات في مسارات البرامج الثابتة وأسمائها.
بعد التحديث، ميِّز لوحَي التطوير B91 عن طريق وضع علامات عليهما وفقًا لذلك. صنِّف اللوحة التي يظهر عليها ot-cli-ftd على أنّها "مستخدم جديد في FTD"، واللوحة التي يظهر عليها ot-rcp على أنّها "مستخدم RCP".
4. ضبط وحدة تحكّم تسلسلية لجهاز FTD Joiner
كما هو موضّح في الصورة، وصِّل FTD Joiner مباشرةً بمنفذ USB في جهاز Linux.

بعد ربط جهاز FTD Joiner بجهاز Linux، افتح PuTTY. بعد ذلك، أنشئ نافذة طرفية جديدة، واضبط معلومات المنفذ التسلسلي، وافتح المنفذ التسلسلي.

يمكنك الاطّلاع على مرجع سطر الأوامر OpenThread هنا: مرجع سطر الأوامر OpenThread. احرص على إضافة البادئة ot إلى جميع الأوامر.
أمثلة:
> ot state disabled Done > ot channel 11 Done >
5. إعداد Raspberry Pi كجهاز توجيه حدودي OpenThread
جهاز توجيه حدود شبكة OpenThread هو جهاز يتألف من جزأين رئيسيين:
- يحتوي جهاز Raspberry Pi على جميع الخدمات والبرامج الثابتة اللازمة ليعمل كجهاز توجيه حدودي (BR).
- يكون RCP مسؤولاً عن التواصل عبر Thread.
معالج الراديو المساعد (RCP)
لتثبيت برامج ot-rcp الثابتة، اتّبِع الخطوات نفسها المتّبعة في عملية تثبيت برامج ot-cli-ftd الثابتة. وصِّل لوحة تطوير B91 بمنفذ USB على Raspberry Pi، كما هو موضّح في الشكل أدناه.

Raspberry Pi
- تأكَّد من كتابة صورة نظام التشغيل Raspbian Bullseye Lite أو Raspbian Bullseye مع سطح المكتب بشكلٍ صحيح على بطاقة SD.
- يمكنك إما استخدام SSH للوصول إلى Raspberry Pi أو العمل مباشرةً على Raspbian Desktop. سيستخدم هذا الدرس التطبيقي حول الترميز بروتوكول SSH.
- قبل المتابعة لتثبيت OTBR Docker في الخطوة التالية، احرص على تعديل المستودع المحلي ومدير الحِزم أولاً.
$ sudo apt-get update $ sudp apt-get upgrade
تثبيت Docker
إذا كنت قد حدّثت المستودع المحلي ومدير الحزم APT في الخطوة السابقة، أعِد تشغيل Raspberry Pi ثم افتح نافذة طرفية SSH.
- ثبِّت Docker:
$ curl -sSL https://get.docker.com | sh
- ضَع الحساب الحالي في مجموعة Docker لمنح الإذن حتى لا تحتاج إلى إضافة
sudoقبل كل أمر. يجب إعادة تشغيل Raspberry Pi لتطبيق هذه الإعدادات.$ sudo usermod -aG docker $USER
- إذا لم يبدأ Docker، ابدأه:
$ sudo dockerd
- تنشئ نصوص جدار الحماية البرمجية في OTBR قواعد داخل حاوية Docker. قبل ذلك، نفِّذ الأمر
modprobeلتحميل وحدة kernel الخاصة بـ iptables.$ sudo modprobe ip6table_filter
ضبط Docker وتشغيله
يسحب هذا الدرس التطبيقي حول الترميز مباشرةً صورة OTBR Docker من OpenThread Docker Hub. تم اختبار هذه الصورة والتحقّق منها بواسطة فريق OpenThread.
- اسحب أحدث صورة:
$ docker pull openthread/otbr:latest
- تحقَّق من قائمة الصور في حاوية Docker:
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE openthread/otbr latest db081f4de15f 6 days ago 766MB
- حدِّد اسم المنفذ التسلسلي لجهاز RCP من خلال التحقّق من
/dev، يشيرttyACM0إلى أنّ جهاز RCP متصل بشكل صحيح.$ ls /dev/tty* ... /dev/ttyACM0 ...
- نفِّذ OTBR Docker للمرة الأولى، وأشِر إلى المنفذ التسلسلي لـ RCP (
ttyACM0). إذا أردت مواصلة استخدام OTBR Docker هذا، استخدِم الأمر docker start otbr.$ docker run --name "otbr" --sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" -p 8080:80 --dns=127.0.0.1 -it --volume /dev/ttyACM0:/dev/ttyACM0 --privileged openthread/otbr --radio-url spinel+hdlc+uart:///dev/ttyACM0
- افتح نافذة وحدة طرفية SSH جديدة لاختبار الاتصال بين Raspberry Pi وRCP.
$ docker exec -ti otbr sh -c "sudo ot-ctl" > state disabled Done
أوامر Docker الاختيارية:
- للحصول على معلومات حول حاوية Docker قيد التشغيل، اتّبِع الخطوات التالية:
$ docker ps -aq
- أوقِف OTBR Docker:
$ docker stop otbr
- إزالة OTBR Docker:
$ docker rm otbr
- أعِد تحميل OTBR Docker:
$ docker restart otbr
في هذه المرحلة، يكون جهاز FTD Joiner وجهاز OTBR جاهزَين، ويمكنك الانتقال إلى الخطوة التالية لإنشاء شبكة Thread.
6. إنشاء شبكة Thread
إنشاء شبكة Thread على RCP
نستخدم برنامج ot-ctl على OTBR لإنشاء شبكة Thread. إذا خرجت من واجهة المستخدم في القسم الأخير، أدخِل الأمر التالي لبدء تشغيلها مرة أخرى في وحدة SSH الطرفية:
$ docker exec -ti otbr sh -c "sudo ot-ctl"
بعد ذلك، أدخِل الأوامر بالترتيب المحدّد في الجدول، وتأكَّد من أنّ كل خطوة تحقّق النتيجة المتوقّعة قبل الانتقال إلى الخطوة التالية.
المؤشر | Command | مقدمة | الردّ المتوقّع | ||
1 |
| أنشئ مجموعة بيانات شبكة عشوائية جديدة. | تم | ||
2 |
| إضافة مجموعة البيانات الجديدة إلى مجموعة البيانات التشغيلية النشطة في وحدة تخزين غير متطايرة | تم | ||
3 |
| افتح واجهة IPv6. | تم | ||
4 |
| فعِّل عملية بروتوكول Thread واربطها بشبكة Thread. | تم | ||
انتظِر لمدة 10 ثوانٍ حتى تظهر واجهة سلسلة المحادثات. | |||||
5 |
| تحقَّق من حالة الجهاز.يمكن استدعاء هذا الأمر عدة مرات إلى أن يصبح الجهاز هو الجهاز الرئيسي وينتقل إلى الخطوة التالية. | leader | ||
6 |
| تحقَّق من مجموعة البيانات التشغيلية النشطة الكاملة ومفتاح الشبكة. | Active Timestamp: 1 | ||
سيتم استخدام مفتاح الشبكة الذي تم إنشاؤه عشوائيًا بواسطة OTBR أثناء إنشاء الشبكة عندما تنضم أجهزة ot-cli-ftd إلى شبكة Thread هذه.
إضافة جهاز FTD Joiner إلى Thread من خلال الإعداد خارج النطاق
تشير عملية الإعداد خارج النطاق إلى نقل بيانات اعتماد الشبكة إلى الأجهزة التي تنتظر الانضمام إلى الشبكة من خلال طرق غير لاسلكية (على سبيل المثال، إدخالها يدويًا في واجهة سطر الأوامر OpenThread). أدخِل الأوامر التالية بالترتيب في وحدة التحكم التسلسلية إلى FTD Joiner.
المؤشر | Command | مقدمة | الردود المتوقّعة | ||
1 |
| مفتاح الشبكة هو العنصر الوحيد اللازم لربط جهاز بشبكة Thread. | تم | ||
2 |
| إضافة مجموعة البيانات الجديدة إلى مجموعة البيانات التشغيلية النشطة في وحدة تخزين غير متطايرة | تم | ||
3 |
| افتح واجهة IPv6. | تم | ||
4 |
| فعِّل عملية بروتوكول Thread واربطها بشبكة Thread. | تم | ||
انتظِر لمدة 20 ثانية بينما ينضم الجهاز إلى الشبكة ويضبط إعداداته. | |||||
5 |
| تحقَّق من حالة الجهاز. | child/router | ||
علم الطوبولوجيا
أدخِل أوامر مثل ipaddr وchild table وrouter table في نافذة SSH الطرفية للحصول على ردود مثل مقتطفات الرموز التالية.
> ipaddr rloc fd8c:60bc:a98:c7ba:0:ff:fe00:b000 Done > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|D|N|Ver|CSL|QMsgCnt|Suprvsn| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+---+---+-------+-------+------------------+ | 1 | 0xb001 | 240 | 23 | 3 | 51 |1|1|1| 3| 0 | 0 | 129 | 82bc12fbe783468e | Done > router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | Link | +----+--------+----------+-----------+-------+--------+-----+------------------+------+ | 44 | 0xb000 | 63 | 0 | 0 | 0 | 0 | 7ae354109d611f7e | 0 | Done ... > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|D|N|Ver|CSL|QMsgCnt|Suprvsn| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+---+---+-------+-------+------------------+ Done > router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | Link | +----+--------+----------+-----------+-------+--------+-----+------------------+------+ | 33 | 0x8400 | 63 | 0 | 3 | 3 | 13 | e61487c1cda940a6 | 1 | | 44 | 0xb000 | 63 | 0 | 0 | 0 | 0 | 7ae354109d611f7e | 0 | Done
RLOC16 OTBR هو 0xb000، وRLOC16 FTD Joiner في البداية هو 0xb001. بعد ذلك، يصبح RLOC16 الخاص بجهاز FTD Joiner 0x8400 بعد الحصول على معرّف جهاز التوجيه. يمكن ملاحظة أنّه تمت ترقية FTD Joiner من جهاز تابع إلى جهاز توجيه.
تحتوي شبكة Thread الحالية على عقدتَين، ويتم عرض المخطط الطوبولوجي كما هو موضّح في الشكل أدناه.

7. التواصل بين أجهزة Thread
التواصل عبر ICMPv6
نستخدم الأمر ping للتحقّق مما إذا كانت أجهزة Thread في الشبكة نفسها يمكنها التواصل مع بعضها البعض. أولاً، استخدِم الأمر ipaddr للحصول على RLOC للجهاز.
> ipaddr fd8c:60bc:a98:c7ba:0:ff:fe00:fc11 fdbd:7274:649c:1:1d19:9613:f705:a5af fd8c:60bc:a98:c7ba:0:ff:fe00:fc10 fd8c:60bc:a98:c7ba:0:ff:fe00:fc38 fd8c:60bc:a98:c7ba:0:ff:fe00:fc00 fd8c:60bc:a98:c7ba:0:ff:fe00:b000 # Routing Locator (RLOC) fd8c:60bc:a98:c7ba:5249:34ab:26d1:aff6 fe80:0:0:0:78e3:5410:9d61:1f7e Done
أدخِل الأمر التالي في وحدة تحكّم التسلسلية الخاصة بـ FTD Joiner لتنفيذ عملية ping.
> ot ping fd8c:60bc:a98:c7ba:0:ff:fe00:b000 16 bytes from fd8c:60bc:a98:c7ba:0:ff:fe00:b000: icmp_seq=1 hlim=64 time=19ms 1 packets transmitted, 1 packets received. Packet loss = 0.0%. Round-trip min/avg/max = 19/19.0/19 ms. Done
تشير استجابة الإخراج لمنفذ التسلسل إلى أنّ جهاز OTBR قد تلقّى طلب اختبار الاتصال، وأنّ جهاز FTD Joiner قد تلقّى استجابة اختبار الاتصال التي أرسلها جهاز OTBR. تمت عملية التواصل بين الجهازين بنجاح.
اتصال UDP
تشمل خدمات التطبيقات التي يوفّرها OpenThread أيضًا بروتوكول UDP. يمكنك استخدام واجهة برمجة تطبيقات UDP لنقل المعلومات بين العُقد في شبكة Thread، أو نقل المعلومات إلى الشبكات الخارجية من خلال جهاز توجيه الحدود. يمكنك الاطّلاع على المقدّمة التفصيلية لواجهة برمجة تطبيقات UDP في OpenThread في OpenThread CLI - مثال على UDP. سيستخدم هذا الدرس التطبيقي بعض واجهات برمجة التطبيقات في هذه الحزمة لنقل المعلومات بين OTBR وFTD Joiner.
أولاً، احصل على معرّف EID الخاص بـ OTBR في الشبكة المحلية. هذا العنوان هو أيضًا أحد عناوين الإصدار السادس من بروتوكول الإنترنت (IPv6) لجهاز Thread، ويمكن استخدامه للوصول إلى أجهزة Thread في القسم نفسه من شبكة Thread.
> ipaddr mleid fd8c:60bc:a98:c7ba:5249:34ab:26d1:aff6 Done
أدخِل الأوامر التالية في وحدة SSH الطرفية لتفعيل بروتوكول UDP الخاص بـ OTBR وربط منفذ 1022 بالجهاز.
> udp open Done > udp bind :: 1022 Done
أدخِل الأوامر التالية في وحدة التحكّم التسلسلية وفعِّل بروتوكول UDP الخاص بـ FTD Joiner. اربط منفذ 1022 بالجهاز، ثم أرسِل رسالة hello مؤلفة من 5 بايت إلى OTBR.
> ot udp open Done > ot udp bind :: 1022 Done > ot udp send fd8c:60bc:a98:c7ba:5249:34ab:26d1:aff6 1022 hello Done
تعرض نافذة SSH المعلومات التالية. يتلقّى OTBR الرسالة hello من جهاز FTD Joiner، ما يعني أنّ عملية التواصل عبر UDP تمت بنجاح.
> 5 bytes from fd8c:60bc:a98:c7ba:9386:63cf:19d7:5a61 1022 hello
8. تهانينا
لقد أنشأت شبكة Thread بسيطة وتحقّقت من التواصل داخل هذه الشبكة.
أنت تعرف الآن:
- كيفية إنشاء بيئة تطوير Telink Zephyr واستخدامها
- كيفية إنشاء ملفات
ot-cli-ftdوot-rcpالثنائية، بالإضافة إلى تثبيت ذاكرة ROM عليها في لوحات تطوير Telink B91 - كيفية إعداد الإصدار 3B+ أو إصدار أحدث من Raspberry Pi كجهاز توجيه حدودي OpenThread (OTBR) باستخدام Docker
- كيفية إنشاء شبكة Thread على OTBR
- كيفية إضافة أجهزة إلى شبكة Thread من خلال عملية الإعداد خارج النطاق
- كيفية التحقّق من إمكانية الاتصال بين العُقد في شبكة Thread
محتوى إضافي للقراءة
يمكنك الاطّلاع على openthread.io وGitHub للتعرّف على موارد OpenThread المختلفة، بما في ذلك:
- المنصّات المتوافقة: يمكنك الاطّلاع على جميع المنصّات المتوافقة مع OpenThread
- إنشاء OpenThread: مزيد من التفاصيل حول إنشاء OpenThread وإعداده
- مقدمة حول Thread: تتناول جميع مفاهيم Thread الواردة في هذا الدرس التطبيقي
المستندات المرجعية: