۱. مقدمه

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 در آزمایشگاه کد است.

آنچه یاد خواهید گرفت
- برای تنظیم پیادهسازی 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 استفاده شده است. این ابزار مروری بر کاربرد آن ارائه میدهد، اما میتوان از سایر نرمافزارهای ترمینال نیز استفاده کرد.
کیت توسعه Telink B91
این آزمایشگاه کد به دو مجموعه کیت توسعه B91 نیاز دارد. عکس زیر حداقل اجزای مورد نیاز در یک مجموعه را نشان میدهد.

یکی از این کیتها به عنوان 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.
۳. تنظیم میانافزار
راهاندازی محیط توسعه Telink Zephyr
در دستگاه لینوکس، یک ترمینال CLI باز کنید و با اجرای دستورات زیر شروع کنید تا مطمئن شوید که 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
- غرب نصب کنید.
مطمئن شوید که$ 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
- وابستگیهای اضافی پایتون را برای Zephyr نصب کنید.
$ pip3 install --user -r ~/zephyrproject/zephyr/scripts/requirements.txt
- مجموعه ابزار Zephyr را تنظیم کنید. مجموعه ابزار Zephyr (حدود ۱ تا ۲ گیگابایت) را در یک دایرکتوری محلی دانلود کنید تا بتوانید اکثر بردها را فلش کنید.
Zephyr SDK را دانلود کنید و آن را در مسیر پیشنهادی، مانند تصویر زیر، قرار دهید.$ 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
که در آن [-xyz] متن اختیاری است که میتواند هر متنی باشد، مانند -0.16.1. این دایرکتوری پس از نصب SDK قابل انتقال نیست. سپس ابزار Zephyr toolchain را نصب کنید.$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 را بسازید. ابتدا با استفاده از مثال Hello World، صحت پیکربندی رسمی پروژه Zephyr را تأیید کنید، سپس به تنظیم پروژه سفارشی خود ادامه دهید.
از دستور 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 Doc - راهنمای شروع به کار مراجعه کنید.
راهاندازی Telink LinuxBDT
ابزار 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.
روشهای کامپایل به شرح زیر است:
- کمک پردازنده رادیویی (
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
- دستگاه رشتهای با امکانات کامل و خط فرمان تعاملی (
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 وصل کنید.

در خط فرمان، دستورات زیر را برای رایت کردن فریمور اجرا کنید (به عنوان مثال، از فلش کردن فریمور 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 دستگاه لینوکس وصل کنید.

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

مرجع خط فرمان 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 روی رزبری پای وصل کنید.

رزبری پای
- مطمئن شوید که ایمیج سیستم عامل Raspbian Bullseye Lite یا Raspbian Bullseye with Desktop به درستی روی کارت SD رایت شده است.
- شما میتوانید یا از طریق SSH به رزبری پای متصل شوید یا مستقیماً با دسکتاپ رزبین کار کنید. این آزمایشگاه کد از SSH استفاده خواهد کرد.
- قبل از شروع نصب OTBR Docker در مرحله بعد، ابتدا مطمئن شوید که مخزن محلی و مدیر بسته را بهروزرسانی کردهاید.
$ sudo apt-get update $ sudp apt-get upgrade
نصب داکر
اگر در مرحله قبل فقط مخزن محلی و مدیر بسته APT را بهروزرسانی کردهاید، رزبری پای را مجدداً راهاندازی کنید و سپس یک پنجره ترمینال SSH باز کنید.
- نصب داکر:
$ curl -sSL https://get.docker.com | sh
- حساب کاربری فعلی را در یک گروه Docker قرار دهید تا مجوز لازم را دریافت کنید و دیگر نیازی به اضافه کردن
sudoقبل از هر دستور نباشد. برای اعمال تغییرات، باید رزبری پای را مجدداً راهاندازی کنید.$ sudo usermod -aG docker $USER
- اگر داکر شروع نشده است، آن را شروع کنید:
$ sudo dockerd
- اسکریپتهای فایروال OTBR قوانینی را درون کانتینر Docker ایجاد میکنند. قبل از آن،
modprobeرا برای بارگذاری ماژول هسته iptables اجرا کنید.$ sudo modprobe ip6table_filter
پیکربندی و اجرای داکر
این آزمایشگاه کد، تصویر OTBR Docker را مستقیماً از OpenThread Docker Hub دریافت میکند. این تصویر توسط تیم OpenThread آزمایش و تأیید شده است.
- آخرین تصویر را بکشید:
$ docker pull openthread/otbr:latest
- لیست تصاویر موجود در کانتینر داکر را بررسی کنید:
$ 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
- برای آزمایش اتصال بین رزبری پای و 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"
سپس، دستورات را به ترتیب مشخص شده در جدول وارد کنید و قبل از رفتن به مرحله بعدی، مطمئن شوید که هر مرحله به نتیجه مورد انتظار میرسد.
فهرست | فرماندهی | مقدمه | پاسخ مورد انتظار | ||
۱ | | یک مجموعه داده شبکه تصادفی جدید ایجاد کنید. | انجام شد | ||
۲ | | مجموعه داده جدید را به مجموعه داده عملیاتی فعال در حافظه غیرفرار اختصاص دهید. | انجام شد | ||
۳ | | رابط IPv6 را باز کنید. | انجام شد | ||
۴ | | فعال کردن عملیات پروتکل Thread و اتصال به یک شبکه Thread. | انجام شد | ||
10 ثانیه صبر کنید تا رابط thread فعال شود. | |||||
۵ | | وضعیت دستگاه را بررسی کنید. این دستور میتواند چندین بار فراخوانی شود تا زمانی که به رهبر تبدیل شود و به مرحله بعدی برود. | رهبر | ||
۶ | | مجموعه دادههای عملیاتی فعال و کلید شبکه رکورد را بهطور کامل بررسی کنید. | مهر زمانی فعال: ۱ | ||
کلید شبکهای که به طور تصادفی توسط OTBR در طول ایجاد شبکه تولید میشود، هنگام اتصال دستگاههای ot-cli-ftd به این شبکه Thread استفاده خواهد شد.
اضافه کردن FTD Joiner به Thread از طریق راهاندازی خارج از باند
راهاندازی خارج از باند به انتقال اعتبارنامههای شبکه به دستگاههایی که منتظر پیوستن به شبکه هستند از طریق روشهای غیر بیسیم (به عنوان مثال، وارد کردن دستی در OpenThread CLI) اشاره دارد. دستورات زیر را به ترتیب در کنسول سریال به FTD Joiner وارد کنید.
فهرست | فرماندهی | مقدمه | پاسخهای مورد انتظار | ||
۱ | | فقط کلید شبکه برای اتصال یک دستگاه به شبکه Thread ضروری است. | انجام شد | ||
۲ | | مجموعه داده جدید را به مجموعه داده عملیاتی فعال در حافظه غیرفرار اختصاص دهید. | انجام شد | ||
۳ | | رابط IPv6 را باز کنید. | انجام شد | ||
۴ | | فعال کردن عملیات پروتکل Thread و اتصال به یک شبکه Thread. | انجام شد | ||
۲۰ ثانیه صبر کنید تا دستگاه متصل شده و خودش را پیکربندی کند. | |||||
۵ | | وضعیت دستگاه را بررسی کنید. | کودک/روتر | ||
توپولوژی
دستوراتی مانند 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 فعلی شامل دو گره است و توپولوژی آن همانطور که در شکل زیر نشان داده شده است.

۷. ارتباط بین دستگاههای 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 مراجعه کنید:
- پلتفرمهای پشتیبانیشده - تمام پلتفرمهایی که از OpenThread پشتیبانی میکنند را کشف کنید
- ساخت OpenThread — جزئیات بیشتر در مورد ساخت و پیکربندی OpenThread
- مقدمهای بر Thread - تمام مفاهیم Thread که در این آزمایشگاه کد ارائه شده است را پوشش میدهد.
اسناد مرجع: