1. Giới thiệu
OpenThread là một cách triển khai nguồn mở của giao thức mạng Thread®. Đây là một giao thức mạng lưới không dây an toàn và mạnh mẽ được thiết kế cho các 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 giao tiếp không dây đáng tin cậy, an toàn và tiết kiệm năng lượng cho các thiết bị tiết kiệm tài nguyên thường thấy trong nhà thông minh và các 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 tương thích liền mạch với phần cứng Telink. Mã nguồn cho tích hợp này có thể dễ dàng truy cập 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 thông báo 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ó Bộ định tuyến đường viền OT (OTBR) và một thiết bị Thread trong lớp học lập trình này.
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-ftd
vàot-rcp
) và cài đặt ROM các mẫu đó lên Ban phát triển Telink B91. - Để thiết lập Bộ định tuyến đường viền OpenThread (OTBR) bằng Docker trên Raspberry Pi 3B+ trở lên.
- Cách tạo mạng Thread 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.
- Để xác thực khả năng kết nối giữa các nút trong mạng Thread bằng CLI.
Bạn cần có
Phần cứng:
- Hai ban phát triển B91.
- Một chiếc Raspberry Pi 3B+ trở lên có Hình ảnh hệ điều hành Raspbian.
- Máy Linux có ít nhất 2 cổng USB.
- Một bộ chuyển đổi (hoặc Bộ định tuyến) được kết nối với Internet và một vài cáp Ethernet.
Phần mềm:
- Công cụ ghi và gỡ lỗi Telink —— LinuxBDT.
- Công cụ đầu cuối cổng nối tiếp, chẳng hạn như PuTTY.
- 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 có thể tham khảo 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ề Luồng và OpenThread CLI trước lớp học lập trình này.
Máy Linux
Máy Linux (Ubuntu v20.04 LTS trở lên) hoạt động như máy xây dựng để thiết lập môi trường phát triển Telink Zephyr và cài đặt ROM tất cả các bo mạch phát triển Thread. Để hoàn thành những nhiệm vụ này, máy Linux cần có hai 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ể cắm trực tiếp thiết bị vào cổng USB của máy Linux. Ngoài ra, bạn cần có một công cụ đầu cuối cổng nối tiếp để truy cập vào các thiết bị.
Trong lớp học lập trình này, bạn có thể dùng công cụ đầu cuối PuTTY để điều khiển FTD Joiner và Raspberry Pi. Công cụ này cung cấp thông tin tổng quan về cách sử dụng phần mềm, nhưng bạn cũng có thể sử dụng các phần mềm thiết bị đầu cuối khác.
Bộ phát triển Telink B91
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 có trong một bộ.
Một trong những bộ này sẽ được dùng làm RCP (Bộ xử lý đồng bộ vô tuyến), trong khi bộ còn lại sẽ hoạt động như FTD (Thiết bị luồng đầy đủ). 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 từ trang web chính thức của Telink. Bạn có thể sử dụng một số thành phần như sau:
Chỉ mục | Tên |
1 | Ban phát triển Telink B91 |
2 | Bảng đốt cháy Telink |
3 | Ăng-ten 2,4 GHz |
4 | Cáp USB (USB A sang USB nhỏ) |
Raspberry Pi 3B+ trở lên với Hình ảnh hệ điều hành Raspbian
Trong lớp học lập trình này, bạn cần có Raspberry Pi 3B trở lên với hình ảnh R Nó được 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 đường biên OpenThread (OTBR).
Kết nối mạng
Một bộ chuyển đổi (hoặc bộ định tuyến) được kết nối với Internet và một vài cáp Ethernet. Chúng được dùng để kết nối Raspberry Pi với máy Linux, hỗ trợ việc định cấu hình Raspberry Pi thông qua máy chủ.
LinuxBDT
Telink Công cụ ghi và gỡ lỗi (BDT), á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 Bảng 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.
Khác
- Git, để thiết lập Môi trường phát triển Telink Zephyr.
- Phía Tây, để quản lý dự án Zephyr và xây dựng các tệp nhị phân OpenThread.
3. Thiết lập chương trình cơ sở
Thiết lập Môi trường phát triển Telink Zephyr
Trên máy Linux, hãy mở một thiết bị đầu cuối CLI rồi bắt đầu bằng cách thực thi các lệnh sau để đả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 thực hiện các bước sau.
- Cài đặt phần phụ thuộc.
Zephyr hiện yêu cầu các 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).$ 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
Hãy 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 một bản sao ổ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.$ cmake --version $ python3 --version $ dtc --version
- Cài đặt tại west.
Hãy đảm bảo rằng$ pip3 install --user -U west $ echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc $ source ~/.bashrc
~/.local/bin
nằm trong biến môi trường$PATH
. - Tải mã nguồn Zephyr Project.
$ west init ~/zephyrproject $ cd ~/zephyrproject $ west update $ west blobs fetch hal_telink $ west zephyr-export
- Cài đặt thêm các phần phụ thuộc Python cho Zephyr.
$ pip3 install --user -r ~/zephyrproject/zephyr/scripts/requirements.txt
- Thiết lập chuỗi công cụ Zephyr. Tải chuỗi công cụ Zephyr (khoảng 1~2 GB) xuống một thư mục cục bộ để bạn có thể cài đặt ROM hầu hết các bảng.
Tải Zephyr SDK xuống và đặt SDK đó vào đường dẫn đề xuất như minh hoạ dưới đây.$ 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
Trong đó [-x.y.z] là văn bản không bắt buộc và 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 này sau khi cài đặt SDK. Sau đó, cài đặt chuỗi công cụ Zephyr.$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
- Tạo ví dụ về Hello World. Trước tiên, hãy xác minh rằng cấu hình dự án Zephyr chính thức là chính xác bằng cách sử dụng ví dụ Hello World (Xin chào thế giới), sau đó tiếp tục thiết lập dự án tuỳ chỉnh của bạn.
Sử dụng lệnh bản dựng West để tạo ví dụ hello_world từ thư mục gốc của kho lưu trữ Zephyr. Bạn có thể tìm thấy chương trình cơ sở có tên$ cd ~/zephyrproject/zephyr $ west build -p auto -b tlsr9518adk80d samples/hello_world
zephyr.bin
trongbuild/zephyr directory
. - Thêm tập lệnh môi trường Zephyr vào
~/.bashrc
. Thực thi các lệnh sau.$ echo "source ~/zephyrproject/zephyr/zephyr-env.sh" >> ~/.bashrc $ source ~/.bashrc
- Thêm kho lưu trữ từ xa Telink Zephyr. Tải kho lưu trữ Telink cục bộ xuống dưới dạng 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 Tài liệu – Hướng dẫn bắt đầu.
Thiết lập Telink LinuxBDT
Tải công cụ Telink LinuxBDT xuống và giải nén công cụ này 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 ~
, cho phép 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 Bảng ghi 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", nó chỉ ra rằng 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
,- và
ot-rcp
.
Sau đây là các phương thức biên dịch:
- Đơn vị đồng xử lý vô tuyến(
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
- Thiết bị luồng đầy đủ tính năng có 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 bằng cáp USB như minh hoạ trong hình bên dưới.
Trong dòng lệnh, hãy thực thi các lệnh sau để ghi chương trình cơ sở (ví dụ: dùng lệnh nhấp nháy của 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
Về cơ bản, phương thức flash cho ot-rcp
giống như phương thức flash của ot-cli-ftd
. Tuy nhiên, có sự khác biệt trong đường dẫn và tên chương trình cơ sở.
Sau khi nhấp nháy, hãy phân biệt hai Bảng phát triển B91 bằng cách đánh dấu chúng tương ứng. Gắn nhãn bảng nhấp nháy với ot-cli-ftd
là "FTD Joiner" và bảng điều khiển 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ị tham gia FTD
Như trong hình, cắm trực tiếp FTD Joiner vào cổng USB của máy Linux.
Sau khi kết nối Thiết bị tham gia FTD với máy Linux, mở PuTTY. Sau đó, tạo một thiết bị đầu cuối mới, thiết lập thông tin cổng nối tiếp và mở cổng nối tiếp.
Tài liệu tham khảo dòng lệnh OpenThread có tại đây: Tài liệu tham khảo về CLI OpenThread. Hãy 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 Raspberry Pi làm bộ định tuyến đường viền OpenThread
Bộ định tuyến đường viền OpenThread là một thiết bị bao gồm hai phần chính:
- Raspberry Pi chứa tất cả dịch vụ và chương trình cơ sở cần thiết để hoạt động như Bộ định tuyến biên (BR).
- RCP chịu trách nhiệm giao tiếp qua 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 như quy trình cài đặt ROM của chương trình cơ sở ot-cli-ftd
. Kết nối Bảng phát triển B91 với cổng USB trên Raspberry Pi, như mô tả trong hình dưới đây.
Mâm xôi Pi
- Hãy đảm bảo rằng hình ảnh hệ điều hành Raspbian
- Bạn có tuỳ chọn để SSH vào Raspberry Pi hoặc làm việc trực tiếp với Máy tính để bàn Raspbian. Lớp học lập trình này sẽ sử dụng SSH.
- Trước khi tiến hành cài đặt OTBR Docker trong 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.
$ sudo apt-get update $ sudp apt-get upgrade
Cài đặt Docker
Nếu bạn chỉ cập nhật APT kho lưu trữ cục bộ và trình quản lý gói ở bước trước, hãy khởi động lại Raspberry Pi rồi mở cửa sổ dòng lệnh SSH.
- Cài đặt Docker:
$ curl -sSL https://get.docker.com | sh
- Đặ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. Bạn cần khởi động lại Raspberry Pi để thiết bị có hiệu lực.$ sudo usermod -aG docker $USER
- Nếu Docker chưa khởi động, hãy khởi động Docker:
$ sudo dockerd
- Các tập lệnh tường lửa OTBR 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 sẽ trực tiếp kéo 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.
- Lấy hình ảnh mới nhất:
$ docker pull openthread/otbr:latest
- 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
- Xác định tên cổng nối tiếp của thiết bị RCP bằng cách kiểm tra
/dev
,ttyACM0
sẽ cho biết RCP được kết nối đúng cách.$ ls /dev/tty* ... /dev/ttyACM0 ...
- Chạy OTBR Docker lần đầu tiên 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 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
- Mở cửa sổ thiết bị đầu cuối SSH mới để kiểm tra khả năng kết nối giữa Raspberry Pi và RCP.
$ docker exec -ti otbr sh -c "sudo ot-ctl" > state disabled Done
Các lệnh docker không bắt buộc:
- Nhận thông tin về vùng chứa Docker đang chạy:
$ docker ps -aq
- Dừng OTBR Docker:
$ docker stop otbr
- Xoá OTBR Docker:
$ docker rm otbr
- Tải lại OTBR Docker:
$ docker restart otbr
Tại thời điểm này, thiết bị FTD Joiner và OTBR đã sẵn sàng, bạn có thể chuyển sang bước tiếp theo để xây dựng mạng Thread.
6. Tạo một mạng Thread
Tạo một mạng Thread trên RCP
Chúng ta 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 cùng, 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ả dự kiến 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 |
| Tạo một tập dữ liệu mạng ngẫu nhiên mới. | Xong | ||
2 |
| Xác nhận 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 |
| Hiển thị giao diện IPv6. | Xong | ||
4 |
| Bật thao tác đối với giao thức Thread và đính kèm vào mạng Thread. | Xong | ||
Chờ 10 giây để giao diện luồng hiển thị. | |||||
5 |
| 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 trở thành lệnh và chuyển sang bước tiếp theo. | leader | ||
6 |
| Hãy kiểm tra Tập dữ liệu hoạt động đang hoạt động hoàn chỉnh và ghi lại khoá mạng. |
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
kết nối với mạng Thread này.
Thêm Trình tham gia FTD vào Thread thông qua hoạt động vận hành ngoài băng tần
Hoạt động chạy ngoài băng tần là hoạt động truyền thông tin đăng nhập mạng sang các thiết bị đang chờ kết nối mạng thông qua các phương thức không phải mạng không dây (ví dụ: nhập thông tin đăng nhập vào OpenThread CLI 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 |
| Thiết bị chỉ cần có Khoá mạng để kết nối với mạng Thread. | Xong | ||
2 |
| Xác nhận 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 |
| Hiển thị giao diện IPv6. | Xong | ||
4 |
| Bật thao tác đối với giao thức Thread và đính kèm vào mạng Thread. | Xong | ||
Chờ 20 giây trong khi thiết bị tự tham gia và định cấu hình. | |||||
5 |
| Kiểm tra trạng thái thiết bị. | trẻ em/bộ định tuyến |
Cấu trúc liên kết
Nhập các lệnh như ipaddr
, child table
, router table
vào thiết bị đầu cuối SSH để nhận được phản hồi như các đoạn mã sau đây.
> 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à 0xb000
và RLOC16
của Trình tham gia FTD ban đầu là 0xb001
. Sau đó, RLOC16
của FTD Joiner trở thành 0x8400
sau khi nhận được mã nhận dạng bộ định tuyến. Có thể thấy rằng FTD Joiner đã được nâng cấp từ con lên bộ định tuyến.
Mạng Thread hiện tại chứa 2 nút và cấu trúc liên kết như minh hoạ trong hình bên dưới.
7. Hoạt động giao tiếp giữa các thiết bị Thread
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 thi 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 chỉ ra rằng 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ề. Giao tiếp giữa hai thiết bị 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 UDP API để truyền thông tin giữa các nút trong mạng Thread hoặc truyền thông tin đến các mạng bên ngoài thông qua Bộ định tuyến biên. Giới thiệu chi tiết về UDP API của OpenThread trong 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 lưới-cục bộ của OTBR. Địa chỉ này cũng là một trong các địa chỉ IPv6 của thiết bị Thread và có thể dùng để truy cập vào 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
có kích thước 5 byte đến 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 thông tin sau. OTBR nhận được thông báo hello
từ Trình kết hợp FTD, tức là quá trình 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 nội dung giao tiếp trong mạng này.
Giờ đây, 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-ftd
vàot-rcp
, cũng như cài đặt ROM chúng lên Bảng phát triển Telink B91. - Cách thiết lập Raspberry Pi 3B+ trở lên dưới dạng OpenThread Border Router (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 quá trình vận hành 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.
Tài liệu đọc thêm
Truy cập vào openthread.io và GitHub để tìm hiểu về nhiều tài nguyên OpenThread, bao gồm:
- Nền tảng được hỗ trợ – khám phá tất cả các nền tảng hỗ trợ OpenThread
- Xây dựng OpenThread – thêm thông tin chi tiết về cách tạo và định cấu hình OpenThread
- Chủ đề Thread mồi – bao gồm tất cả khái niệm về Thread có trong lớp học lập trình này
Tài liệu tham khảo: