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

1- مقدمة

26b7f4f6b3ea0700.png

OpenThread هو تطبيق مفتوح المصدر لبروتوكول شبكات Thread®، وهو بروتوكول قوي وآمن للشبكات اللاسلكية المتداخلة مُصمم لأجهزة إنترنت الأشياء (IoT). تم تطوير OpenThread من قِبل فريق Nest من Google وهو متاح مجانًا لمنتدى المطوّرين كمشروع مفتوح المصدر.

تنشئ Thread Specification بروتوكول اتصال لاسلكي موثوق به وآمن وموفّر للطاقة للأجهزة ذات الموارد المحدودة الموجودة عادةً في المنازل الذكية والمباني التجارية. يشمل OpenThread النطاق الكامل لطبقة الشبكة داخل Thread، مثل IPv6، و6LoWPAN، وIEEE 802.15.4 مع أمان MAC، وإنشاء رابط الشبكة المتداخلة، وتوجيه الشبكة المتداخلة.

دمجت Telink تنفيذ OpenThread في نظام Zephyr RTOS، ما يتيح التوافق السلس مع أجهزة Telink. يمكن الوصول إلى رمز المصدر لهذا الدمج بسهولة على GitHub، ويتم توفيره أيضًا كحزمة تطوير برامج (SDK).

في هذا الدرس التطبيقي حول الترميز، ستبرمج OpenThread على أجهزة فعلية، وستنشئ شبكة Thread وتديرها وتبادل الرسائل بين العُقد. توضِّح الصورة أدناه عملية إعداد الأجهزة التي تتضمّن جهاز توجيه OT الحدودي (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 باستخدام واجهة سطر الأوامر (CLI).

المتطلبات

الأجهزة:

  • مجلسا تطوير B91.
  • جهاز Raspbian Pi 3B أو إصدار أحدث مع صورة نظام التشغيل Raspbian
  • جهاز يعمل بنظام التشغيل Linux ومزوّد بمنفذَي USB على الأقل
  • مفتاح (أو جهاز توجيه) متصل بالإنترنت وعدة كابلات إيثرنت.

البرامج:

  • أداة نسخ وتصحيح أخطاء Telink — LinuxBDT.
  • أداة طرفية للمنفذ التسلسلي، مثل PuTTY.
  • الأدوات الأخرى مثل، Git وWest.

2. المتطلبات الأساسية

مفاهيم سلسلة المحادثات وواجهة سطر الأوامر بنظام OpenThread

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

جهاز Linux

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

اتصال المنافذ التسلسلية والمحطات الطرفية

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

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

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

overview.png

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

الفهرس

الاسم

1

مجلس تطوير Telink B91

2

لوح حرق Telink

3

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

4

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

الإصدار Raspbian OS 3B أو إصدار أحدث مع نسخة نظام التشغيل Raspbian

في هذا الدرس التطبيقي حول الترميز، يجب توفُّر إصدار Raspbian Pi 3B أو إصدار أحدث مع صورة Raspbian Bullseye Lite OS أو Raspbian Bullseye مع جهاز كمبيوتر مكتبي. يتصل هذا الجهاز بالإنترنت من خلال إيثرنت، وسيتم ضبطه كمضيف لجهاز OpenThread ضبط موجّه الحدود (OTBR).

الاتصال بالشبكة

مفتاح تبديل (أو جهاز توجيه) متصل بالإنترنت وعدة كابلات إيثرنت. ويتم استخدام هذه الرموز لتوصيل جهاز Raspberry Pi بجهاز Linux، ما يؤدي إلى تسهيل تهيئة المستخدم لـ Raspberry Pi عبر المضيف.

LinuxBDT

تسمح لك أداة حرق وتصحيح الأخطاء (BDT) التي تنطبق على جميع سلاسل Telink Chip بمحو برامج OpenThread الثابتة وتصحيحها على لوحات التطوير Telink B91. ثبِّت إصدار linuxBDT المستند إلى X86 على الجهاز الذي يعمل بنظام التشغيل Linux.

غير ذلك

  • Git لإعداد بيئة تطوير Telink Zephyr.
  • الغرب، لإدارة مشروع Zephyr وإنشاء برامج ثنائية لـ OpenThread.

3. إعداد البرامج الثابتة

في الجهاز الذي يعمل بنظام التشغيل Linux، افتح الوحدة الطرفية لواجهة سطر الأوامر (CLI) وابدأ تنفيذ الأوامر التالية للتأكد من أنّ 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 غيغابايت تقريبًا) إلى دليل محلي لتتمكن من تحميل معظم اللوحات.
    $ 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
    
    يمكنك تنزيل حزمة Zephyr SDK ووضعها في المسار المقترَح، كما هو موضّح أدناه.
    $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 لإنشاء مثال 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 بلوح الاحتراق باستخدام كابل 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

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

بعد استعراض لوحة التطوير، قم بتمييز لوحة التطوير B91 عن طريق وضع علامة عليها وفقًا لذلك. عليك تصنيف اللوح في وميض ot-cli-ftd باسم "FTD Joiner" والوميض ot-rcp على "RCP".

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

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

usb_connection.png

بعد توصيل جهاز Join FTD بجهاز 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

توت باي

  1. تأكَّد من كتابة Raspbian Bullseye Lite OS أو Raspbian Bullseye مع كمبيوتر مكتبي بشكل صحيح على بطاقة SD.
  2. لديك خيار إما استخدام بروتوكول النقل الآمن في Raspbian Pi أو العمل مباشرةً باستخدام Raspbian Desktop. سيستخدم هذا الدرس التطبيقي حول الترميز بروتوكول النقل الآمن.
  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 Network على RCP

نستخدم واجهة ot-ctl المتوفّرة على OTBR لإنشاء شبكة Thread. إذا خرجت من واجهة الأوامر في القسم الأخير، أدخل الأمر التالي لتشغيلها مرة أخرى في الوحدة الطرفية لبروتوكول النقل الآمن:

$ docker exec -ti otbr sh -c "sudo ot-ctl"

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

الفهرس

Command

مقدمة

الاستجابة المتوقعة

1

dataset init new

قم بإنشاء مجموعة بيانات شبكة عشوائية جديدة.

تم

2

dataset commit active

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

تم

3

ifconfig up

اعرض واجهة IPv6.

تم

4

thread start

تفعيل عملية بروتوكول Thread والإرفاق بشبكة Thread

تم

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

5

state

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

قائد
تم

6

dataset active

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

الطابع الزمني النشط: 1
القناة: 13
قناع القناة: 0x07fff800
رقم تعريف رقم PAN التالي: b07476e168eda4fc
البادئة المحلية في Mesh: fd8c:60bc:a98:c7ba::/64
مفتاح الشبكة: c3124851874 K124r3831874 Mesh 49c419c92312Google




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

إضافة رابط FTD إلى سلسلة المحادثات من خلال عملية التكليف خارج الإطار

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

الفهرس

Command

مقدمة

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

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

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

طفل/جهاز توجيه
تم

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

أدخِل أوامر مثل 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 هو في الأساس 0xb001. بعد ذلك، تصبح قيمة RLOC16 الخاصة بأداة الربط FTD 0x8400 بعد الحصول على رقم تعريف جهاز التوجيه. يتضح لي أنّ أداة ربط FTD تمت ترقيتها من جهاز ثانوي إلى جهاز توجيه.

تحتوي شبكة Thread الحالية على عقدتين، والمخطط الهيكلي كما هو موضح في الشكل أدناه.

topology.png

7. الاتصال بين أجهزة مزوّدة بسلاسل

إشعارات 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

أدخل الأمر التالي في وحدة التحكم التسلسلية لـ Join FTD لتنفيذ عملية 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 قد تلقى طلب ping، وأن أداة الربط FTD قد تلقى استجابة ping التي يعرضها OTBR. تم الاتصال بين الجهازين بنجاح.

اتصالات UDP

وتشمل خدمات التطبيقات التي يوفرها OpenThread أيضًا بروتوكول UDP. يمكنك استخدام واجهة برمجة تطبيقات UDP لتمرير المعلومات بين العُقد في شبكة Thread أو تمرير المعلومات إلى الشبكات الخارجية من خلال جهاز توجيه الحدود. تتوفر المقدمة التفصيلية لواجهة برمجة تطبيقات UDP الخاصة بـ OpenThread في واجهة سطر الأوامر OpenThread - مثال على بروتوكول UDP. سيستخدم هذا الدرس التطبيقي حول الترميز بعض واجهات برمجة التطبيقات الخاصة به لنقل المعلومات بين OTBR وFTD Join.

أولاً، عليك الحصول على معرّف شريحة SIM المضمّنة (EID) المحلي لخدمة OTBR. هذا العنوان هو أيضًا أحد عناوين IPv6 لجهاز Thread، ويمكن استخدامه للوصول إلى أجهزة Thread في قسم شبكة Thread نفسه.

> ipaddr mleid
fd8c:60bc:a98:c7ba:5249:34ab:26d1:aff6
Done

أدخل الأوامر التالية في الوحدة الطرفية لبروتوكول النقل الآمن لتمكين OTBR UDP وربط المنفذ 1022 بالجهاز.

> udp open
Done
> udp bind :: 1022
Done

أدخل الأوامر التالية في وحدة التحكم التسلسلية ومكّن UDP لـ FTD Join. عليك ربط المنفذ 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، ما يعني أن اتصال UDP ناجح.

> 5 bytes from fd8c:60bc:a98:c7ba:9386:63cf:19d7:5a61 1022 hello

8. تهانينا

لقد أنشأت شبكة Thread بسيطة وتحقَّقت من الاتصال داخل هذه الشبكة.

أنت تعرف الآن ما يلي:

  • كيفية إنشاء بيئة تطوير Telink Zephyr واستخدامها.
  • طريقة إنشاء البرنامجين الثنائيين ot-cli-ftd وot-rcp، وإدراجهما في لوحات التطوير Telink B91.
  • كيفية إعداد إصدار Raspberry Pi 3B أو إصدار أحدث كجهاز توجيه الحدود OpenThread (OTBR) باستخدام Docker
  • كيفية إنشاء شبكة Thread على خدمة OTBR.
  • كيفية إضافة أجهزة إلى شبكة Thread من خلال عملية التكليف خارج النطاق.
  • طريقة التحقّق من إمكانية الاتصال بين العُقد في شبكة Thread

قراءات إضافية

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

  • الأنظمة الأساسية المتوافقة: يمكنك اكتشاف جميع الأنظمة الأساسية التي تتوافق مع OpenThread.
  • إنشاء OpenThread: يمكنك معرفة المزيد من التفاصيل حول إنشاء OpenThread وضبطه.
  • Thread Primer: يشمل جميع مفاهيم سلسلة المحادثات المضمَّنة في هذا الدرس التطبيقي حول الترميز

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