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

1. مقدمة

26b7f4f6b3ea0700.png

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

توفّر مواصفات 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 CLI (ot-cli-ftd وot-rcp) وتثبيتهما على Telink B91 Development Boards
  • لإعداد جهاز توجيه الحدود OpenThread (OTBR) باستخدام Docker على جهاز Raspberry Pi 3B+ أو إصدار أحدث.
  • لإنشاء شبكة Thread على بروتوكول OTBR.
  • إضافة أجهزة إلى شبكة Thread باستخدام تصحيح الأخطاء خارج النطاق
  • للتحقّق من الاتصال بين العُقد في شبكة Thread باستخدام واجهة سطر الأوامر.

المتطلبات

الأجهزة:

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

البرامج:

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

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

مفاهيم Thread وOpenThread CLI

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

جهاز Linux

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

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

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

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

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

overview.png

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

الفهرس

الاسم

1

لوحة تطوير Telink B91

2

لوح احتراق Telink

3

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

4

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

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

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

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

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

LinuxBDT

تسمح لك أداة Burning and Debugging أداة (BDT) من Telink، التي تنطبق على جميع سلاسل Telink Chip، بمحو برامج OpenThread الثابتة وترميزها على لوحات التطوير Telink B91. ثبِّت إصدار linux المستند إلى X86 linuxBDT على جهاز Linux.

غير ذلك

  • Git لإعداد بيئة Telink Zephyr Development Environment
  • الغرب، لإدارة مشروع 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. تثبيت تبعيات بايثون إضافية لـ 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 repo محليًا كفرع للتطوير وتحديثه
    $ 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، مثل الدليل الرئيسي ~، لإتاحة تحديث البرامج الثابتة لبرامج Flash في لوحة تطوير 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. جهاز سلسلة محادثات مكتمل الميزات ويستخدم سطر أوامر تفاعلي (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 Board باستخدام كابل 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

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

uart_console.png

يتوفّر مرجع سطر أوامر OpenThread هنا: OpenThread CLI Reference. تأكَّد من إضافة بادئة لجميع الأوامر إلى ot.

أمثلة:

> ot state
disabled
Done
> ot channel
11
Done
>

5- إعداد Raspberry Pi كجهاز توجيه الحدود OpenThread

جهاز توجيه الحدود OpenThread هو جهاز يتكون من جزأين رئيسيين:

  • يحتوي Rspberry Pi على جميع الخدمات والبرامج الثابتة المطلوبة للعمل كجهاز توجيه الحدود (BR).
  • RCP مسؤول عن التواصل عبر سلسلة المحادثات.

معالج راديو مساعد (RCP)

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

OTBR_overview.png

توت باي

  1. تأكَّد من كتابة صورة Rspbian Bullseye Lite OS أو Rspbian Bullseye مع جهاز كمبيوتر سطح المكتب بشكلٍ صحيح على بطاقة SD.
  2. يمكنك اختيار إما استخدام بروتوكول النقل الآمن في Raspberry 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 لتحميل وحدة النواة في أجهزة iptable.
    $ 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
    
  • إيقاف Docker لـ OTBR:
    $ docker stop otbr
    
  • إزالة Docker لـ OTBR:
    $ docker rm otbr
    
  • إعادة تحميل Docker: OTBR:
    $ docker restart otbr
    

في هذه المرحلة، أصبح جهاز ضم FTD وOTBR جاهزَين، ويمكنك المتابعة إلى الخطوة التالية لإنشاء شبكة Thread.

6- إنشاء شبكة Thread

إنشاء شبكة Thread Network على RCP

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

$ 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

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

leader
Done

6

dataset active

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











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

إضافة أداة FTD Joiner إلى Thread من خلال التشغيل خارج الإطار

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

الفهرس

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 Joiner 0x8400 بعد الحصول على رقم تعريف جهاز التوجيه. يتضح لنا أنه تمت ترقية أداة FTD Joiner من جهاز ثانوي إلى جهاز توجيه.

تحتوي شبكة 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

أدخل الأمر التالي في وحدة التحكم التسلسلية لـ FTD Joiner لتنفيذ عملية فحص الاتصال.

> 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 استجابة فحص الاتصال التي عرَضها 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 لتفعيل بروتوكول OTBR UDP وربط منفذ 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 بالإضافة إلى تثبيتهما على Telink B91 Development Boards.
  • كيفية إعداد إصدار Raspberry Pi 3B أو الإصدارات الأحدث أو إصدار أعلى كجهاز توجيه الحدود OpenThread (OTBR) باستخدام Docker.
  • كيف يمكن إنشاء شبكة Thread على OTBR.
  • كيفية إضافة أجهزة إلى شبكة Thread من خلال التشغيل خارج النطاق
  • كيفية التحقّق من الاتصال بين العُقد في شبكة Thread

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

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

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