Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Xây dựng mạng Thread với nRF52840 và bảng OpenThread

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

1. Giới thiệu

26b7f4f6b3ea0700.png.

OpenThread do Google phát hành là phương thức triển khai nguồn mở của giao thức mạng Thread®. Google Nest đã phát hành OpenThread để cung cấp rộng rãi công nghệ có sẵn trong các sản phẩm Nest cho các nhà phát triển nhằm đẩy nhanh quá trình phát triển các sản phẩm cho ngôi nhà thông minh.

Đặc tả luồng xác định một giao thức kết nối thiết bị không dây với độ tin cậy, bảo mật và thấp, dựa trên IPv6 cho các ứng dụng trong nhà. OpenThread triển khai tất cả các lớp mạng Thread bao gồm IPv6, 6LoWPAN, IEEE 802.15.4 với tính năng bảo mật MAC, Thiết lập lưới liên kết và Định tuyến lưới.

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ạo và quản lý mạng Luồng và truyền thông báo giữa các nút.

4806d16a8c137c6d.jpeg

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

  • Xây dựng và cài đặt tệp nhị phân OpenThread CLI nhị phân với bảng phát triển
  • Xây dựng một RCP bao gồm một máy Linux và một bảng phát triển
  • Giao tiếp với một RCP bằng OpenThread Daemon và ot-ctl
  • Quản lý các nút Luồng theo cách thủ công bằng Màn hình GNU và CLI OpenThread
  • Ủy quyền an toàn cho các thiết bị trong Mạng luồng
  • Cách hoạt động của tính năng phát đa hướng IPv6
  • Chuyển thông báo giữa các nút Luồng bằng UDP

Những gì bạn cần

Phần cứng:

  • 3 bảng phát triển Bắc Âu Bán dẫn nRF52840
  • 3 cáp USB với Micro-USB để kết nối các bo mạch
  • Máy Linux có ít nhất 3 cổng USB

Phần mềm:

  • Chuỗi công cụ GNU
  • Công cụ dòng lệnh nRF5x của Bắc Âu
  • Phần mềm Segger J-Link
  • OpenThread
  • Git

2. Bắt đầu

Mô phỏng OpenThread

Trước khi bắt đầu, bạn nên xem qua 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à CThread OpenThread.

Thiết bị đầu cuối cổng nối tiếp

Bạn cần nắm được cách kết nối với cổng nối tiếp thông qua thiết bị đầu cuối. Lớp học lập trình này sử dụng GNU Screen và cung cấp thông tin tổng quan về cách sử dụng, nhưng bạn có thể sử dụng bất kỳ phần mềm đầu cuối nào khác.

Máy Linux

Lớp học lập trình này được thiết kế để sử dụng máy Linux dựa trên i386 hoặc x86 để làm máy chủ lưu trữ cho thiết bị Luồng (CoCP) của Radio (Bộ xử lý vô tuyến) (RCP) và để cài đặt ROM tất cả các bảng phát triển Thread. Tất cả các bước đã được thử nghiệm trên Ubuntu 14.04.5 LTS (Trusty Tahr).

Bo mạch bán dẫn Bắc Âu nRF52840

Lớp học lập trình này sử dụng 3 bảng nRF52840 PDK.

a6693da3ce213856.png.

Chúng tôi sử dụng SEGGER J-Link để lập trình các bảng nRF52840 có các mô-đun JTAG tích hợp. Cài đặt tính năng này trên máy Linux của bạn.

Tải gói phù hợp cho máy của bạn xuống và cài đặt vào đúng vị trí. Trên Linux, đây là /opt/SEGGER/JLink.

Cài đặt công cụ dòng lệnh nRF5x

Công cụ dòng lệnh nRF5x cho phép bạn cài đặt các tệp nhị phân OpenThread vào bảng nRF52840. Cài đặt nRF5x-Command-Line-Tools-<OS&gt thích hợp; xây dựng trên máy Linux của bạn.

Đặt gói đã giải nén vào thư mục gốc ~/

Cài đặt chuỗi công cụ ARM GNU

Chuỗi công cụ ARM GNU được dùng để xây dựng.

Bạn nên đặt tệp lưu trữ đã trích xuất trong /opt/gnu-mcu-eclipse/arm-none-eabi-gcc/ trên máy Linux. Làm theo hướng dẫn trong tệp lưu trữ readme.txt để biết hướng dẫn cài đặt.

Màn hình cài đặt (không bắt buộc)

Màn hình là một công cụ đơn giản giúp truy cập các thiết bị kết nối bằng cổng nối tiếp. Lớp học lập trình này sử dụng Màn hình, nhưng bạn có thể sử dụng bất kỳ ứng dụng đầu cuối cổng nối tiếp nào mà bạn muốn.

$ sudo apt-get install screen

3. Nhân bản kho lưu trữ

OpenThread

Nhân bản và cài đặt OpenThread. Các lệnh script/bootstrap đảm bảo chuỗi công cụ được cài đặt và môi trường được định cấu hình đúng cách:

$ mkdir -p ~/src
$ cd ~/src
$ git clone --recursive https://github.com/openthread/openthread.git
$ cd openthread
$ ./script/bootstrap

Xây dựng trình nền OpenThread Daemon:

$ script/cmake-build posix -DOT_DAEMON=ON

Bây giờ, bạn đã sẵn sàng xây dựng và cài đặt OpenThread cho bảng mạch nRF52840.

4. Thiết lập Máy ghép nối RCP

Bản dựng và flash

Tạo ví dụ OpenThread nRF52840 với chức năng Chung và USB gốc. Thiết bị sử dụng vai trò Người kết hợp để được xác thực và ủy quyền một cách an toàn vào Mạng chuỗi. USB gốc cho phép sử dụng USB CDC ACM làm phương tiện truyền tải nối tiếp giữa nRF52840 và máy chủ lưu trữ.

Luôn dọn dẹp kho lưu trữ của các bản dựng trước bằng cách chạy rm -rf build.

$ cd ~/src
$ git clone --recursive https://github.com/openthread/ot-nrf528xx.git
$ cd ot-nrf528xx
$ script/build nrf52840 USB_trans

Chuyển đến thư mục có tệp nhị phân OpenThread RCP và chuyển đổi tệp đó sang định dạng hex:

$ cd ~/src/ot-nrf528xx/build/bin
$ arm-none-eabi-objcopy -O ihex ot-rcp ot-rcp.hex

Gắn cáp USB vào cổng gỡ lỗi Micro-USB bên cạnh chân nguồn bên ngoài trên bảng mạch nRF52840, sau đó cắm vào máy Linux. Đặt công tắc nguồn điện nRF trên bảng mạch nRF52840 thành VDD. Khi được kết nối đúng cách, LED5 sẽ bật.

20a3b4b480356447.png.

Nếu đây là bảng đầu tiên được gắn vào máy Linux, thì bảng này sẽ xuất hiện dưới dạng cổng nối tiếp /dev/ttyACM0 (tất cả các bảng nRF52840 đều sử dụng ttyACM cho mã nhận dạng cổng nối tiếp).

$ ls /dev/ttyACM*
/dev/ttyACM0

Lưu ý số sê-ri của bảng nRF52840 đang được sử dụng cho RCP:

c00d519ebec7e5f0.jpeg

Chuyển đến vị trí của các Công cụ dòng lệnh nRFx và cài đặt tệp hex RThread OpenCP vào bảng mạch nRF52840 bằng cách sử dụng số sê-ri của bảng. Lưu ý rằng nếu bỏ qua cờ --verify, bạn sẽ thấy một thông báo cảnh báo cho bạn biết rằng quá trình flash có thể không thành công nếu không có lỗi.

$ cd ~/nrfjprog/
$ ./nrfjprog -f nrf52 -s 683704924  --verify --chiperase --program \
       ~/src/ot-nrf528xx/build/bin/ot-rcp.hex --reset

Kết quả sau đây được tạo ra khi thành công:

Parsing hex file.
Erasing user available code and UICR flash areas.
Applying system reset.
Checking that the area to write is not protected.
Programing device.
Applying system reset.
Run.

Gắn nhãn cho bảng "RCP" để sau này bạn không nhầm lẫn các vai trò của bảng.

Kết nối với USB gốc

Vì bản dựng OpenThread RCP cho phép sử dụng USB CDC ACM gốc làm phương thức truyền tải nối tiếp, nên bạn phải sử dụng cổng nRF USB trên bảng mạch nRF52840 để giao tiếp với máy chủ RCP (máy Linux).

Tháo đầu micro-USB của cáp USB khỏi cổng gỡ lỗi của bảng nRF52840 có flash, sau đó gắn lại thẻ này vào cổng nRF USB USB bên cạnh nút reset Đặt công tắc nguồn điện nRF thành USB.

46e7b670d2464842.png.

Khởi động Openem Daemon

Trong thiết kế RCP, hãy sử dụng OpenThread Daemon để giao tiếp và quản lý thiết bị Thread. Bắt đầu ot-daemon bằng cờ chi tiết -v để bạn có thể xem đầu ra nhật ký và xác nhận rằng cờ đang chạy:

$ cd ~/src/openthread
$ sudo ./build/posix/src/posix/ot-daemon -v \
    'spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=115200'

Khi thành công, ot-daemon ở chế độ chi tiết sẽ tạo ra kết quả tương tự như sau:

ot-daemon[12463]: Running OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; POSIX; Aug 30 2022 10:55:05
ot-daemon[12463]: Thread version: 4
ot-daemon[12463]: Thread interface: wpan0
ot-daemon[12463]: RCP version: OPENTHREAD/thread-reference-20200818-1938-g0f10480ed; SIMULATION; Aug 30 2022 10:54:10

Hãy để cửa sổ dòng lệnh này mở để bạn có thể xem nhật ký của ot-daemon.

Sử dụng ot-ctl để giao tiếp với nút RCP. ot-ctl sử dụng cùng CLI như ứng dụng CLI OpenThread. Do đó, bạn có thể kiểm soát các nút ot-daemon theo cách tương tự như các thiết bị Chuỗi được mô phỏng khác.

Trong cửa sổ dòng lệnh thứ hai, hãy bắt đầu ot-ctl:

$ sudo ./build/posix/src/posix/ot-ctl
>

Kiểm tra state của Nút 2 (nút RCP) mà bạn đã bắt đầu bằng ot-daemon:

> state
disabled
Done

5. Thiết lập FTD

Hai nút Thread còn lại được dùng trong Lớp học lập trình này là Thiết bị toàn bộ luồng (FTD) trên thiết kế hệ thống theo chuẩn (SoC) tiêu chuẩn. Trong chế độ cài đặt Chính thức, bạn có thể sử dụng wpantund (một trình điều khiển giao diện mạng sản xuất) để điều khiển các phiên bản NCP OpenThread, nhưng trong lớp học lập trình này, chúng ta sẽ sử dụng ot-ctl, CLI OpenThread.

Một thiết bị hoạt động như Ủy viên, để xác thực và ủy quyền một cách an toàn các thiết bị cho mạng đó. Thiết bị khác hoạt động như Thiết bị kết nối mà Ủy viên có thể xác thực với mạng Luồng.

Bản dựng và flash

Tạo ví dụ OpenThread FTD cho nền tảng nRF52840, trong đó các vai trò Uỷ viên và Người tham gia đã được bật:

$ cd ~/src/ot-nrf528xx
$ rm -rf build
$ script/build nrf52840 USB_trans -DOT_JOINER=ON -DOT_COMMISSIONER=ON

Chuyển đến thư mục có tệp nhị phân CThread Open Full Thread Device (FTD) CLI và chuyển đổi thư mục đó sang định dạng hex:

$ cd ~/src/ot-nrf528xx/build/bin
$ arm-none-eabi-objcopy -O ihex ot-cli-ftd ot-cli-ftd.hex

Gắn cáp USB vào cổng Micro-USB bên cạnh chân nguồn bên ngoài trên bo mạch nRF52840, sau đó cắm vào máy Linux. Nếu RCP vẫn được đính kèm vào máy Linux, bảng mới này sẽ xuất hiện dưới dạng cổng nối tiếp /dev/ttyACM1 (tất cả các bảng nRF52840 đều sử dụng ttyACM cho mã nhận dạng cổng nối tiếp).

$ ls /dev/ttyACM*
/dev/ttyACM0  /dev/ttyACM1

Như trước đây, hãy lưu ý số sê-ri của bảng nRF52840 được sử dụng cho FTD:

c00d519ebec7e5f0.jpeg

Chuyển đến vị trí của các công cụ dòng lệnh nRFx và cài đặt tệp hex OpenThread CLI FTD lên bảng nRF52840 bằng cách sử dụng số sê-ri của bảng:

$ cd ~/nrfjprog/
$ ./nrfjprog -f nrf52 -s 683704924 --verify --chiperase --program \
       ~/src/ot-nrf528xx/build/bin/ot-cli-ftd.hex --reset

Gắn nhãn cho bảng "Uỷ viên."

Kết nối với USB gốc

Vì bản dựng OpenThread FTD cho phép sử dụng USB CDC ACM gốc làm phương tiện truyền tải nối tiếp, nên bạn phải dùng cổng nRF USB trên bảng mạch nRF52840 để giao tiếp với máy chủ RCP (máy Linux).

Tháo đầu micro-USB của cáp USB khỏi cổng gỡ lỗi của bảng nRF52840 có flash, sau đó gắn lại thẻ này vào cổng nRF USB USB bên cạnh nút reset Đặt công tắc nguồn điện nRF thành USB.

46e7b670d2464842.png.

Xác minh bản dựng

Xác minh bản dựng thành công bằng cách truy cập vào CThread OpenThread bằng cách sử dụng GNU Screen từ cửa sổ dòng lệnh. Bo mạch nRF52840 sử dụng tốc độ truyền là 115200.

$ screen /dev/ttyACM1 115200

Trong cửa sổ mới, hãy nhấn phím Quay lại trên bàn phím vài lần để hiển thị lời nhắc OpenThread CLI >. Hiển thị giao diện IPv6 và kiểm tra địa chỉ:

> ifconfig up
Done
> ipaddr
fe80:0:0:0:1cd6:87a9:cb9d:4b1d
Done

Sử dụng tổ hợp phím Ctrl+a →

d để tách khỏi màn hình FTD Commissioner CLI và quay lại thiết bị đầu cuối Linux để có thể cài đặt flash tiếp theo. Để nhập lại CLI bất kỳ lúc nào, hãy sử dụng screen -r từ dòng lệnh. Để xem danh sách các màn hình có sẵn, hãy sử dụng screen -ls:

$ screen -ls
There is a screen on:
        74182.ttys000.mylinuxmachine        (Detached)
1 Socket in /tmp/uscreens/S-username.

Thiết lập Trình liên kết FTD

Lặp lại quy trình trên để cài đặt nRF52840 cho bảng mạch thứ ba bằng cách sử dụng bản dựng ot-cli-ftd.hex hiện có. Khi hoàn tất, hãy nhớ kết nối lại bảng với máy tính bằng cổng USB nRF và đặt công tắc nguồn điện nRF thành VDD.

Nếu đính kèm hai nút còn lại vào máy Linux khi bảng thứ ba này được gắn, bảng này sẽ xuất hiện dưới dạng cổng nối tiếp /dev/ttyACM2:

$ ls /dev/ttyACM*
/dev/ttyACM0  /dev/ttyACM1  /dev/ttyACM2

Gắn nhãn bảng "Joiner."

Khi xác minh bằng Màn hình, thay vì tạo một thực thể mới của Màn hình từ dòng lệnh, hãy đính kèm lại vào phiên bản hiện có và tạo một cửa sổ mới trong đó (mà bạn đã sử dụng cho Uỷ viên FTD):

$ screen -r

Tạo cửa sổ mới trong Màn hình bằng cách nhấn tổ hợp phím Ctrl+a → c.

Một lời nhắc mới vào dòng lệnh sẽ xuất hiện. Truy cập vào CLI OpenThread cho trình kết nối FTD:

$ screen /dev/ttyACM2 115200

Trong cửa sổ mới này, hãy nhấn nút Quay lại trên bàn phím vài lần để hiển thị lời nhắc OpenThread CLI >. Hiển thị giao diện IPv6 và kiểm tra địa chỉ:

> ifconfig up
Done
> ipaddr
fe80:0:0:0:6c1e:87a2:df05:c240
Done

Giờ đây, Trình liên kết FTD CLI nằm trong cùng một phiên bản của Màn hình với Ủy viên FTD, bạn có thể chuyển đổi giữa các phiên bản đó bằng cách sử dụng Ctrl+a → n.

Sử dụng tổ hợp phím Ctrl+a →

d bất cứ lúc nào để thoát khỏi Màn hình.

6. Thiết lập cửa sổ dòng lệnh

Từ giờ trở đi, bạn sẽ thường xuyên chuyển đổi giữa các thiết bị Luồng. Vì vậy, hãy đảm bảo rằng mọi thiết bị đều hoạt động và dễ truy cập. Cho đến nay, chúng ta đã dùng Màn hình để truy cập hai FTD và công cụ này cũng cho phép chia đôi màn hình trên cùng một cửa sổ dòng lệnh. Dùng nút này để xem cách một nút phản ứng với các lệnh được phát hành trên một nút khác.

Tốt nhất là bạn nên có sẵn 4 cửa sổ:

  1. ot-daemon dịch vụ / nhật ký
  2. Trình liên kết RCP qua ot-ctl
  3. Ủy viên FTD qua OpenThread CLI
  4. Trình liên kết FTD qua OpenThread CLI

Nếu bạn muốn sử dụng công cụ hoặc cấu hình cổng nối tiếp / thiết bị đầu cuối của riêng mình, vui lòng chuyển sang bước tiếp theo. Định cấu hình cửa sổ dòng lệnh cho tất cả thiết bị theo cách phù hợp nhất với bạn.

Sử dụng màn hình

Để dễ sử dụng, bạn chỉ nên bắt đầu một phiên Màn hình. Bạn đã có một tài khoản Google khi thiết lập cả hai FTD.

Tất cả các lệnh trong Màn hình đều bắt đầu bằng Ctrl+a.

Các lệnh cơ bản trên Màn hình:

Đính kèm lại phiên Màn hình (từ dòng lệnh)

screen -r

Rời khỏi phiên Màn hình

Ctrl+a → d

Tạo cửa sổ mới trong phiên Màn hình

Ctrl+a → c

Chuyển đổi giữa các cửa sổ trong cùng một phiên Màn hình

Ctrl+a → n (chuyển tiếp)Ctrl+a → p (quay lại)

Tắt cửa sổ hiện tại trong phiên Màn hình

Ctrl+a → k

Chia đôi Màn hình

Với Màn hình, bạn có thể chia thiết bị thanh toán thành nhiều cửa sổ:

f1cbf1258cf0a5a.pngS

Bạn có thể truy cập các lệnh trong screen bằng cách nhấn tổ hợp phím Ctrl+a. Mọi lệnh phải bắt đầu bằng tổ hợp phím truy cập này.

Nếu đang theo dõi Lớp học lập trình chính xác, bạn nên có hai cửa sổ (FTD Uỷ viên, FTD Con nhà) trên cùng một thực thể Màn hình. Để chia đôi màn hình giữa hai màn hình, trước tiên hãy nhập phiên Màn hình hiện có của bạn:

$ screen -r

Bạn phải dùng một trong các thiết bị FTD. Hãy làm theo các bước sau trên Màn hình:

  1. Ctrl+a → S để chia cửa sổ theo chiều ngang
  2. Ctrl+a → Tab để di chuyển con trỏ sang cửa sổ trống mới
  3. Ctrl+a → n để chuyển cửa sổ mới đó sang cửa sổ tiếp theo
  4. Nếu cửa sổ này giống với cửa sổ trên cùng, hãy nhấn tổ hợp phím Ctrl+a → n để xem thiết bị FTD khác

Giờ đây, cả hai đều được hiển thị. Chuyển đổi giữa hai chế độ này bằng cách nhấn tổ hợp phím Ctrl+a → Tab. Bạn nên đổi tên từng cửa sổ bằng tổ hợp phím Ctrl+a → A để tránh nhầm lẫn.

Cách sử dụng nâng cao

Để chia thêm màn hình thành góc phần tư và xem nhật ký ot-daemon và Trình liên kết RCP ot-ctl, bạn phải bắt đầu các dịch vụ đó trong cùng một thực thể Màn hình này. Để làm việc này, hãy dừng ot-daemon và thoát khỏi ot-ctl, sau đó khởi động lại trong các cửa sổ Màn hình mới (Ctrl+a → c).

Thông tin thiết lập này là không bắt buộc và được để lại dưới dạng thông tin cho người dùng.

Phân tách và di chuyển giữa các cửa sổ bằng các lệnh sau:

Tạo cửa sổ mới

Ctrl+a → c

Chia cửa sổ theo chiều dọc

Ctrl+a →

Chia cửa sổ theo chiều ngang

Ctrl+a → S

Chuyển đến cửa sổ hiển thị tiếp theo

Ctrl+a → Tab

Chuyển cửa sổ hiển thị về phía trước hoặc phía sau

Ctrl+a → n hoặc p

Đổi tên cửa sổ hiện tại

Ctrl+a → A

Rời khỏi màn hình bất kỳ lúc nào bằng Ctrl+a → d và đính kèm lại bằng screen -r từ dòng lệnh.

Để biết thêm thông tin về Màn hình, hãy xem tài liệu tham khảo nhanh về Màn hình GNU.

7. Tạo Mạng chuỗi

Sau khi đã định cấu hình tất cả màn hình và cửa sổ dòng lệnh, hãy tạo mạng Thread của chúng ta. Trên FTD Commissioner, hãy tạo Tập dữ liệu hoạt động mới và cam kết tập dữ liệu đó làm tập dữ liệu đang hoạt động. Tập dữ liệu hoạt động là cấu hình cho mạng Luồng mà bạn đang tạo.

## FTD Commissioner ##
----------------------

> dataset init new
Done
> dataset
Active Timestamp: 1
Channel: 11
Channel Mask: 07fff800
Ext PAN ID: c0de7ab5c0de7ab5
Mesh Local Prefix: fdc0:de7a:b5c0/64
Network Key: 1234c0de7ab51234c0de7ab51234c0de
Network Name: OpenThread-c0de
PAN ID: 0xc0de
PSKc: ebb4f2f8a68026fc55bcf3d7be3e6fe4
Security Policy: 0, onrcb
Done

Ghi lại Khóa mạng 1234c0de7ab51234c0de7ab51234c0de mà sẽ được sử dụng sau này.

Xác nhận tập dữ liệu này dưới dạng tập dữ liệu đang hoạt động:

> dataset commit active
Done

Hiển thị giao diện IPv6:

> ifconfig up
Done

Bắt đầu thao tác giao thức Luồng:

> thread start
Done

Sau giây lát, hãy kiểm tra trạng thái của thiết bị. Người này phải là Người lãnh đạo. Ngoài ra, hãy tải RREACH16 để tham khảo trong tương lai.

## FTD Commissioner ##
----------------------

> state
leader
Done
> rloc16
0c00
Done

Kiểm tra địa chỉ IPv6 của thiết bị:

## FTD Commissioner ##
----------------------

> ipaddr
fdc0:de7a:b5c0:0:0:ff:fe00:fc00        # Leader Anycast Locator (ALOC)
fdc0:de7a:b5c0:0:0:ff:fe00:c00         # Routing Locator (RLOC)
fdc0:de7a:b5c0:0:6394:5a75:a1ad:e5a    # Mesh-Local EID (ML-EID)
fe80:0:0:0:1cd6:87a9:cb9d:4b1d         # Link-Local Address (LLA)

Mạng "codelab" hiện hiển thị khi được quét từ các thiết bị Luồng khác.

Từ ot-ctl trên Trình liên kết RCP:

## RCP Joiner ##
----------------

> scan
| PAN  | MAC Address      | Ch | dBm | LQI |
+------+------------------+----+-----+-----+
| c0de | 1ed687a9cb9d4b1d | 11 | -36 | 232 |

Từ CLI OpenThread trên Trình tham gia FTD:

## FTD Joiner ##
----------------

> scan
| PAN  | MAC Address      | Ch | dBm | LQI |
+------+------------------+----+-----+-----+
| c0de | 1ed687a9cb9d4b1d | 11 | -38 | 229 |

Nếu "codelab" mạng không xuất hiện trong danh sách, hãy thử quét lại.

8. Thêm trình kết hợp RCP

Tính năng Ủy quyền luồng không hoạt động trên mạng, nghĩa là chúng tôi cần thêm Trình kết hợp RCP vào mạng Luồng mà chúng tôi vừa tạo bằng quy trình ủy quyền ngoài băng tần.

Trên FTD Commissioner, chúng tôi đã ghi chú về Key Key, ví dụ như 1234c0de7ab51234c0de7ab51234c0de. Nếu bạn cần tra cứu lại Khóa mạng, hãy chạy lệnh sau trên Uỷ viên FTD:

## FTD Commissioner ##

> dataset networkkey
1234c0de7ab51234c0de7ab51234c0de
Done

Tiếp theo, trên RCP joiner, hãy thiết lập khoá mạng của tập dữ liệu đang hoạt động thành FTD Commissioner Network Key:

## RCP Joiner ##
----------------

> dataset networkkey 1234c0de7ab51234c0de7ab51234c0de
Done
> dataset commit active
Done

Hãy kiểm tra tập dữ liệu để đảm bảo tập dữ liệu được đặt chính xác.

## RCP Joiner ##
----------------

> dataset
Network Key: 1234c0de7ab51234c0de7ab51234c0de

Đưa chuỗi lên để Trình liên kết RCP tham gia mạng "codelab". Chờ một vài giây, kiểm tra trạng thái, RGCP16 và địa chỉ IPv6 của nó:

## RCP Joiner ##
----------------

> ifconfig up
Done
> thread start
Done
> state
child
Done
> rloc16
0c01
Done
> ipaddr
fdc0:de7a:b5c0:0:0:ff:fe00:0c01         # Routing Locator (RLOC)
fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f    # Mesh-Local EID (ML-EID)
fe80:0:0:0:18e5:29b3:a638:943b          # Link-Local Address (LLA)
Done

Hãy lưu ý đến Địa chỉ IPv6 cục bộ (fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f tại đây), bạn sẽ sử dụng địa chỉ này sau.

Quay lại FTD Commissioner (Uỷ viên của FTD), kiểm tra bộ định tuyến và bảng con để xác nhận rằng cả hai thiết bị đều thuộc cùng một mạng. Sử dụng RGCP16 để xác định Trình kết hợp RCP.

## FTD Commissioner ##
----------------------

> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     |
+----+--------+----------+-----------+-------+--------+-----+------------------+
|  3 | 0x0c00 |        3 |         0 |     0 |      0 |  35 | 1ed687a9cb9d4b1d |

Done
> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|S|D|VER| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+---+------------------+
|   1 | 0x0c01 |        240 |         25 |     3 |   89 |1|1|1|  2| 1ae529b3a638943b |
Done

Ping địa chỉ cục bộ lưới của Trình liên kết RCP (địa chỉ Mesh-Local thu được từ đầu ra ipaddr của Trình liên kết RCP) để xác minh kết nối:

## FTD Commissioner ##
----------------------

> ping fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f
> 8 bytes from fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f: icmp_seq=1 hlim=64 time=40ms

Chúng ta hiện có một mạng Thread bao gồm hai nút, được minh hoạ trong sơ đồ cấu trúc liên kết này:

otcodelab_top01C_2nodes.png

Sơ đồ cấu trúc liên kết

Khi bạn làm việc trong phần còn lại của Lớp học lập trình, chúng ta sẽ thấy một sơ đồ cấu trúc liên kết luồng mới mỗi khi trạng thái mạng thay đổi. Vai trò của nút được biểu thị như sau:

b75a527be4563215.png.

Bộ định tuyến luôn là hình ngũ giác và Thiết bị cuối luôn là vòng tròn. Các con số trên mỗi nút đại diện cho mã nhận dạng bộ định tuyến hoặc mã con được hiển thị trong đầu ra CLI, tùy thuộc vào vai trò và trạng thái hiện tại của từng nút tại thời điểm đó.

9. Phí hoa hồng cho người tham gia FTD

Bây giờ, hãy thêm thiết bị Luồng thứ ba vào mạng "codelab". Lần này, chúng tôi sẽ sử dụng quy trình ủy quyền an toàn hơn trong dải tần và chỉ cho phép Người tham gia FTD tham gia.

Trên Trình tham gia FTD, hãy lấy eui64 để Ủy viên FTD có thể xác định:

## FTD Joiner ##
----------------

> eui64
2f57d222545271f1
Done

Trên phần Ủy viên FTD, hãy bắt đầu ủy quyền và chỉ định eui64 của thiết bị có thể tham gia cùng với Thông tin đăng nhập của người tham gia, ví dụ như J01NME. Thông tin xác thực liên kết là một chuỗi dành riêng cho thiết bị gồm tất cả các ký tự chữ-số viết hoa (0-9 và A-Y, ngoại trừ I, O, Q và Z để dễ đọc), có độ dài từ 6 đến 32 ký tự.

## FTD Commissioner ##
----------------------

> commissioner start
Done
> commissioner joiner add 2f57d222545271f1 J01NME
Done

Chuyển sang Trình liên kết FTD. Bắt đầu vai trò người tham gia bằng thông tin xác thực của người tham gia mà bạn vừa thiết lập trên Uỷ viên của FTD:

## FTD Joiner ##
----------------

> ifconfig up
Done
> joiner start J01NME
Done

Trong vòng một phút, bạn sẽ nhận được một thông báo xác nhận xác thực thành công:

## FTD Joiner ##
----------------

>
Join success

Hiển thị Chuỗi để Trình liên kết FTD tham gia mạng "codelab" đồng thời kiểm tra ngay trạng thái và RLAT16:

## FTD Joiner ##
----------------

> thread start
Done
> state
child
Done
> rloc16
0c02
Done

Kiểm tra địa chỉ IPv6 của thiết bị. Lưu ý rằng không có A nào. Lý do là thiết bị này không phải là Dẫn đầu và cũng không có vai trò dành riêng cho Anycast yêu cầu A quyền.

## FTD Joiner ##
----------------

> ipaddr
fdc0:de7a:b5c0:0:0:ff:fe00:c02         # Routing Locator (RLOC)
fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd    # Mesh-Local EID (ML-EID)
fe80:0:0:0:e4cd:d2d9:3249:a243         # Link-Local Address (LLA)

Chuyển ngay sang FTD Commissioner (Ủy viên quản lý FTD) rồi kiểm tra bộ định tuyến và bảng con để xác nhận rằng có 3 thiết bị tồn tại trong mạng "codelab":

## FTD Commissioner ##
----------------------

> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     |
+----+--------+----------+-----------+-------+--------+-----+------------------+
|  3 | 0x0c00 |        3 |         0 |     0 |      0 |  50 | 1ed687a9cb9d4b1d |

> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|S|D|N| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+-+------------------+
|   1 | 0x0c01 |        240 |         25 |     3 |   89 |1|1|1|1| 1ae529b3a638943b |
|   2 | 0x0c02 |        240 |         15 |     3 |   44 |1|1|1|1| e6cdd2d93249a243 |
Done

Dựa trên RREACH16, Trình kết nối FTD đã kết nối với mạng như một Thiết bị cuối (con). Dưới đây là cấu trúc liên kết được cập nhật của chúng tôi:

otcodelab_top01C_ed01.png

10. Chuỗi trong thực tế

Thiết bị luồng trong Lớp học lập trình này là một loại Thiết bị toàn bộ luồng (FTD) cụ thể được gọi là Thiết bị kết thúc đủ điều kiện (REED). Tức là họ có thể hoạt động như một Bộ định tuyến hoặc Thiết bị cuối và có thể tự quảng bá từ Thiết bị cuối thành Bộ định tuyến.

Luồng có thể hỗ trợ tối đa 32 Bộ định tuyến, nhưng cố gắng giữ số lượng Bộ định tuyến từ 16 đến 23. Nếu REED đính kèm dưới dạng Thiết bị cuối (con) và số Bộ định tuyến dưới 16, thì sau một khoảng thời gian ngẫu nhiên trong vòng hai phút, bộ định tuyến này sẽ tự động quảng bá tới Bộ định tuyến.

Nếu bạn có hai trẻ trong mạng Luồng của bạn sau khi thêm Trình kết nối FTD, hãy đợi ít nhất hai phút, sau đó kiểm tra lại bộ định tuyến và bảng con trên Ủy viên FTD:

## FTD Commissioner ##
----------------------

> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     |
+----+--------+----------+-----------+-------+--------+-----+------------------+
|  3 | 0x0c00 |        3 |         0 |     0 |      0 |  50 | 1ed687a9cb9d4b1d |
| 46 | 0xb800 |       63 |         0 |     3 |      3 |   1 | e6cdd2d93249a243 |

> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|S|D|N| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+-+------------------+
|   1 | 0x0c01 |        240 |         61 |     3 |   89 |1|1|1|1| 1ae529b3a638943b |
Done

Trình liên kết FTD (MAC mở rộng = e6cdd2d93249a243) đã tự nâng cấp lên một Bộ định tuyến. Xin lưu ý rằng RGCP16 khác (b800 thay vì 0c02). Điều đó là do RPATH16 dựa trên Mã bộ định tuyến và Mã con của một thiết bị. Khi chuyển đổi từ Thiết bị cuối sang Bộ định tuyến, các giá trị mã định tuyến và mã nhận dạng con sẽ thay đổi, RRR16 cũng vậy.

otcodelab_top01C.png

Xác nhận trạng thái mới và RREACH16 trên Trình tham gia FTD:

## FTD Joiner ##
----------------

> state
router
Done
> rloc16
b800
Done

Hạ cấp trình kết hợp FTD

Bạn có thể kiểm tra hành vi này bằng cách hạ cấp Trình liên kết FTD theo cách thủ công từ một Bộ định tuyến trở lại Thiết bị cuối. Thay đổi trạng thái thành con và kiểm tra RGCP16:

## FTD Joiner ##
----------------

> state child
Done
> rloc16
0c03
Done

otcodelab_top01C_ed02.png

Quay lại FTD Uỷ viên, Trình tham gia FTD hiện sẽ xuất hiện trong bảng con (ID = 3). Tính năng này thậm chí có thể được hiển thị ở cả hai vị trí trong khi chuyển đổi:

## FTD Commissioner ##
----------------------

> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     |
+----+--------+----------+-----------+-------+--------+-----+------------------+
|  3 | 0x0c00 |        3 |         0 |     0 |      0 |  50 | 1ed687a9cb9d4b1d |
| 46 | 0xb800 |       63 |         0 |     3 |      3 |   1 | e6cdd2d93249a243 |

> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|S|D|N| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+-+------------------+
|   1 | 0x0c01 |        240 |         61 |     3 |   89 |1|1|1|1| 1ae529b3a638943b |
|   3 | 0x0c03 |        240 |         16 |     3 |   94 |1|1|1|1| e6cdd2d93249a243 |
Done

Sau một thời gian, máy sẽ được chuyển lại về Bộ định tuyến có RGCP là b800.

otcodelab_top01C.png

Xóa vị trí dẫn đầu

Nhà lãnh đạo được bầu chọn tự động trong số tất cả các Bộ định tuyến luồng. Điều này có nghĩa là nếu một Nhà lãnh đạo hiện tại bị xóa khỏi mạng Luồng, một trong các Bộ định tuyến khác sẽ trở thành Người lãnh đạo mới.

Trên FTD Commissioner, hãy tắt Thread để xoá chuỗi đó khỏi mạng Thread:

## FTD Commissioner ##
----------------------

> thread stop
Done
> ifconfig down
Done

Trong vòng hai phút, Trình tham gia FTD sẽ trở thành đầu chuỗi mới. Kiểm tra trạng thái và địa chỉ IPv6 của Trình tham gia FTD để xác minh:

## FTD Joiner ##
----------------

> state
leader
Done
> ipaddr
fdc0:de7a:b5c0:0:0:ff:fe00:fc00       # Now it has the Leader ALOC!
fdc0:de7a:b5c0:0:0:ff:fe00:b800
fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd
fe80:0:0:0:e4cd:d2d9:3249:a243
Done

otcodelab_top02C_01.png.

Kiểm tra bảng con. Lưu ý có một RGCP16 mới. Đây là Trình kết hợp RCP, được biểu thị bằng mã nhận dạng và MAC mở rộng. Để duy trì mạng Thread cùng với nhau, mạng này đã chuyển Bộ định tuyến mẹ, từ Uỷ viên FTD sang Máy kết hợp FTD. Điều này dẫn đến một RREASON16 mới cho Trình liên kết RCP (vì ID bộ định tuyến của nó đã thay đổi, từ 3 thành 46).

## FTD Joiner ##
----------------

> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|S|D|N| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+-+------------------+
|   1 | 0xb801 |        240 |         27 |     3 |  145 |1|1|1|1| 1ae529b3a638943b |
Done

Bạn có thể phải đợi vài phút để Trình xử lý dữ liệu xử lý dữ liệu (RCP joiner) đính kèm vào Trình tham gia FTD dưới dạng một phần tử con. Kiểm tra trạng thái và RREACH16 để xác nhận rằng:

## RCP Joiner ##
--------------

> state
child
> rloc16
b801

Đính kèm lại Uỷ viên của FTD

Mạng luồng có hai nút không thú vị lắm. Hãy trở thành Uỷ viên của FTD trên mạng.

Trên FTD Commissioner, hãy khởi động lại Thread:

## FTD Commissioner ##
----------------------

> ifconfig up
Done
> thread start
Done

Trong vòng hai phút, thiết bị sẽ tự động gắn lại vào mạng "codelab" làm Thiết bị cuối rồi tự quảng bá cho Bộ định tuyến.

## FTD Commissioner ##
----------------------

> state
router
Done

Kiểm tra bộ định tuyến và bảng con trên Trình liên kết FTD để xác minh:

## FTD Joiner ##
----------------

> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     |
+----+--------+----------+-----------+-------+--------+-----+------------------+
|  3 | 0x0c00 |       63 |         0 |     3 |      3 |   0 | 1ed687a9cb9d4b1d |
| 46 | 0xb800 |       46 |         0 |     0 |      0 |  15 | e6cdd2d93249a243 |

> child table
| ID  | RLOC16 | Timeout    | Age        | LQ In | C_VN |R|S|D|N| Extended MAC     |
+-----+--------+------------+------------+-------+------+-+-+-+-+------------------+
|   1 | 0xb801 |        240 |        184 |     3 |  145 |1|1|1|1| 1ae529b3a638943b |
Done

otcodelab_top02C_02.png

Mạng chuỗi của chúng tôi bao gồm lại 3 nút.

11. Khắc phục sự cố

Việc quản lý Mạng luồng với nhiều thiết bị trên các thiết bị đầu cuối hoặc cửa sổ Màn hình khác nhau có thể phức tạp. Sử dụng các mẹo này để "reset" trạng thái của mạng hoặc không gian làm việc của bạn nếu gặp sự cố.

Màn hình

Nếu bạn bị mất cấu hình (quá nhiều Cửa sổ màn hình hoặc Màn hình trong Màn hình), hãy tiếp tục tắt cửa sổ Màn hình bằng Ctrl+a → k cho đến khi không có cửa sổ nào và screen -ls trên dòng lệnh xuất No Sockets found. Sau đó, hãy tạo lại cửa sổ Màn hình cho từng thiết bị. Các trạng thái của thiết bị được giữ lại ngay cả khi Màn hình bị tắt.

Nút của chuỗi

Nếu cấu trúc liên kết mạng Thread không được mô tả trong Lớp học lập trình này hoặc nút bị ngắt kết nối vì lý do nào đó (có thể là do máy Linux đã bật nguồn). Đó là cách tốt nhất để gỡ bỏ Thread, xoá thông tin xác thực mạng và bắt đầu lại từ bước Create Thread Network (Tạo mạng luồng).

Để đặt lại FTD:

## FTD Commissioner or FTD Joiner ##
------------------------------------

> thread stop
Done
> ifconfig down
Done
> factoryreset
Done

Bạn có thể đặt lại RCP theo cách tương tự qua ot-ctl:

## RCP Joiner ##
----------------

> thread stop
Done
> ifconfig down
Done
> factoryreset
Done

12. Sử dụng chế độ phát đa hướng

Multicast được sử dụng để truyền thông tin tới một nhóm thiết bị cùng một lúc. Trong Mạng chuỗi, địa chỉ cụ thể được dành riêng để sử dụng trên nhiều hướng với các nhóm thiết bị khác nhau, tuỳ thuộc vào phạm vi.

Địa chỉ IPv6

Phạm vi

Đã gửi đến

ff02::1

Liên kết cục bộ

Tất cả FTD và MED

ff02::2

Liên kết cục bộ

Tất cả FTD và Bộ định tuyến biên

ff03::1

Mạng lưới địa phương

Tất cả FTD và MED

ff03::2

Mạng lưới địa phương

Tất cả FTD và Bộ định tuyến biên

Vì chúng ta không sử dụng Bộ định tuyến biên trong Lớp học lập trình này, nên hãy tập trung vào hai địa chỉ phát đa hướng FTD và MED.

Phạm vi Link-Local bao gồm tất cả các giao diện Luồng có thể truy cập được bằng một đường truyền vô tuyến hoặc bằng một "hop;" Cấu trúc liên kết mạng chỉ định thiết bị nào phản hồi một ping đến địa chỉ phát đa hướng ff02::1.

Ping ff02::1 từ Ủy viên tiềm năng:

## FTD Commissioner ##
----------------------

> ping ff02::1
> 8 bytes from fe80:0:0:0:e4cd:d2d9:3249:a243: icmp_seq=2 hlim=64 time=9ms

Có hai thiết bị khác trong mạng (Trình tham gia FTD và Trình kết hợp RCP), nhưng Ủy viên FTD chỉ nhận được một phản hồi từ Địa chỉ liên kết cục bộ (LLA) của FTD Collecter. Điều này có nghĩa là Trình kết nối FTD là thiết bị duy nhất mà Uỷ viên FTD có thể tiếp cận bằng một bước nhảy duy nhất.

otcodelab_top02C_02_LL.png.

Đang ping ff02::1 từ Trình liên kết FTD:

## FTD Joiner ##
----------------

> ping ff02::1
> 8 bytes from fe80:0:0:0:1cd6:87a9:cb9d:4b1d: icmp_seq=1 hlim=64 time=11ms
8 bytes from fe80:0:0:0:18e5:29b3:a638:943b: icmp_seq=1 hlim=64 time=24ms

Hai câu trả lời! Khi kiểm tra địa chỉ IPv6 cho các thiết bị khác, chúng ta có thể thấy địa chỉ đầu tiên (kết thúc bằng 4b1d) là LLA Uỷ viên của FTD, còn địa chỉ thứ hai (kết thúc bằng 943b) là LLA (Doanh nghiệp vừa và nhỏ).

otcodelab_top02C_02_LL02.png.

Điều này có nghĩa là Người liên kết FTD trực tiếp kết nối với cả Uỷ viên của FTD và Người tham gia RCP. Điều này xác nhận cấu trúc liên kết của chúng tôi.

Mạng lưới địa phương

Phạm vi Mesh-Local bao gồm tất cả các giao diện Luồng có thể truy cập được trong cùng một mạng Luồng. Chúng ta hãy xem các phản hồi cho lệnh ping tới địa chỉ phát đa hướng ff03::1.

Ping ff03::1 từ Ủy viên tiềm năng:

## FTD Commissioner ##
----------------------

> ping ff03::1
> 8 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:b800: icmp_seq=3 hlim=64 time=9ms
8 bytes from fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f: icmp_seq=3 hlim=64 time=68ms

Lần này, Ủy viên FTD nhận được hai phản hồi, một từ Bộ định tuyến định tuyến của FTD (Liên minh FTD) (R cốt truyện, kết thúc bằng b800) và một từ Bộ định vị lưới địa phương của RCP (ML-EID, kết thúc bằng d55f). Đó là phạm vi cục bộ lưới bao gồm toàn bộ mạng Luồng. Bất kể thiết bị đang ở đâu, thiết bị sẽ được đăng ký theo địa chỉ ff03::1.

otcodelab_top02C_02_ML.png.

Ping ff03::1 từ Trình liên kết FTD để xác nhận hành vi tương tự:

## FTD Joiner ##
----------------

> ping ff03::1
> 8 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:c00: icmp_seq=2 hlim=64 time=11ms
8 bytes from fdc0:de7a:b5c0:0:66bf:99b9:24c0:d55f: icmp_seq=2 hlim=64 time=23ms

otcodelab_top02C_02_LL02.png.

Hãy lưu ý về thời gian phản hồi của Trình kết hợp RCP trong cả hai đầu ra ping. Trình kết nối RCP mất nhiều thời gian hơn để tiếp cận Uỷ viên FTD (68 mili giây) so với liên hệ để đạt được Máy nối FTD (23 mili giây). Điều đó là bởi vì nó phải thực hiện hai bước để đến Uỷ viên FTD, so với một bước của Người tham gia FTD.

Bạn cũng có thể nhận thấy rằng ping đa hướng cục bộ lưới chỉ phản hồi bằng RGCP cho hai FTD – không phải Trình kết hợp RCP. Lý do là FTD là Bộ định tuyến trong mạng, trong khi RCP là Thiết bị cuối.

Kiểm tra trạng thái của Trình liên kết RCP để xác nhận:

## RCP Joiner ##
----------------

> state
child

13. Gửi tin nhắn bằng UDP

Một trong những dịch vụ ứng dụng mà OpenThread cung cấp là Giao thức dữ liệu người dùng (UDP), một giao thức Lớp truyền tải. Một ứng dụng được xây dựng trên OpenThread có thể sử dụng API UDP để truyền thông báo giữa các nút trong mạng Thread hoặc cho các thiết bị khác trong mạng bên ngoài (như Internet, nếu mạng Thread có Bộ định tuyến đường viền).

Ổ cắm UDP được hiển thị thông qua OpenThread CLI. Hãy sử dụng lớp này để truyền tin nhắn giữa hai FTD.

Lấy địa chỉ Esh-Local-ID cho Trình liên kết FTD. Chúng tôi đang sử dụng địa chỉ này vì có thể truy cập được từ bất kỳ đâu trong mạng Chuỗi.

## FTD Joiner ##
----------------

> ipaddr
fdc0:de7a:b5c0:0:0:ff:fe00:fc00        # Leader Anycast Locator (ALOC)
fdc0:de7a:b5c0:0:0:ff:fe00:b800        # Routing Locator (RLOC)
fe80:0:0:0:e4cd:d2d9:3249:a243         # Link-Local Address (LLA)
fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd    # Mesh-Local EID (ML-EID)
Done

Khởi động UDP và liên kết UDP với một ổ cắm cho bất kỳ địa chỉ IPv6 nào:

## FTD Joiner ##
----------------

> udp open
Done
> udp bind :: 1212

Chuyển sang FTD Commissioner, khởi động UDP và kết nối với socket bạn đã thiết lập trên FTD joiner bằng công nghệ ML-EID:

## FTD Commissioner ##
----------------------

> udp open
Done
> udp connect fdc0:de7a:b5c0:0:3e2e:66e:9d41:ebcd 1212
Done

Kết nối UDP phải hoạt động giữa hai nút. Gửi tin nhắn từ Uỷ viên của FTD:

## FTD Commissioner ##
----------------------

> udp send hellothere
Done

Trên Trình liên kết FTD, bạn đã nhận được thông báo UDP!

## FTD Joiner ##
----------------

> 10 bytes from fdc0:de7a:b5c0:0:0:ff:fe00:c00 49153 hellothere

14. Xin chúc mừng!

Bạn đã tạo một mạng Luồng thực tế!

b915c433e7027cc7.png.

Giờ đây, bạn đã biết:

  • điểm khác biệt giữa các loại thiết bị, vai trò và phạm vi của luồng
  • cách thiết bị Luồng quản lý trạng thái của chúng trong mạng
  • cách chuyển thông báo đơn giản giữa các nút bằng UDP

Các bước tiếp theo

Xây dựng dựa trên Lớp học lập trình này, hãy thử các bài tập sau:

  • Cập nhật lại bảng mạch của trình tham gia FTD dưới dạng một MTD bằng cách sử dụng tệp nhị phân ot-cli-mtd và quan sát thấy bảng này không bao giờ tự nâng cấp lên một Bộ định tuyến hoặc cố gắng trở thành Trưởng nhóm
  • Thêm các thiết bị khác (thử một nền tảng khác!) vào mạng và phác thảo cấu trúc liên kết bằng cách sử dụng bộ định tuyến và bảng con, cùng với ping đến địa chỉ phát đa hướng
  • Sử dụng pyspinel để điều khiển NCP
  • Chuyển đổi NCP thành một Bộ định tuyến biên bằng cách sử dụng OpenThread Border Router và kết nối mạng Thread của bạn với Internet

Tài liệu đọc thêm

Hãy truy cập vào openthread.ioGitHub để xem nhiều tài nguyên OpenThread, bao gồm:

  • Nền tảng được hỗ trợ – khám phá tất cả nền tảng hỗ trợ OpenThread
  • Tạo OpenThread – xem thêm thông tin chi tiết về cách tạo và định cấu hình OpenThread
  • Thread Primer (Chủ đề luồng) – bao gồm tất cả các khái niệm Chủ đề nổi bật trong Lớp học lập trình này

Tài liệu tham khảo: