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

1. معرفی

26b7f4f6b3ea0700.png

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

The 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 CLI ( ot-cli-ftd و ot-rcp ) و فلش کردن آنها در Telink B91 Development Boards.
  • برای راه اندازی یک روتر مرزی OpenThread (OTBR) با استفاده از Docker در Raspberry Pi 3B+ یا جدیدتر.
  • برای ایجاد یک شبکه Thread در OTBR.
  • برای افزودن دستگاه ها به شبکه Thread با استفاده از اشکال زدایی خارج از باند.
  • برای اعتبارسنجی اتصال بین گره ها در شبکه Thread با استفاده از CLI.

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

سخت افزار:

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

نرم افزار:

  • Telink Burning and Debugg Tool —— LinuxBDT.
  • ابزار ترمینال پورت سریال، مانند PuTTY.
  • ابزارهای دیگری مانند Git و West.

2. پیش نیازها

مفاهیم موضوع و OpenThread CLI

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

ماشین لینوکس

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

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

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

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

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

overview.png

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

فهرست مطالب

نام

1

هیئت توسعه Telink B91

2

تخته سوزاندن Telink

3

آنتن 2.4 گیگاهرتز

4

کابل USB (USB A تا mini USB)

Raspberry Pi 3B+ یا بالاتر با Raspbian OS Image

در این کد، یک Raspberry Pi 3B+ یا بالاتر با تصویر Raspbian Bullseye Lite OS یا Raspbian Bullseye با Desktop مورد نیاز است. از طریق اترنت به اینترنت متصل است و به عنوان میزبان برای روتر مرزی OpenThread (OTBR) پیکربندی خواهد شد.

اتصال شبکه

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

LinuxBDT

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

دیگران

  • Git، برای راه اندازی Telink Zephyr Development Environment.
  • West، برای مدیریت پروژه Zephyr و ساخت باینری های OpenThread.

3. Firmware را تنظیم کنید

در دستگاه لینوکس، یک ترمینال 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]
    
    جایی که [-xyz] متن اختیاری است که می تواند هر متنی باشد، مانند -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. مخزن Remote 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 – Getting Started Guide مراجعه کنید.

ابزار 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. رادیو Co-Processor ( 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 Joiner پیکربندی کنید

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

usb_connection.png

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

uart_console.png

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

مثال ها:

> ot state
disabled
Done
> ot channel
11
Done
>

5. Raspberry Pi را به عنوان یک OpenThread Border Router راه اندازی کنید

روتر مرزی 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 with Desktop به درستی روی کارت 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 قوانینی را در داخل کانتینر داکر تولید می کنند. قبل از آن، modprobe برای بارگذاری ماژول هسته 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 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. یک شبکه موضوعی ایجاد کنید

یک شبکه موضوعی در 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

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

رهبر
انجام شده

6

dataset active

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

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

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

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

راه اندازی خارج از باند به انتقال اعتبار شبکه به دستگاه هایی که منتظر پیوستن به شبکه از طریق روش های غیر بی سیم هستند (مثلاً وارد کردن دستی در OpenThread CLI) اشاره دارد. دستورات زیر را به ترتیب در کنسول سریال 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

وضعیت دستگاه را بررسی کنید.

کودک/روتر
انجام شده

توپولوژی

دستوراتی مانند 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. ارتباط بین دستگاه های موضوع

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

ابتدا EID Mesh-Local 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 ، از جمله:

  • پلتفرم های پشتیبانی شده - تمام پلتفرم هایی که از OpenThread پشتیبانی می کنند را کشف کنید
  • ساخت OpenThread - جزئیات بیشتر در مورد ساخت و پیکربندی OpenThread
  • Thread Primer - تمام مفاهیم Thread را که در این نرم افزار کد ارائه شده است، پوشش می دهد

اسناد مرجع: