با بورد توسعه B91 و OpenThread یک شبکه Thread بسازید

۱. مقدمه

۲۶b7f4f6b3ea0700.png

OpenThread یک پیاده‌سازی متن‌باز از پروتکل شبکه Thread® است که یک پروتکل شبکه مش بی‌سیم قوی و امن است که برای دستگاه‌های اینترنت اشیا (IoT) طراحی شده است. OpenThread توسط تیم Nest گوگل توسعه داده شده و به عنوان یک پروژه متن‌باز به صورت رایگان در دسترس جامعه توسعه‌دهندگان قرار دارد.

مشخصات 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.
  • برای راه‌اندازی یک روتر مرزی OpenThread (OTBR) با استفاده از Docker روی Raspberry Pi 3B+ یا بالاتر.
  • برای ایجاد یک شبکه Thread در OTBR.
  • برای افزودن دستگاه‌ها به شبکه Thread با استفاده از اشکال‌زدایی خارج از باند.
  • برای اعتبارسنجی اتصال بین گره‌ها در شبکه Thread با استفاده از CLI.

آنچه نیاز دارید

سخت‌افزار:

  • دو برد توسعه B91.
  • یک رزبری پای 3B+ یا بالاتر با ایمیج سیستم عامل Raspbian.
  • یک دستگاه لینوکس با حداقل دو پورت USB.
  • یک سوئیچ (یا روتر) متصل به اینترنت و چندین کابل اترنت.

نرم‌افزار:

  • ابزار رایت و اشکال‌زدایی Telink —— LinuxBDT.
  • ابزار ترمینال پورت سریال، مانند PuTTY.
  • ابزارهای دیگری مانند Git و West.

۲. پیش‌نیازها

مفاهیم نخ و رابط خط فرمان OpenThread

شاید مفید باشد که قبل از این آزمایشگاه کد، آزمایشگاه کد شبیه‌سازی OpenThread را بررسی کنید تا با مفاهیم اساسی Thread و رابط خط فرمان OpenThread آشنا شوید.

ماشین لینوکس

دستگاه لینوکس (اوبونتو نسخه 20.04 LTS یا بالاتر) به عنوان دستگاه سازنده برای راه‌اندازی محیط توسعه Telink Zephyr و فلش کردن تمام بردهای توسعه Thread عمل می‌کند. برای انجام این وظایف، دستگاه لینوکس به دو پورت USB موجود و اتصال به اینترنت نیاز دارد.

اتصال پورت سریال و پایانه‌ها

شما می‌توانید دستگاه را مستقیماً به پورت USB دستگاه لینوکس وصل کنید. علاوه بر این، برای دسترسی به دستگاه‌ها به یک ابزار ترمینال پورت سریال نیاز خواهید داشت.

در این آزمایشگاه کد، از ابزار ترمینال PuTTY برای کنترل FTD Joiner و Raspberry Pi استفاده شده است. این ابزار مروری بر کاربرد آن ارائه می‌دهد، اما می‌توان از سایر نرم‌افزارهای ترمینال نیز استفاده کرد.

این آزمایشگاه کد به دو مجموعه کیت توسعه B91 نیاز دارد. عکس زیر حداقل اجزای مورد نیاز در یک مجموعه را نشان می‌دهد.

نمای کلی.png

یکی از این کیت‌ها به عنوان RCP (کمک پردازنده رادیویی) و دیگری به عنوان FTD (دستگاه رشته‌ای کامل) عمل خواهد کرد. اگر هنوز این کیت را در اختیار ندارید، می‌توانید جزئیات بیشتر را از وب‌سایت رسمی Telink دریافت کنید. برخی از اجزای مورد استفاده به شرح زیر است:

فهرست

نام

۱

برد توسعه Telink B91

۲

تخته سوزان تلینک

۳

آنتن ۲.۴ گیگاهرتز

۴

کابل USB (USB A به مینی USB)

رزبری پای ۳B+ یا بالاتر با ایمیج سیستم عامل Raspbian

در این آزمایشگاه کد، به یک رزبری پای 3B+ یا بالاتر با ایمیج سیستم عامل Raspbian Bullseye Lite یا Raspbian Bullseye با دسکتاپ نیاز است. این کامپیوتر از طریق اترنت به اینترنت متصل شده و به عنوان میزبان برای OpenThread Border Router (OTBR) پیکربندی خواهد شد.

اتصال شبکه

یک سوئیچ (یا روتر) متصل به اینترنت و چندین کابل اترنت. از آنها برای اتصال رزبری پای به دستگاه لینوکس استفاده می‌شود و پیکربندی رزبری پای توسط کاربر را از طریق میزبان تسهیل می‌کند.

لینوکسBDT

ابزار رایت و اشکال‌زدایی Telink (BDT) ، که برای همه سری‌های تراشه Telink اعمال می‌شود، به شما امکان می‌دهد تا میان‌افزار OpenThread را پاک کرده و روی بردهای توسعه Telink B91 فلش کنید. نسخه لینوکس مبتنی بر X86 linuxBDT را روی دستگاه لینوکس خود نصب کنید.

دیگران

  • گیت، برای راه‌اندازی محیط توسعه Telink Zephyr.
  • وست، برای مدیریت پروژه Zephyr و ساخت فایل‌های باینری OpenThread.

۳. تنظیم میان‌افزار

در دستگاه لینوکس، یک ترمینال 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 (حدود ۱ تا ۲ گیگابایت) را در یک دایرکتوری محلی دانلود کنید تا بتوانید اکثر بردها را فلش کنید.
    $ 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]
    
    که در آن [-xyz] متن اختیاری است که می‌تواند هر متنی باشد، مانند -0.16.1. این دایرکتوری پس از نصب SDK قابل انتقال نیست. سپس ابزار Zephyr toolchain را نصب کنید.
    $ 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 را بسازید. ابتدا با استفاده از مثال Hello World، صحت پیکربندی رسمی پروژه Zephyr را تأیید کنید، سپس به تنظیم پروژه سفارشی خود ادامه دهید.
    $ 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 Doc - راهنمای شروع به کار مراجعه کنید.

ابزار Telink LinuxBDT را دانلود کنید و آن را در یک دایرکتوری محلی روی دستگاه لینوکس خود، مانند دایرکتوری خانگی ~ ، استخراج کنید تا بتوانید فریمور را روی برد توسعه B91 فلش کنید.

$ cd ~
$ wget http://wiki.telink-semi.cn/tools_and_sdk/Tools/BDT/LinuxBDT.tar.bz2
$ tar -vxf LinuxBDT.tar.bz2 

Burning Board را از طریق رابط 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 با موفقیت به دستگاه لینوکس متصل شده است.

کامپایل میان‌افزار

این آزمایشگاه کد دو نوع میان‌افزار 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 را با استفاده از کابل USB به برد Burning وصل کنید.

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" برچسب‌گذاری کنید.

۴. پیکربندی کنسول سریال برای دستگاه FTD Joiner

همانطور که در تصویر نشان داده شده است، FTD Joiner را مستقیماً به پورت USB دستگاه لینوکس وصل کنید.

اتصال_usb.png

پس از اتصال دستگاه FTD Joiner به دستگاه لینوکس، PuTTY را باز کنید. سپس یک ترمینال جدید ایجاد کنید، اطلاعات پورت سریال را تنظیم کنید و پورت سریال را باز کنید.

uart_console.png

مرجع خط فرمان OpenThread اینجاست: مرجع CLI OpenThread . حتماً همه دستورات را با پیشوند ot شروع کنید.

مثال‌ها:

> ot state
disabled
Done
> ot channel
11
Done
>

۵. رزبری پای را به عنوان یک روتر مرزی OpenThread تنظیم کنید

یک روتر مرزی OpenThread دستگاهی است که از دو بخش اصلی تشکیل شده است:

  • رزبری پای شامل تمام سرویس‌ها و میان‌افزار مورد نیاز برای عمل به عنوان یک روتر مرزی (BR) است.
  • RCP مسئول ارتباطات Thread است.

کمک پردازنده رادیویی (RCP)

برای فلش کردن فریمور ot-rcp ، همان مراحل فلش کردن فریمور ot-cli-ftd را دنبال کنید. برد توسعه B91 را همانطور که در شکل زیر نشان داده شده است، به پورت USB روی رزبری پای وصل کنید.

نمای کلی OTBR.png

رزبری پای

  1. مطمئن شوید که ایمیج سیستم عامل Raspbian Bullseye Lite یا Raspbian Bullseye with Desktop به درستی روی کارت SD رایت شده است.
  2. شما می‌توانید یا از طریق SSH به رزبری پای متصل شوید یا مستقیماً با دسکتاپ رزبین کار کنید. این آزمایشگاه کد از SSH استفاده خواهد کرد.
  3. قبل از شروع نصب OTBR Docker در مرحله بعد، ابتدا مطمئن شوید که مخزن محلی و مدیر بسته را به‌روزرسانی کرده‌اید.
    $ sudo apt-get update
    $ sudp apt-get upgrade
    

نصب داکر

اگر در مرحله قبل فقط مخزن محلی و مدیر بسته APT را به‌روزرسانی کرده‌اید، رزبری پای را مجدداً راه‌اندازی کنید و سپس یک پنجره ترمینال SSH باز کنید.

  1. نصب داکر:
    $ curl -sSL https://get.docker.com | sh
    
  2. حساب کاربری فعلی را در یک گروه Docker قرار دهید تا مجوز لازم را دریافت کنید و دیگر نیازی به اضافه کردن sudo قبل از هر دستور نباشد.
    $ sudo usermod -aG docker $USER
    
    برای اعمال تغییرات، باید رزبری پای را مجدداً راه‌اندازی کنید.
  3. اگر داکر شروع نشده است، آن را شروع کنید:
    $ sudo dockerd
    
  4. اسکریپت‌های فایروال OTBR قوانینی را درون کانتینر Docker ایجاد می‌کنند. قبل از آن، modprobe را برای بارگذاری ماژول هسته iptables اجرا کنید.
    $ sudo modprobe ip6table_filter
    

پیکربندی و اجرای داکر

این آزمایشگاه کد، تصویر OTBR Docker را مستقیماً از OpenThread Docker Hub دریافت می‌کند. این تصویر توسط تیم OpenThread آزمایش و تأیید شده است.

  1. آخرین تصویر را بکشید:
    $ docker pull openthread/otbr:latest
    
  2. لیست تصاویر موجود در کانتینر داکر را بررسی کنید:
    $ 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. برای آزمایش اتصال بین رزبری پای و RCP، یک پنجره ترمینال SSH جدید باز کنید.
    $ docker exec -ti otbr sh -c "sudo ot-ctl"
    > state 
    disabled
    Done
    

دستورات اختیاری داکر:

  • دریافت اطلاعات در مورد کانتینر داکر در حال اجرا:
    $ docker ps -aq
    
  • متوقف کردن داکر OTBR:
    $ docker stop otbr
    
  • حذف داکر OTBR:
    $ docker rm otbr
    
  • بارگذاری مجدد داکر OTBR:
    $ docker restart otbr
    

در این مرحله، یک دستگاه FTD Joiner و یک OTBR آماده هستند و می‌توانید به مرحله بعدی برای ساخت شبکه Thread بروید.

۶. ایجاد یک شبکه نخ (Thread Network)

ایجاد یک شبکه Thread در RCP

ما از پوسته ot-ctl در OTBR برای ایجاد یک شبکه Thread استفاده می‌کنیم. اگر در بخش قبل از پوسته خارج شدید، دستور زیر را برای شروع مجدد آن در ترمینال SSH وارد کنید:

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

سپس، دستورات را به ترتیب مشخص شده در جدول وارد کنید و قبل از رفتن به مرحله بعدی، مطمئن شوید که هر مرحله به نتیجه مورد انتظار می‌رسد.

فهرست

فرماندهی

مقدمه

پاسخ مورد انتظار

۱

dataset init new

یک مجموعه داده شبکه تصادفی جدید ایجاد کنید.

انجام شد

۲

dataset commit active

مجموعه داده جدید را به مجموعه داده عملیاتی فعال در حافظه غیرفرار اختصاص دهید.

انجام شد

۳

ifconfig up

رابط IPv6 را باز کنید.

انجام شد

۴

thread start

فعال کردن عملیات پروتکل Thread و اتصال به یک شبکه Thread.

انجام شد

10 ثانیه صبر کنید تا رابط thread فعال شود.

۵

state

وضعیت دستگاه را بررسی کنید. این دستور می‌تواند چندین بار فراخوانی شود تا زمانی که به رهبر تبدیل شود و به مرحله بعدی برود.

رهبر
انجام شد

۶

dataset active

مجموعه داده‌های عملیاتی فعال و کلید شبکه رکورد را به‌طور کامل بررسی کنید.

مهر زمانی فعال: ۱
کانال: ۱۳
ماسک کانال: 0x07fff800
شناسه PAN داخلی: b07476e168eda4fc
پیشوند محلی مش: fd8c:60bc:a98:c7ba::/64
کلید شبکه: c312485187484ceb5992d2343baaf93d
نام شبکه: OpenThread-599c
شناسه PAN: 0x599c
PSKc: 04f79ad752e8401a1933486c95299f60
سیاست امنیتی: ۶۷۲ onrc ۰
انجام شد

کلید شبکه‌ای که به طور تصادفی توسط OTBR در طول ایجاد شبکه تولید می‌شود، هنگام اتصال دستگاه‌های ot-cli-ftd به این شبکه Thread استفاده خواهد شد.

اضافه کردن FTD Joiner به Thread از طریق راه‌اندازی خارج از باند

راه‌اندازی خارج از باند به انتقال اعتبارنامه‌های شبکه به دستگاه‌هایی که منتظر پیوستن به شبکه هستند از طریق روش‌های غیر بی‌سیم (به عنوان مثال، وارد کردن دستی در OpenThread CLI) اشاره دارد. دستورات زیر را به ترتیب در کنسول سریال به FTD Joiner وارد کنید.

فهرست

فرماندهی

مقدمه

پاسخ‌های مورد انتظار

۱

ot dataset networkkey c312485187484ceb5992d2343baaf93d

فقط کلید شبکه برای اتصال یک دستگاه به شبکه Thread ضروری است.

انجام شد

۲

ot dataset commit active

مجموعه داده جدید را به مجموعه داده عملیاتی فعال در حافظه غیرفرار اختصاص دهید.

انجام شد

۳

ot ifconfig up

رابط IPv6 را باز کنید.

انجام شد

۴

ot thread start

فعال کردن عملیات پروتکل Thread و اتصال به یک شبکه Thread.

انجام شد

۲۰ ثانیه صبر کنید تا دستگاه متصل شده و خودش را پیکربندی کند.

۵

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 Joiner در ابتدا 0xb001 است. سپس RLOC16 مربوط به FTD Joiner پس از دریافت شناسه روتر، به 0x8400 تبدیل می‌شود. می‌توان مشاهده کرد که FTD Joiner از یک فرزند به یک روتر ارتقا یافته است.

شبکه Thread فعلی شامل دو گره است و توپولوژی آن همانطور که در شکل زیر نشان داده شده است.

توپولوژی.png

۷. ارتباط بین دستگاه‌های 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 وارد کنید.

> 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 نیز می‌شوند. می‌توانید از API مربوط به UDP برای انتقال اطلاعات بین گره‌ها در شبکه Thread یا انتقال اطلاعات به شبکه‌های خارجی از طریق Border Router استفاده کنید. معرفی دقیق API مربوط به UDP در OpenThread CLI - UDP Example آمده است. این آزمایشگاه کد از برخی از APIهای موجود در آن برای انتقال اطلاعات بین OTBR و FTD Joiner استفاده خواهد کرد.

ابتدا، EID مش-محلی OTBR را دریافت کنید. این آدرس همچنین یکی از آدرس‌های IPv6 دستگاه Thread است و می‌توان از آن برای دسترسی به دستگاه‌های Thread در همان پارتیشن شبکه Thread استفاده کرد.

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

دستورات زیر را در ترمینال SSH وارد کنید تا OTBR UDP فعال شود و پورت ۱۰۲۲ دستگاه متصل شود.

> udp open
Done
> udp bind :: 1022
Done

دستورات زیر را در کنسول سریال وارد کنید و UDP مربوط به FTD Joiner را فعال کنید. پورت ۱۰۲۲ دستگاه را متصل کنید و سپس یک پیام hello با طول ۵ بایت به 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

۸. تبریک

شما یک شبکه Thread ساده ایجاد کرده‌اید و ارتباط درون این شبکه را تأیید کرده‌اید.

حالا می‌دانید:

  • نحوه ساخت و استفاده از محیط توسعه Telink Zephyr.
  • نحوه ساخت فایل‌های باینری ot-cli-ftd و ot-rcp و همچنین فلش کردن آنها روی بردهای توسعه Telink B91.
  • نحوه تنظیم Raspberry Pi نسخه 3B+ یا بالاتر به عنوان روتر مرزی OpenThread (OTBR) با استفاده از Docker.
  • نحوه ایجاد یک شبکه Thread در OTBR.
  • نحوه اضافه کردن دستگاه‌ها به شبکه Thread از طریق راه‌اندازی خارج از باند.
  • نحوه تأیید اتصال بین گره‌ها در شبکه Thread.

مطالعه بیشتر

برای آشنایی با منابع مختلف OpenThread، از جمله موارد زیر، به openthread.io و GitHub مراجعه کنید:

اسناد مرجع: