Xây dựng mạng luồng với Ban phát triển B91 và OpenThread

1. Giới thiệu

26b7f4f6b3ea0700.png

OpenThread là quy trình triển khai nguồn mở của giao thức mạng Thread®. Đây là giao thức mạng lưới không dây an toàn và mạnh mẽ được thiết kế cho thiết bị Internet của vạn vật (IoT). OpenThread do nhóm Nest của Google phát triển và được cung cấp miễn phí cho cộng đồng nhà phát triển dưới dạng dự án nguồn mở.

Thông số kỹ thuật của luồng thiết lập một giao thức truyền thông không dây đáng tin cậy, bảo mật và tiết kiệm năng lượng cho những thiết bị bị hạn chế về tài nguyên thường thấy trong nhà thông minh và toà nhà thương mại. OpenThread bao gồm phạm vi lớp mạng đầy đủ trong Thread, chẳng hạn như IPv6, 6LoWPAN, IEEE 802.15.4 với bảo mật MAC, thiết lập liên kết lưới và định tuyến lưới.

Telink đã tích hợp phương thức triển khai OpenThread vào Zephyr RTOS, cho phép khả năng tương thích liền mạch với phần cứng Telink. Mã nguồn cho quá trình tích hợp này có sẵn trên GitHub và cũng được cung cấp dưới dạng bộ phát triển phần mềm (SDK).

Trong lớp học lập trình này, bạn sẽ lập trình OpenThread trên phần cứng thực tế, tạo và quản lý mạng Thread cũng như trao đổi tin nhắn giữa các nút. Hình ảnh dưới đây mô tả cách thiết lập phần cứng, trong đó có một Bộ định tuyến đường viền OT (OTBR) và một thiết bị luồng trong lớp học lập trình.

codelab_overview.png

Kiến thức bạn sẽ học được

  • Để thiết lập phương thức triển khai OpenThread bằng môi trường phát triển Telink Zephyr.
  • Để tạo các mẫu OpenThread CLI (ot-cli-ftdot-rcp) và cài đặt ROM chúng vào Bảng phát triển Telink B91.
  • Để thiết lập Bộ định tuyến đường viền OpenThread (OTBR) bằng Docker trên Rassberry Pi 3B+ trở lên.
  • Để tạo mạng luồng trên OTBR.
  • Cách thêm thiết bị vào mạng Thread bằng cách sử dụng tính năng gỡ lỗi ngoài băng tần.
  • Cách xác thực khả năng kết nối giữa các nút trong mạng luồng bằng CLI.

Bạn cần có

Phần cứng:

  • Hai bo mạch phát triển B91.
  • Một quả Mâm xôi Pi 3B trở lên kèm Hình ảnh hệ điều hành Raffbian.
  • Máy Linux có ít nhất 2 cổng USB.
  • Một công tắc (hoặc Bộ định tuyến) có kết nối Internet và một số cáp Ethernet.

Phần mềm:

  • Công cụ gỡ lỗi và ghi Telink —— LinuxBDT.
  • Công cụ thiết bị đầu cuối cho cổng nối tiếp, chẳng hạn như PuYT.
  • Các công cụ khác như Git và West.

2. Điều kiện tiên quyết

Khái niệm về luồng và CLI OpenThread

Bạn nên xem lớp học lập trình Mô phỏng OpenThread để làm quen với các khái niệm cơ bản về Thread và CLI OpenThread trước khi tham gia lớp học lập trình này.

Máy Linux

Máy Linux (Ubuntu v20.04 LTS trở lên) đóng vai trò như máy build để thiết lập môi trường phát triển Telink Zephyr và cài đặt ROM cho tất cả các bảng phát triển Thread. Để thực hiện những việc này, máy Linux cần có 2 cổng USB và kết nối Internet.

Kết nối cổng nối tiếp và thiết bị đầu cuối

Bạn có thể trực tiếp cắm thiết bị vào cổng USB trên máy Linux. Ngoài ra, bạn cần có công cụ thiết bị đầu cuối cho cổng nối tiếp để truy cập vào thiết bị.

Trong lớp học lập trình này, công cụ thiết bị đầu cuối Pu tin được dùng để điều khiển FTD Joiner và Rspberry Pi. Phần mềm này cung cấp thông tin tổng quan về mức sử dụng, ngoài ra bạn cũng có thể sử dụng các phần mềm thiết bị đầu cuối khác.

Lớp học lập trình này cần 2 bộ Bộ phát triển B91. Ảnh dưới đây cho thấy các thành phần tối thiểu cần thiết trong một bộ.

overview.png

Một trong những bộ này sẽ được sử dụng với vai trò là RCP (Đồng xử lý vô tuyến), còn bộ còn lại sẽ hoạt động như FTD (Thiết bị toàn bộ luồng). Nếu chưa sở hữu bộ công cụ này, bạn có thể tìm thêm thông tin chi tiết trên trang web chính thức của Telink. Một số thành phần sẽ được sử dụng như sau:

Chỉ mục

Tên

1

Ban phát triển Telink B91

2

Thớt Telink

3

Ăng-ten 2,4 GHz

4

Cáp USB (USB A đến USB mini)

Hình ảnh Rassberry Pi 3B+ trở lên kèm theo hệ điều hành Rassbian

Trong lớp học lập trình này, bạn cần có một phiên bản Rassberry Pi 3B trở lên với hình ảnh hệ điều hành RASPbian Booseye Lite hoặc hình ảnh R đíchbian Booseye cho máy tính. Thiết bị này kết nối với Internet qua Ethernet và sẽ được định cấu hình làm máy chủ lưu trữ cho Bộ định tuyến biên giới OpenThread (OTBR).

Kết nối mạng

Một công tắc (hoặc bộ định tuyến) có kết nối Internet và một số cáp Ethernet. Các trình xử lý này được dùng để kết nối Rmâm xôi Pi với máy Linux, hỗ trợ người dùng định cấu hình Rassberry Pi thông qua máy chủ.

LinuxBDT

Công cụ ghi và gỡ lỗi (BDT) của Telink, áp dụng cho tất cả các dòng Chip Telink, cho phép bạn xoá và cài đặt ROM chương trình cơ sở OpenThread lên Bo mạch phát triển Telink B91. Cài đặt phiên bản linux dựa trên X86 linuxBDT trên máy Linux của bạn.

Biểu tượng cảm xúc khác

  • Git, để thiết lập Môi trường phát triển Telink Zephyr.
  • West, để quản lý dự án Zephr và tạo các tệp nhị phân OpenThread.

3. Thiết lập chương trình cơ sở

Trên máy Linux, hãy mở một cửa sổ dòng lệnh CLI và bắt đầu bằng cách thực thi các lệnh sau đây để đảm bảo rằng APT của bạn đã được cập nhật.

$ sudo apt update
$ sudo apt upgrade

Sau khi hoàn tất, hãy tiếp tục các bước sau.

  1. Cài đặt các phần phụ thuộc.
    $ 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 hiện yêu cầu phiên bản tối thiểu của các phần phụ thuộc chính, chẳng hạn như CMake (3.20.0), Python3 (3.6) và Devicetree Compiler (1.4.6).
    $ cmake --version
    $ python3 --version
    $ dtc --version
    
    Xác minh các phiên bản đã cài đặt trên hệ thống của bạn trước khi tiếp tục thực hiện các bước tiếp theo. Nếu các phiên bản không chính xác, hãy chuyển bản sao APT sang bản sao chép ổn định và mới nhất, hoặc cập nhật các phần phụ thuộc này theo cách thủ công.
  2. Cài đặt hướng Tây.
    $ pip3 install --user -U west
    $ echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc
    $ source ~/.bashrc
    
    Hãy đảm bảo rằng ~/.local/bin có trong biến môi trường $PATH.
  3. Tải mã nguồn Dự án Zephyr.
    $ west init ~/zephyrproject
    $ cd ~/zephyrproject
    $ west update
    $ west blobs fetch hal_telink
    $ west zephyr-export
    
  4. Cài đặt các phần phụ thuộc Python bổ sung cho Zephyr.
    $ pip3 install --user -r ~/zephyrproject/zephyr/scripts/requirements.txt
    
  5. Thiết lập chuỗi công cụ Zephyr. Tải chuỗi công cụ Zephyr (khoảng 1 đến 2 GB) xuống một thư mục cục bộ để cho phép bạn cài đặt ROM hầu hết các bảng.
    $ 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
    
    Tải SDK Zephyr xuống rồi đặt SDK này vào đường dẫn được đề xuất như minh hoạ bên dưới.
    $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]
    
    Trong đó [-x.y.z] là văn bản không bắt buộc, có thể là văn bản bất kỳ, chẳng hạn như -0.16.1. Bạn không thể di chuyển thư mục sau khi cài đặt SDK. Sau đó, cài đặt chuỗi công cụ 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. Xây dựng ví dụ Hello World (Xin chào thế giới). Trước tiên, hãy kiểm tra để đảm bảo rằng cấu hình chính thức của dự án Zephyr là chính xác bằng cách sử dụng ví dụ Hello World, sau đó tiếp tục thiết lập dự án tuỳ chỉnh của bạn.
    $ cd ~/zephyrproject/zephyr
    $ west build -p auto -b tlsr9518adk80d samples/hello_world
    
    Dùng lệnh tạo bản dựng West để tạo ví dụ hello_world từ thư mục gốc của kho lưu trữ Zephr. Bạn có thể tìm thấy chương trình cơ sở có tên zephyr.bin trong build/zephyr directory.
  7. Thêm tập lệnh môi trường Zephyr vào ~/.bashrc. Thực thi các lệnh sau đây.
    $ echo "source ~/zephyrproject/zephyr/zephyr-env.sh" >> ~/.bashrc
    $ source ~/.bashrc
    
  8. Thêm kho lưu trữ từ xa của Telink Zephyr. Tải kho lưu trữ Telink cục bộ xuống dưới dạng một nhánh phát triển rồi cập nhật kho lưu trữ đó.
    $ 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
    

Để biết thêm thông tin, bạn có thể tham khảo Zephyr Doc – Hướng dẫn bắt đầu sử dụng.

Tải công cụ Telink LinuxBDT xuống rồi giải nén vào một thư mục cục bộ trên máy Linux của bạn, chẳng hạn như thư mục gốc ~, để cài đặt ROM chương trình cơ sở vào Bảng phát triển B91.

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

Kết nối Burning Board với máy Linux qua giao diện USB rồi nhập các lệnh sau.

$ 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

Nếu bạn thấy thông báo "Telink Web Debugger v3.6", thì tức là lập trình viên BDT đã kết nối thành công với máy Linux.

Biên dịch chương trình cơ sở

Lớp học lập trình này sẽ xây dựng 2 loại chương trình cơ sở OpenThread:

  • ot-cli-ftd,
  • ot-rcp.

Các phương thức biên dịch như sau:

  1. Đơn vị đồng xử lý phát thanh (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. Thiết bị luồng đầy đủ tính năng với dòng lệnh tương tác (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
    

Flash của chương trình cơ sở

Kết nối Bảng phát triển B91 với Bảng đốt cháy bằng cáp USB như minh hoạ trong hình dưới đây.

connection_overview.png

Trong dòng lệnh, hãy thực thi các lệnh sau để ghi chương trình cơ sở (ví dụ: sử dụng chế độ cài đặt ROM cho chương trình cơ sở 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

Phương thức flash cho ot-rcp về cơ bản giống như phương thức flash cho ot-cli-ftd. Tuy nhiên, có sự khác biệt trong tên và đường dẫn của chương trình cơ sở.

Sau khi cài đặt ROM, hãy phân biệt 2 Bảng phát triển B91 bằng cách đánh dấu chúng một cách phù hợp. Gắn nhãn bảng hiển thị nhấp nháy với ot-cli-ftd là "FTD Joiner" (Bộ nối FTD) và bảng nhấp nháy ot-rcp là "RCP".

4. Định cấu hình bảng điều khiển nối tiếp cho thiết bị kết hợp FTD

Như trong hình, cắm trực tiếp FTD Joiner vào cổng USB của máy Linux.

usb_connection.png

Sau khi kết nối Thiết bị nối FTD với máy Linux, hãy mở Pu chu kỳ. Sau đó, tạo một thiết bị đầu cuối mới, đặt thông tin cổng nối tiếp và mở cổng nối tiếp.

uart_console.png

Tài liệu tham khảo về dòng lệnh OpenThread có tại đây: Tài liệu tham khảo về OpenThread CLI. Nhớ thêm tiền tố ot vào mọi lệnh.

Ví dụ:

> ot state
disabled
Done
> ot channel
11
Done
>

5. Thiết lập Rassberry Pi làm Bộ định tuyến đường biên OpenThread

Bộ định tuyến đường biên OpenThread là một thiết bị bao gồm hai phần chính:

  • Rassberry Pi chứa tất cả dịch vụ và chương trình cơ sở cần thiết để hoạt động như một Bộ định tuyến biên (BR).
  • RCP chịu trách nhiệm giao tiếp theo luồng.

Đơn vị đồng xử lý vô tuyến (RCP)

Để cài đặt ROM chương trình cơ sở ot-rcp, hãy làm theo các bước tương tự như quy trình cài đặt ROM chương trình cơ sở ot-cli-ftd. Kết nối B91 Development Board với cổng USB trên Rassberry Pi, như mô tả trong hình dưới đây.

OTBR_overview.png

Mâm xôi Pi

  1. Đảm bảo rằng hình ảnh hệ điều hành RASPbian Booseye Lite hoặc hình ảnh RASPbian Booseye cho máy tính để bàn được ghi đúng cách vào thẻ SD.
  2. Bạn có thể tuỳ chọn SSH vào RASPberry Pi hoặc làm việc trực tiếp với RASPbian Desktop. Lớp học lập trình này sẽ sử dụng SSH.
  3. Trước khi tiếp tục cài đặt OTBR Docker ở bước tiếp theo, hãy nhớ cập nhật kho lưu trữ cục bộ và trình quản lý gói trước tiên.
    $ sudo apt-get update
    $ sudp apt-get upgrade
    

Cài đặt Docker

Nếu bạn vừa cập nhật kho lưu trữ cục bộ và trình quản lý gói APT ở bước trước, hãy khởi động lại Rspberry Pi rồi mở cửa sổ dòng lệnh SSH.

  1. Cài đặt Docker:
    $ curl -sSL https://get.docker.com | sh
    
  2. Đặt tài khoản hiện tại vào một nhóm Docker để cấp quyền sao cho không cần thêm sudo vào trước mỗi lệnh.
    $ sudo usermod -aG docker $USER
    
    Bạn cần khởi động lại Râm xôi Pi để có hiệu lực.
  3. Nếu Docker chưa khởi động, hãy khởi động:
    $ sudo dockerd
    
  4. Tập lệnh tường lửa OTBR sẽ tạo các quy tắc bên trong vùng chứa Docker. Trước đó, hãy thực thi modprobe để tải mô-đun nhân của iptables.
    $ sudo modprobe ip6table_filter
    

Định cấu hình và chạy Docker

Lớp học lập trình này trực tiếp lấy hình ảnh Docker OTBR từ OpenThread Docker Hub. Hình ảnh này đã được nhóm OpenThread kiểm tra và xác minh.

  1. Lấy hình ảnh mới nhất:
    $ docker pull openthread/otbr:latest
    
  2. Kiểm tra danh sách hình ảnh trong vùng chứa Docker:
    $ docker images
    REPOSITORY        TAG       IMAGE ID       CREATED      SIZE
    openthread/otbr   latest    db081f4de15f   6 days ago   766MB
    
  3. Xác định tên cổng nối tiếp của thiết bị RCP bằng cách đánh dấu vào /dev, ttyACM0 cho biết RCP được kết nối đúng cách.
    $ ls /dev/tty*
    ...
    /dev/ttyACM0
    ... 
    
  4. Chạy OTBR Docker lần đầu và tham chiếu cổng nối tiếp của RCP (ttyACM0). Nếu bạn muốn tiếp tục sử dụng Docker OTBR này, hãy sử dụng lệnh 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. Mở cửa sổ dòng lệnh SSH mới để kiểm tra khả năng kết nối giữa Rspberry Pi và RCP.
    $ docker exec -ti otbr sh -c "sudo ot-ctl"
    > state 
    disabled
    Done
    

Các lệnh docker tuỳ chọn:

  • Nhận thông tin về vùng chứa Docker đang chạy:
    $ docker ps -aq
    
  • Dừng Docker OTBR:
    $ docker stop otbr
    
  • Xoá Docker OTBR:
    $ docker rm otbr
    
  • Tải lại Docker OTBR:
    $ docker restart otbr
    

Tại thời điểm này, thiết bị FTD Joiner và OTBR đã sẵn sàng, và bạn có thể chuyển sang bước tiếp theo để xây dựng mạng Thread.

6. Tạo mạng chuỗi

Tạo mạng luồng trên RCP

Chúng tôi sử dụng shell ot-ctl trên OTBR để thiết lập mạng Thread. Nếu bạn đã thoát khỏi shell trong phần cuối, hãy nhập lệnh sau để khởi động lại trong thiết bị đầu cuối SSH:

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

Tiếp theo, hãy nhập các lệnh theo thứ tự được chỉ định trong bảng và đảm bảo rằng mỗi bước đều đạt được kết quả như mong đợi trước khi chuyển sang bước tiếp theo.

Chỉ mục

Lệnh

Giới thiệu

Phản hồi dự kiến

1

dataset init new

Tạo một tập dữ liệu mạng ngẫu nhiên mới.

Xong

2

dataset commit active

Đưa tập dữ liệu mới vào Tập dữ liệu hoạt động đang hoạt động trong bộ nhớ bất biến.

Xong

3

ifconfig up

Hiển thị giao diện IPv6.

Xong

4

thread start

Bật thao tác giao thức Thread và đính kèm vào mạng Thread.

Xong

Chờ 10 giây để giao diện luồng hoạt động.

5

state

Kiểm tra trạng thái thiết bị.Lệnh này có thể được gọi nhiều lần cho đến khi lệnh này trở thành lệnh dẫn đầu và chuyển sang bước tiếp theo.

trưởng nhóm
Xong

6

dataset active

Kiểm tra Tập dữ liệu hoạt động hoàn chỉnh và ghi lại khoá mạng.

Dấu thời gian đang hoạt động: 1
Kênh: 13
Mặt nạ kênh: 0x07fff800
Mã PAN bên ngoài: b07476e168eda4fc
Tiền tố cục bộ lưới: fd8c:60bc:a98:c7ba:/64
Mã mạng: c312485187992d2b4ceb5




Khoá mạng do OTBR tạo ngẫu nhiên trong quá trình tạo mạng sẽ được dùng khi thiết bị ot-cli-ftd tham gia mạng luồng này.

Thêm FTD Joiner vào Thread thông qua hoạt động chạy thử ngoài băng tần

Hoạt động thử nghiệm ngoài băng tần là việc truyền thông tin đăng nhập mạng đến các thiết bị đang chờ tham gia mạng thông qua các phương thức không dây (ví dụ: nhập vào CLI OpenThread theo cách thủ công). Nhập các lệnh sau theo thứ tự trong bảng điều khiển nối tiếp vào FTD Joiner.

Chỉ mục

Lệnh

Giới thiệu

Số lượt phản hồi dự kiến

1

ot dataset networkkey c312485187484ceb5992d2343baaf93d

Thiết bị chỉ cần có Khoá mạng để kết nối với mạng Thread.

Xong

2

ot dataset commit active

Đưa tập dữ liệu mới vào Tập dữ liệu hoạt động đang hoạt động trong bộ nhớ bất biến.

Xong

3

ot ifconfig up

Hiển thị giao diện IPv6.

Xong

4

ot thread start

Bật thao tác giao thức Thread và đính kèm vào mạng Thread.

Xong

Đợi 20 giây để thiết bị tự tham gia và tự định cấu hình.

5

ot state

Kiểm tra trạng thái thiết bị.

con/bộ định tuyến
Xong

Cấu trúc liên kết

Nhập các lệnh như ipaddr, child table, router table trong thiết bị đầu cuối SSH để nhận được phản hồi như các đoạn mã sau.

> 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 của OTBR là 0xb000RLOC16 của Trình kết hợp FTD ban đầu là 0xb001. Sau đó, RLOC16 của Bộ kết hợp FTD sẽ trở thành 0x8400 sau khi lấy được Mã bộ định tuyến. Có thể thấy FTD Joiner đã được nâng cấp từ cấu hình con lên bộ định tuyến.

Mạng Thread hiện tại có 2 nút và cấu trúc liên kết như minh hoạ trong hình dưới đây.

topology.png

7. Giao tiếp giữa các thiết bị chuỗi

Giao tiếp ICMPv6

Chúng ta dùng lệnh ping để kiểm tra xem các thiết bị Thread trong cùng một mạng có thể giao tiếp với nhau hay không. Trước tiên, hãy dùng lệnh ipaddr để lấy RLOC của thiết bị.

> 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

Nhập lệnh sau vào bảng điều khiển nối tiếp của FTD Joiner để thực hiện thao tác 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

Phản hồi đầu ra của cổng nối tiếp cho biết phía OTBR đã nhận được yêu cầu ping và FTD Joiner đã nhận được phản hồi ping do OTBR trả về. Hai thiết bị đã kết nối thành công.

Giao tiếp UDP

Các dịch vụ ứng dụng do OpenThread cung cấp cũng bao gồm UDP. Bạn có thể sử dụng API UDP để truyền thông tin giữa các nút trong mạng Thread hoặc truyền thông tin ra các mạng bên ngoài thông qua Bộ định tuyến biên. Phần giới thiệu chi tiết về API UDP của OpenThread có trong OpenThread CLI – UDP Example (Ví dụ về OpenThread CLI – UDP). Lớp học lập trình này sẽ sử dụng một số API trong đó để truyền thông tin giữa OTBR và FTD Joiner.

Trước tiên, hãy lấy EID Mesh-Local của OTBR. Địa chỉ này cũng là một trong những địa chỉ IPv6 của thiết bị Thread và có thể dùng để truy cập các thiết bị Thread trong cùng một phân vùng mạng Thread.

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

Nhập các lệnh sau vào thiết bị đầu cuối SSH để bật OTBR UDP và liên kết cổng 1022 của thiết bị.

> udp open
Done
> udp bind :: 1022
Done

Nhập các lệnh sau vào bảng điều khiển nối tiếp và bật UDP của Trình kết hợp FTD. Liên kết cổng 1022 của thiết bị rồi gửi thông báo hello 5 byte tới OTBR.

> ot udp open 
Done
> ot udp bind :: 1022
Done
> ot udp send fd8c:60bc:a98:c7ba:5249:34ab:26d1:aff6 1022 hello
Done

Thiết bị đầu cuối SSH xuất ra các thông tin sau. OTBR nhận được thông báo hello từ FTD Joiner, điều này có nghĩa là giao tiếp UDP đã thành công.

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

8. Xin chúc mừng

Bạn đã tạo một mạng Thread đơn giản và xác minh hoạt động giao tiếp trong mạng này.

Giờ thì bạn đã biết:

  • Cách xây dựng và sử dụng môi trường phát triển Telink Zephyr.
  • Cách tạo tệp nhị phân ot-cli-ftdot-rcp cũng như cài đặt ROM trên Bảng phát triển Telink B91.
  • Cách thiết lập Rspberry Pi 3B+ phiên bản cao hơn dưới dạng Bộ định tuyến đường biên OpenThread (OTBR) bằng Docker.
  • Cách tạo mạng Thread trên OTBR.
  • Cách thêm thiết bị vào mạng Thread thông qua chế độ cài đặt thử nghiệm ngoài băng tần.
  • Cách xác minh khả năng kết nối giữa các nút trong mạng Thread.

Đọc thêm

Bạn có thể truy cập vào openthread.ioGitHub để tìm hiểu về nhiều tài nguyên về OpenThread, bao gồm:

Tài liệu tham khảo: