إنشاء شبكة Thread باستخدام مجلس تطوير B91 وOpenThread

1. مقدمة

26b7f4f6b3ea0700.png

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 واحدًا في الدرس العملي.

codelab_overview.png

أهداف الدورة التعليمية

  • لإعداد تنفيذ 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

قد يكون من المفيد الاطّلاع على الدرس التطبيقي حول الترميز الخاص بمحاكاة OpenThread للتعرّف على مفاهيم Thread الأساسية وواجهة سطر الأوامر OpenThread قبل هذا الدرس التطبيقي حول الترميز.

جهاز Linux

يعمل جهاز Linux (Ubuntu v20.04 LTS أو الإصدارات الأحدث) كجهاز إنشاء لإعداد بيئة تطوير Telink Zephyr وتثبيت ذاكرة ROM لجميع لوحات تطوير Thread. لإكمال هذه المهام، يحتاج جهاز Linux إلى منفذَي USB متاحَين واتصال بالإنترنت.

الاتصال بمنفذ تسلسلي وأطرافه

يمكنك توصيل الجهاز مباشرةً بمنفذ USB في جهاز Linux. بالإضافة إلى ذلك، ستحتاج إلى أداة طرفية لمنفذ تسلسلي للوصول إلى الأجهزة.

في هذا الدرس التطبيقي حول الترميز، يتم استخدام أداة سطر الأوامر PuTTY للتحكّم في FTD Joiner وRaspberry Pi. ويوفّر نظرة عامة على استخدامه، ولكن يمكن أيضًا استخدام برامج أخرى للطرفية.

يتطلّب هذا الدرس التطبيقي حول الترميز مجموعتَين من حِزم تطوير B91. تعرض الصورة أدناه الحد الأدنى من المكوّنات المطلوبة في مجموعة واحدة.

overview.png

سيتم استخدام إحدى هذه المجموعات كمعالج مساعد للراديو (RCP)، بينما ستعمل المجموعة الأخرى كجهاز Thread كامل (FTD). إذا لم تكن قد حصلت على المجموعة بعد، يمكنك الحصول على مزيد من التفاصيل من الموقع الإلكتروني الرسمي لشركة Telink. في ما يلي بعض المكوّنات التي يجب استخدامها:

المؤشر

الاسم

1

Telink B91 Development Board

2

Telink Burning Board

3

هوائي 2.4 جيجا هرتز

4

كابل USB (من USB A إلى USB صغير)

‫Raspberry Pi 3B+ أو إصدار أحدث مع صورة نظام التشغيل Raspbian

في هذا الدرس العملي، يجب استخدام Raspberry Pi 3B+ أو إصدار أحدث مع صورة نظام التشغيل Raspbian Bullseye Lite أو Raspbian Bullseye مع Desktop. وهو متصل بالإنترنت عبر الإيثرنت وسيتم ضبطه كمضيف لجهاز توجيه حدود شبكة 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- إعداد البرامج الثابتة

على جهاز Linux، افتح وحدة طرفية لواجهة سطر الأوامر وابدأ بتنفيذ الأوامر التالية للتأكّد من أنّ APT محدّث.

$ sudo apt update
$ sudo apt upgrade

بعد ذلك، اتّبِع الخطوات التالية.

  1. ثبِّت التبعيات.
    $ 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
    
    يتطلّب Zephyr حاليًا الحد الأدنى من إصدارات التبعيات الرئيسية، مثل CMake (3.20.0) وPython3 (3.6) وDevicetree Compiler (1.4.6).
    $ cmake --version
    $ python3 --version
    $ dtc --version
    
    تحقَّق من الإصدارات المثبَّتة على نظامك قبل المتابعة إلى الخطوات التالية. إذا كانت الإصدارات غير صحيحة، بدِّل مرآة APT إلى مرآة ثابتة وحديثة، أو حدِّث هذه التبعيات يدويًا.
  2. التثبيت في الغرب
    $ pip3 install --user -U west
    $ echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc
    $ source ~/.bashrc
    
    تأكَّد من أنّ ~/.local/bin مضمّن في متغيّر بيئة $PATH.
  3. احصل على رمز المصدر الخاص بمشروع Zephyr.
    $ west init ~/zephyrproject
    $ cd ~/zephyrproject
    $ west update
    $ west blobs fetch hal_telink
    $ west zephyr-export
    
  4. ثبِّت تبعيات Python الإضافية لـ Zephyr.
    $ pip3 install --user -r ~/zephyrproject/zephyr/scripts/requirements.txt
    
  5. اضبط إعدادات مجموعة أدوات Zephyr. نزِّل مجموعة أدوات Zephyr (حوالي 1 إلى 2 غيغابايت) إلى دليل محلي للسماح لك بتثبيت ذاكرة ROM لمعظم اللوحات.
    $ 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
    
    نزِّل حزمة تطوير البرامج (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]
    
    حيث [-x.y.z] هو نص اختياري يمكن أن يكون أي نص، مثل -0.16.1. لا يمكن نقل الدليل بعد تثبيت حزمة SDK. بعد ذلك، ثبِّت مجموعة أدوات Zephyr.
    $ 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
    
  6. إنشاء مثال Hello World أولاً، تحقَّق من صحة إعداد مشروع Zephyr الرسمي باستخدام مثال Hello World، ثمّ تابِع إعداد مشروعك المخصّص.
    $ cd ~/zephyrproject/zephyr
    $ west build -p auto -b tlsr9518adk80d samples/hello_world
    
    استخدِم أمر West build لإنشاء مثال hello_world من الدليل الجذر لمستودع Zephyr. يمكنك العثور على البرنامج الثابت المسمّى zephyr.bin ضمن build/zephyr directory.
  7. أضِف نص بيئة Zephyr إلى ~/.bashrc. نفِّذ الأوامر التالية.
    $ echo "source ~/zephyrproject/zephyr/zephyr-env.sh" >> ~/.bashrc
    $ source ~/.bashrc
    
  8. أضِف مستودع 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 واستخرِجها إلى دليل محلي على جهاز 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.

في ما يلي طرق التجميع:

  1. المعالج المساعد للراديو(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
    
  2. جهاز 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 كما هو موضّح في الشكل أدناه.

connection_overview.png

في سطر الأوامر، نفِّذ الأوامر التالية لتنفيذ عملية حرق البرامج الثابتة (باستخدام عملية وميض البرامج الثابتة 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

طريقة تثبيت ذاكرة ROM في ot-rcp هي نفسها في ot-cli-ftd. ومع ذلك، هناك اختلافات في مسارات البرامج الثابتة وأسمائها.

بعد التحديث، ميِّز لوحتي B91 التطويريتين من خلال وضع علامة عليهما وفقًا لذلك. صنِّف اللوحة التي تحمل الرقم ot-cli-ftd على أنّها "مستخدم جديد" واللوحة التي تحمل الرقم ot-rcp على أنّها "مستخدم متكرّر".

4. ضبط وحدة تحكّم تسلسلية لجهاز FTD Joiner

كما هو موضّح في الصورة، وصِّل FTD Joiner مباشرةً بمنفذ USB في جهاز Linux.

usb_connection.png

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

uart_console.png

يمكنك الاطّلاع على مرجع سطر الأوامر 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، كما هو موضّح في الشكل أدناه.

OTBR_overview.png

Raspberry Pi

  1. تأكَّد من كتابة صورة نظام التشغيل Raspbian Bullseye Lite أو Raspbian Bullseye مع سطح المكتب بشكلٍ صحيح على بطاقة SD.
  2. يمكنك إما استخدام SSH للوصول إلى Raspberry Pi أو العمل مباشرةً على Raspbian Desktop. سيستخدم هذا الدرس التطبيقي حول الترميز SSH.
  3. قبل المتابعة لتثبيت OTBR Docker في الخطوة التالية، احرص على تعديل المستودع المحلي ومدير الحزم أولاً.
    $ sudo apt-get update
    $ sudp apt-get upgrade
    

تثبيت Docker

إذا كنت قد حدّثت المستودع المحلي ومدير الحزم APT في الخطوة السابقة، أعِد تشغيل Raspberry Pi ثم افتح نافذة طرفية SSH.

  1. ثبِّت Docker:
    $ curl -sSL https://get.docker.com | sh
    
  2. ضَع الحساب الحالي في مجموعة Docker لمنح الإذن حتى لا تحتاج إلى إضافة sudo قبل كل أمر.
    $ sudo usermod -aG docker $USER
    
    يجب إعادة تشغيل Raspberry Pi لتطبيق هذه الإعدادات.
  3. إذا لم يبدأ Docker، ابدأه:
    $ sudo dockerd
    
  4. تنشئ نصوص جدار الحماية البرمجية في OTBR قواعد داخل حاوية Docker. قبل ذلك، نفِّذ الأمر modprobe لتحميل وحدة kernel الخاصة بـ iptables.
    $ sudo modprobe ip6table_filter
    

ضبط Docker وتشغيله

يستردّ هذا الدرس التطبيقي حول الترميز مباشرةً نسخة OTBR Docker من OpenThread Docker Hub. تم اختبار هذه الصورة والتحقّق منها بواسطة فريق OpenThread.

  1. اسحب أحدث صورة:
    $ docker pull openthread/otbr:latest
    
  2. تحقَّق من قائمة الصور في حاوية Docker:
    $ docker images
    REPOSITORY        TAG       IMAGE ID       CREATED      SIZE
    openthread/otbr   latest    db081f4de15f   6 days ago   766MB
    
  3. حدِّد اسم المنفذ التسلسلي لجهاز RCP من خلال التحقّق من /dev، يشير ttyACM0 إلى أنّ جهاز RCP متصل بشكل صحيح.
    $ ls /dev/tty*
    ...
    /dev/ttyACM0
    ... 
    
  4. شغِّل 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
    
  5. افتح نافذة طرفية جديدة لبروتوكول 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"

بعد ذلك، أدخِل الأوامر بالترتيب المحدّد في الجدول، وتأكَّد من أنّ كل خطوة تحقّق النتيجة المتوقّعة قبل الانتقال إلى الخطوة التالية.

المؤشر

الأوامر

مقدمة

الردّ المتوقّع

1

dataset init new

أنشئ مجموعة بيانات شبكة عشوائية جديدة.

تم

2

dataset commit active

إضافة مجموعة البيانات الجديدة إلى مجموعة البيانات التشغيلية النشطة في وحدة تخزين غير متطايرة

تم

3

ifconfig up

افتح واجهة IPv6.

تم

4

thread start

فعِّل عملية بروتوكول Thread واربطها بشبكة Thread.

تم

انتظِر لمدة 10 ثوانٍ إلى أن تظهر واجهة سلسلة المحادثات.

5

state

تحقَّق من حالة الجهاز.يمكن استدعاء هذا الأمر عدة مرات إلى أن يصبح الجهاز هو الجهاز الرئيسي وينتقل إلى الخطوة التالية.

leader
تم

6

dataset active

تحقَّق من مجموعة البيانات التشغيلية النشطة الكاملة وسجِّل مفتاح الشبكة.

Active Timestamp: 1
Channel: 13
Channel Mask: 0x07fff800
Ext PAN ID: b07476e168eda4fc
Mesh Local Prefix: fd8c:60bc:a98:c7ba::/64
Network Key: c312485187484ceb5992d2343baaf93d
Network Name: OpenThread-599c
PAN ID: 0x599c
PSKc: 04f79ad752e8401a1933486c95299f60
Security Policy: 672 onrc 0
Done

سيتم استخدام مفتاح الشبكة الذي تم إنشاؤه عشوائيًا بواسطة OTBR أثناء إنشاء الشبكة عندما تنضم أجهزة ot-cli-ftd إلى شبكة Thread هذه.

إضافة جهاز FTD Joiner إلى Thread من خلال عملية الإعداد خارج النطاق

تشير عملية الإعداد خارج النطاق إلى نقل بيانات اعتماد الشبكة إلى الأجهزة التي تنتظر الانضمام إلى الشبكة من خلال طرق غير لاسلكية (على سبيل المثال، إدخالها يدويًا في واجهة سطر الأوامر OpenThread). أدخِل الأوامر التالية بالترتيب في وحدة التحكم التسلسلية إلى FTD Joiner.

المؤشر

الأوامر

مقدمة

الردود المتوقّعة

1

ot dataset networkkey c312485187484ceb5992d2343baaf93d

مفتاح الشبكة هو العنصر الوحيد اللازم لربط جهاز بشبكة Thread.

تم

2

ot dataset commit active

إضافة مجموعة البيانات الجديدة إلى مجموعة البيانات التشغيلية النشطة في وحدة تخزين غير متطايرة

تم

3

ot ifconfig up

افتح واجهة IPv6.

تم

4

ot thread start

فعِّل عملية بروتوكول Thread واربطها بشبكة Thread.

تم

انتظِر لمدة 20 ثانية بينما ينضم الجهاز إلى الشبكة ويضبط نفسه.

5

ot state

تحقَّق من حالة الجهاز.

child/router
Done

علم الطوبولوجيا

أدخِل أوامر مثل 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 الحالية على عقدتَين، ويظهر التصميم في الشكل أدناه.

topology.png

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 Example. سيستخدم هذا الدرس التطبيقي حول الترميز بعض واجهات برمجة التطبيقات هذه لنقل المعلومات بين OTBR وFTD Joiner.

أولاً، احصل على معرّف EID الخاص بشبكة Mesh-Local لجهاز 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
  • كيفية إعداد الإصدار Raspberry Pi 3B+ أو إصدار أحدث كجهاز توجيه حدودي OpenThread (OTBR) باستخدام Docker
  • كيفية إنشاء شبكة Thread على OTBR
  • كيفية إضافة أجهزة إلى شبكة Thread من خلال عملية الإعداد خارج النطاق
  • كيفية التحقّق من إمكانية الاتصال بين العُقد في شبكة Thread

محتوى إضافي للقراءة

يمكنك الاطّلاع على openthread.io وGitHub للتعرّف على موارد OpenThread المختلفة، بما في ذلك:

المستندات المرجعية: