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 Chủ đề bằng các bảng nRF52840 và OpenThread

1. Giới thiệu

26b7f4f6b3ea0700.png

Openthread do Google phát hành là cách 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ệ dùng trong các sản phẩm Nest cho các nhà phát triển để đẩy nhanh tốc độ phát triển các sản phẩm cho nhà thông minh.

Thông số kỹ thuật của chuỗi xác định giao thức kết nối thiết bị không dây với thiết bị đáng tin cậy, bảo mật và dung lượng thấp dành cho IPv6 cho các ứng dụng tại 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 Thread, chuyển thông báo giữa các nút.

4806d16a8c137c6d.jpeg

Nội dung bạn sẽ tìm hiểu

  • Xây dựng và nhấp nháy các tệp nhị phân CLI trong OpenThread cho các 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
  • Đang kết nối với RCP bằng OpenThread Daemon và ot-ctl
  • Quản lý thủ công các nút Thread với Màn hình GNU và CLI mở chuỗi
  • Tính năng ủy quyền an toàn cho thiết bị vào mạng Thread
  • 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 Chuỗi bằng UDP

Những gì bạn cần có

Phần cứng:

  • 3 bảng điều khiển nhà bán lẻ Bắc Âu Semiconductor nRF52840
  • 3 cáp USB với Micro-USB để kết nối các bảng
  • Một 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 Bắc Âu nRF5x
  • Phần mềm Segger J-Link
  • OpenThread
  • Git

2. Bắt đầu

Mô phỏng mở

Trước khi bắt đầu, bạn có thể xem qua Lớp học mô phỏng chuỗi mở để làm quen với các khái niệm cơ bản về Chuỗi và OpenLI CLI.

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

Bạn nên làm quen với 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 Màn hình GNU và cung cấp thông tin tổng quan về việc sử dụng, nhưng bạn có thể sử dụng bất kỳ phần mềm nào khác của thiết bị đầu cuối.

Máy Linux

Lớp học lập trình này được thiết kế để sử dụng máy Linux trên nền tảng i386 hoặc x86, dùng làm máy chủ lưu trữ một Thiết bị chuỗi đồng bộ hóa vô tuyến (RCP) và flash tất cả các bảng Phát triển chuỗi. Tất cả các bước đã được thử nghiệm trên Ubuntu 14.04.5 LTS (Tin cậy Tahr).

Bo mạch bán kính Bắc Âu nRF52840

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

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. Hãy cài đặt ứng dụng này trên máy Linux.

Tải gói thích hợp xuống máy của bạn và cài đặt gói đó ở vị trí thích hợp. 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 flash các tệp nhị phân OpenThread cho các bảng nRF52840. Cài đặt bản dựng nRF5x-Command-Line-Tools-<OS> thích hợp trên máy Linux.

Đặt gói đã trích xuất vào thư mục gốc ~/

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

Công cụ ARM GNU Toolchain được dùng để xây dựng.

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

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

Màn hình là một công cụ đơn giản để truy cập vào các thiết bị được 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ể dùng bất kỳ ứng dụng thiết bị đầu cuối nào của cổng nối tiếp mà bạn muốn.

$ sudo apt-get install screen

3. Sao chép kho lưu trữ

OpenThread

Sao chép 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 mở chuỗi

$ script/cmake-build posix -DOT_DAEMON=ON

Giờ đây, bạn đã sẵn sàng tạo và flash OpenThread đến các bảng nRF52840.

4. Thiết lập Trình tham gia RCP

Tạo và flash

Xây dựng ví dụ về Openthread nRF52840 với tính năng ghép nối và USB gốc. Thiết bị sử dụng vai trò Người tham gia để xác thực và vận hành an toàn vào một chuỗi rác. USB gốc cho phép sử dụng USB CDC ACM làm phương thức truyền tải nối tiếp giữa nRF52840 và máy chủ lưu trữ.

Luôn quét lại bản sao 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 nó 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 bo mạch nRF52840 thành VDD. Khi được kết nối đúng cách, LED5 đang bật.

20a3b4b480356447.png

Nếu đây là bảng mạch đầ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 giá trị 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 được sử dụng cho RCP:

c00d519ebec7e5f0.jpeg

Di chuyển đến vị trí của Công cụ dòng lệnh nRFx và flash tệp hex OpenThread RCP lên bảng nRF52840 bằng cách sử dụng số sê-ri của bảng. Lưu ý rằng nếu bạn 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 mà không do 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 sẽ được tạo khi gặt hái 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 bảng "RCP" để sau này bạn không nhầm lẫn các vai trò trong 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 nRF52840 để giao tiếp với máy chủ RCP (máy Linux).

Tháo đầu kết nối Micro-USB của cáp USB khỏi cổng gỡ lỗi của bảng nRF52840 nhấp nháy, sau đó cắm lại vào cổng nRF USB Micro-USB bên cạnh nút ĐRESETT LẠI , Chuyển tùy chọn nguồn điện nRF thành USB.

46e7b670d2464842.png

Bắt đầu chuỗi thảo luận mở

Trong thiết kế RCP, hãy sử dụng OpenThread Daemon để giao tiếp và quản lý thiết bị Chuỗi. 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
$ ./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[228024]: Running OPENTHREAD/20191113-00831-gfb399104; POSIX; Jun  7 2020 18:05:15
ot-daemon[228024]: Thread version: 2
ot-daemon[228024]: RCP version: OPENTHREAD/20191113-00831-gfb399104; SIMULATION; Jun  7 2020 18:06:08

Hãy để cửa sổ dòng lệnh này mở để bạn có thể xem các 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 giao diện dòng lệnh (CLI) như ứng dụng Openthread CLI. Do đó, bạn có thể điều khiển ot-daemon nút theo cách tương tự như các thiết bị Chuỗi mô phỏng khác.

Trong cửa sổ thiết bị đầu cuối thứ hai, hãy khởi động ot-ctl:

$ ./build/posix/bin/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 khác được dùng trong Lớp học mã này là Thiết bị chuỗi đầy đủ (FTD) trên thiết kế System-on-Chip (SoC) tiêu chuẩn. Trong tùy chọn cài đặt Sản xuất, người dùng có thể sử dụng wpantund, trình điều khiển giao diện mạng cấp sản xuất, để điều khiển các phiên bản Openthread NCP, nhưng trong lớp học lập trình này, chúng tôi sẽ sử dụng ot-ctl, OpenThread Giao diện dòng lệnh (CLI).

Một thiết bị có chức năng they viên hội đồng để xác thực và ủy quyền thiết bị một cách an toàn cho mạng đó. Thiết bị khác có vai trò là Người tham gia mà they viên hội đồng có thể xác thực với mạng Chuỗi cuộc trò chuyện đó.

Tạo và flash

Tạo ví dụ về OpenThread FTD cho nền tảng nRF52840, với các vai trò y viên và Người tham gia:

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

Di chuyển đến thư mục có tệp nhị phân OpenLI Full Thread Device (FTD) CLI và chuyển đổi tệp 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 bảng mạch nRF52840, sau đó cắm vào máy Linux. Nếu RCP vẫn còn được gắn vào máy Linux, thì 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 sử dụng ttyACM cho giá trị 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 đang được sử dụng cho FTD:

c00d519ebec7e5f0.jpeg

Di chuyển đến vị trí của Công cụ dòng lệnh nRFx và flash tệp thập lục phân Openthread CLI FTD lên bảng nRF52840, 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 bảng "Commissionery viên hội đồng".

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 truyền tải nối tiếp, bạn phải sử dụng cổng nRF USB trên bảng nRF52840 để giao tiếp với máy chủ RCP (máy Linux).

Tháo đầu kết nối Micro-USB của cáp USB khỏi cổng gỡ lỗi của bảng nRF52840 nhấp nháy, sau đó cắm lại vào cổng nRF USB Micro-USB bên cạnh nút ĐRESETT LẠI , Chuyển tùy chọn nguồn điện nRF thành USB.

46e7b670d2464842.png

Xác minh bản dựng

Xác minh một lần xây dựng thành công bằng cách truy cập vào Giao diện người dùng (CLI) OpenThread sử dụng Màn hình GNU từ cửa sổ đầu cuối. 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 vào Quay lại trên bàn phím một vài lần để hiện CLI trong chuỗi mở>. Hiển thị giao diện IPv6 và kiểm tra các địa chỉ:

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

Sử dụng Ctrl+a →

d để tách khỏi màn hình Giao diện thông tin thư của ủy viên FTD và quay lại thiết bị đầu cuối Linux để hiển thị bảng 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 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 tham gia FTD

Lặp lại quy trình trên để flash bảng nRF52840 thứ ba, sử dụng bản dựng ot-cli-ftd.hex hiện có. Khi kết nối xong, 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 gắn hai nút còn lại vào máy Linux khi bảng thứ ba này được gắn, thì mạch đó 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 "Tham gia".

Khi xác minh bằng cách sử dụng Màn hình, thay vì tạo phiên bản mới của Màn hình từ dòng lệnh, hãy đính kèm lại 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 Fy viên FTD):

$ screen -r

Tạo cửa sổ mới trong Màn hình bằng Ctrl+a → c.

Một dấu nhắc dòng lệnh mới sẽ xuất hiện. Truy cập vào Giao diện người dùng (CLI) Openthread cho người tham gia 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 một vài lần để hiển thị CLI trong chuỗi mở rộng>. Hiển thị giao diện IPv6 và kiểm tra các địa chỉ:

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

Hiện tại, CLI của Trình tham gia FTD đang ở cùng phiên bản Màn hình với y viên FTD, bạn có thể chuyển đổi giữa các chế độ này bằng cách nhấn Ctrl+a → n.

Sử dụng 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ừ nay trở đi, bạn sẽ thường xuyên chuyển đổi giữa các thiết bị Chuỗi. Do đó, hãy đảm bảo tất cả các thiết bị này đều đang hoạt động và dễ dàng truy cập. Cho đến nay, chúng tôi đã sử 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. Sử dụng tùy chọn này để xem cách một nút phản ứng với các lệnh đã phát hành trên một nút khác.

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

  1. ot-daemon dịch vụ / nhật ký
  2. Người tham gia RCP qua ot-ctl
  3. y viên FTD thông qua CLI trong chuỗi mở
  4. Tổ chức FTD qua CLI (Cuộc trò chuyện mở)

Nếu bạn muốn sử dụng công cụ hoặc cấu hình cổng nối tiếp / nối tiếp của riêng mình, hãy 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 truy cập trên màn hình. Bạn đã có một tài khoản Google Ads từ khi thiết lập cả hai tính năng FTD.

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

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

Gắn lại vào phiên truy cập màn hình (từ dòng lệnh)

screen -r

Rời khỏi phiên truy cập màn hình

Ctrl+a → d

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

Ctrl+a → c

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

Ctrl+a → n (tiến) Ctrl+a → p (tiến)

Tắt cửa sổ hiện tại trong phiên truy cập 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ị đầu cuối thành nhiều cửa sổ:

f1cbf1258cf0a5a.png

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 khóa truy cập này.

Nếu đang theo dõi Lớp học mã chính xác, bạn sẽ có hai cửa sổ (y viên FTD, Người tham gia FTD) trên cùng một phiên bản 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ó:

$ screen -r

Bạn phải sử dụng một trong những thiết bị FTD. Hãy làm theo các bước sau trong 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ỏ đến 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 thiết bị 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

Cả hai đều đã hiển thị. Chuyển đổi giữa các thẻ bằng cách nhấn tổ hợp phím Ctrl+a → Tab. Bạn nên đổi tiêu đề cho 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 đôi màn hình thành nhiều phần tư và xem nhật ký của ot-daemon cùng với Trình tham gia RCP ot-ctl, bạn phải khởi động các dịch vụ đó trong cùng một phiên bản Màn hình. Để làm vậy, hãy dừng ot-daemon và thoát ot-ctl, rồi khởi động lại các cửa sổ đó trong cửa sổ Màn hình mới (Ctrl+a → c).

Bạn không cần phải thiết lập như vậy và hãy để lại nội dung này dưới dạng một bài tập cho người dùng.

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

Tạo cửa sổ mới

Ctrl+a → c

Tách cửa sổ theo chiều dọc

Ctrl+a →

Tách 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 cứ lúc nào bằng phím Ctrl+a → d và đính kèm lại 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

Giờ khi bạn đã định cấu hình tất cả cửa sổ và màn hình của thiết bị đầu cuối, hãy tạo Mạng chuỗi của chúng tôi. Trên FTy ban FTD, hãy tạo một Tập dữ liệu hoạt động mới và cam kết tập dữ liệu đó là 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 Chuỗi 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à bạn sẽ sử dụng sau.

Xác nhận tập dữ liệu này là 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 chuỗi:

> thread start
Done

Sau giây lát, hãy kiểm tra trạng thái của thiết bị. Người đó phải là Trưởng nhóm. Bạn cũng có thể tải R phiên bản 16 để tham khảo trong tương lai.

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

> state
leader
Done
> rloc16
0c00
Done

Kiểm tra các đị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 "lớp học mã" hiện đã hiển thị khi được quét từ các thiết bị Chuỗi khác.

Từ ot-ctl trên Tham gia RCP:

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

> scan
| J | Network Name     | Extended PAN     | PAN  | MAC Address      | Ch | dBm | LQI |
+---+------------------+------------------+------+------------------+----+-----+-----+
| 0 | OpenThread-c0de  | c0de7ab5c0de7ab5 | c0de | 1ed687a9cb9d4b1d | 11 | -36 | 232 |

Từ OpenThread CLI trên FTD Connectorer:

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

> scan
| J | Network Name     | Extended PAN     | PAN  | MAC Address      | Ch | dBm | LQI |
+---+------------------+------------------+------+------------------+----+-----+-----+
| 0 | OpenThread-c0de  | c0de7ab5c0de7ab5 | c0de | 1ed687a9cb9d4b1d | 11 | -38 | 229 |

Nếu mạng "lớp học lập trình" không xuất hiện trong danh sách, hãy thử quét lại.

Có thể bạn cần lưu ý rằng trong cả hai lần quét, mạng có vẻ như không thể kết nối được (cột J trên Trình tham gia RCP và Trình tham gia FTD). Điều này chỉ có nghĩa là Hoạt động ủy quyền chuỗi cuộc trò chuyện không hoạt động trên mạng. Bạn vẫn có thể kết nối mạng bên ngoài băng tần bằng cách nhập khóa mạng vào thiết bị của người tham gia theo cách thủ công.

8. Thêm Nhà cung cấp dịch vụ giao tiếp đa dạng (RCP)

Hãy thêm Trình kết nối RCP vào Mạng chuỗi mà chúng ta vừa tạo bằng cách sử dụng một quy trình nằm ngoài băng tần. Quét mạng trên Tham gia RCP:

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

> scan
| J | Network Name     | Extended PAN     | PAN  | MAC Address      | Ch | dBm | LQI |
+---+------------------+------------------+------+------------------+----+-----+-----+
| 0 | OpenThread-c0de  | c0de7ab5c0de7ab5 | c0de | 1ed687a9cb9d4b1d | 11 | -38 | 229 |

Để tham gia, hãy đặt khóa mạng (chúng tôi vừa lấy được từ ủy viên FTD) trên RCP Sumer trong tập dữ liệu đang hoạt động.

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

> dataset networkkey 1234c0de7ab51234c0de7ab51234c0de
Done
> dataset commit active
Done

Kiểm tra tập dữ liệu để đảm bảo rằng tập dữ liệu được thiết lập đúng cách.

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

> dataset
Network Key: 1234c0de7ab51234c0de7ab51234c0de

Hãy đưa Chủ đề lên để những người tham gia RCP tham gia vào mạng "lớp học lập trình". Đợi vài giây, kiểm tra trạng thái, Rskaya16 và địa chỉ IPv6:

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

> 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

Ghi lại Địa chỉ IPv6 Mesh-Local (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 FTy ban FTD, kiểm tra bộ định tuyến và bảng con để xác nhận cả hai thiết bị đều thuộc cùng một mạng. Sử dụng Rskaya16 để xác định Tham gia 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ỉ lưới địa phương của Nhà cung cấp dịch vụ RCP (Địa chỉ mạng lưới địa phương được thu thập từ đầu ra ipaddr của Nhà cung cấp 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

Hiện tại, chúng tôi có một mạng Chuỗi bao gồm hai nút, được minh họa bằng sơ đồ cấu trúc liên kết này:

otot_top01C_2nodes.png

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

Khi bạn làm việc qua phần còn lại của Lớp học lập trình, chúng tôi sẽ hiển thị sơ đồ cấu trúc liên kết của Chuỗi mới bất cứ khi nào trạng thái mạng thay đổi. Các 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ị kết thúc luôn là vòng tròn. Các con số trên mỗi nút đại diện cho Mã bộ định tuyến hoặc Mã con 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 mỗi 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ị Chuỗi thứ ba vào mạng "lớp học lập trình". Lần này, chúng tôi sẽ sử dụng quy trình ủy quyền trong miền an toàn hơn. Trên FTD Connectorer, hãy quét tìm mạng:

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

> scan
| J | Network Name     | Extended PAN     | PAN  | MAC Address      | Ch | dBm | LQI |
+---+------------------+------------------+------+------------------+----+-----+-----+
| 0 | OpenThread-c0de  | c0de7ab5c0de7ab5 | c0de | f65ae2853ff0c4e4 | 11 | -36 |  57 |

0 trong cột J cho biết rằng Chức năng ủy quyền chuỗi không hoạt động trên thiết bị.

Hãy nêu cụ thể thời điểm ủy quyền trên thiết bị tiếp theo và chỉ cho phép Người tham gia FTD tham gia. Vẫn đang tham gia Liên minh FTD, hãy mua eui64 để they viên FTD xác định được:

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

> eui64
2f57d222545271f1
Done

Trên FTy ban FTD, hãy bắt đầu ủy ban 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ụ J01NME. Thông tin đăng nhập của người tham gia là một chuỗi dành riêng cho thiết bị gồm tất cả các ký tự chữ và số viết hoa (0-9 và AY, 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 FTD M, rồi quét lại:

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

> scan
| J | Network Name     | Extended PAN     | PAN  | MAC Address      | Ch | dBm | LQI |
+---+------------------+------------------+------+------------------+----+-----+-----+
| 1 | OpenThread-c0de  | c0de7ab5c0de7ab5 | c0de | 1ed687a9cb9d4b1d | 11 | -45 | 196 |

Như đã chỉ ra trong 1 trong cột J, tính năng ủy quyền chuỗi trò chuyện hiện đang hoạt động trên mạng. Bắt đầu vai trò người tham gia bằng Thông tin đăng nhập của người tham gia mà bạn vừa thiết lập trong TDy viên FTD:

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

> ifconfig up
Done
> joiner start J01NME
Done

Trong vòng một phút hoặc lâu hơn, bạn sẽ nhận được thông báo xác nhận thành công:

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

>
Join success

Hãy đưa Chủ đề lên để người tham gia vào FTD tham gia mạng "lớp học lập trình", đồng thời kiểm tra ngay trạng thái và yêu cầu của Rskaya16:

## 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ó Askaya. Lý do là thiết bị này không phải là ứng dụng Trưởng nhóm cũng như không giữ vai trò dành riêng cho Acast nào yêu cầu AAT.

## 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)

Ngay lập tức chuyển sang FTy ban FTD và kiểm tra bộ định tuyến và bảng con để xác nhận rằng đã có ba thiết bị trong mạng "lớp học lập trình":

## 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 Rskaya16, Nhà tham gia FTD đã liên kết với mạng dưới dạng Thiết bị kết thúc (con). Dưới đây là cấu trúc liên kết được cập nhật của chúng tôi:

otot_top01C_ed01.png

10. Hoạt động của chuỗi cuộc trò chuyện

Thiết bị Chuỗi trong Lớp học lập trình này là một loại Thiết bị chuỗi đầy đủ (FTD) cụ thể gọi là Thiết bị kết thúc đủ điều kiện cho bộ định tuyến (REED). Điều này có nghĩa là các thiết bị này có thể hoạt động như một Bộ định tuyến hoặc Thiết bị kết thúc và có thể tự quảng bá từ Thiết bị cuối đến Bộ định tuyến.

Chuỗi 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 được đính kèm dưới dạng Thiết bị kết thúc (con) và số lượng Bộ định tuyến dưới 16, sau một khoảng thời gian ngẫu nhiên trong vòng hai phút, thiết bị đó sẽ tự động kích hoạt cho Bộ định tuyến.

Nếu bạn có hai phần tử con trong mạng Chuỗi của bạn sau khi thêm Tham gia 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 FTy ban 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

Liên minh FTD (Bản mở rộng MAC = e6cdd2d93249a243) đã tự quảng bá cho một Bộ định tuyến. Lưu ý rằng Rskaya16 khác (b800 thay vì 0c02). Đó là vì Rskaya16 dựa trên Mã bộ định tuyến và Mã con của một thiết bị. Khi chuyển từ Thiết bị cuối sang Bộ định tuyến, giá trị Mã bộ định tuyến và Mã nhận dạng con của thiết bị đó cũng thay đổi và Rskaya16 cũng vậy.

otot_top01C.png

Xác nhận trạng thái mới và yêu cầu của Rskaya16 trên Tổ chức FTD:

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

> state
router
Done
> rloc16
b800
Done

Hạ cấp Trình tham gia FTD

Bạn có thể kiểm tra hoạt động này bằng cách hạ cấp Trình tham gia FTD theo cách thủ công từ Bộ định tuyến về Thiết bị cuối. Thay đổi tiểu bang thành trẻ em và kiểm tra Rskaya16:

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

> state child
Done
> rloc16
0c03
Done

otot_top01C_ed02.png

Trở lại với FTy ban FTD, Tên tham gia FTD hiện sẽ xuất hiện trong bảng con (Mã nhận dạng = 3). Thậm chí tính năng này có thể ở cả 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 khoảng thời gian, ứng dụng này sẽ chuyển trở lại bộ định tuyến với yêu cầu RBEN của b800.

otot_top01C.png

Xóa biến thể dẫn đầu

Trưởng nhóm tự bầu trong số tất cả các Bộ định tuyến. Điều này có nghĩa là nếu Người đứng đầu hiện tại bị xóa khỏi mạng Chuỗi, thì một trong những Người đi bộ khác sẽ trở thành Người đứng đầu mới.

Trên FTy ban FTD, hãy tắt chuỗi để xóa chuỗi đó khỏi mạng Chuỗi:

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

> thread stop
Done
> ifconfig down
Done

Trong vòng 2 phút, FTD Connectorer sẽ trở thành trưởng nhóm Thread 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

otot_top02C_01.png

Kiểm tra bảng con. Lưu ý rằng có một Rskaya16 mới. Đây là Công ty tham gia RCP, được biểu thị bằng mã nhận dạng và Mã mở rộng. Để kết nối mạng Chuỗi trò chuyện với nhau, tổ chức này đã chuyển các Trình định tuyến gốc, từ Commissionery viên FTD sang Đơn vị tham gia FTD. Việc này sẽ tạo ra một Rskaya16 mới cho Nhà tham gia RCP (vì ID bộ định tuyến của chương trình này đã 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 chờ vài phút để Người tham gia RCP đính kèm với Người tham gia FTD là trẻ em. Hãy kiểm tra tiểu bang và Rskaya16 để xác nhận rằng:

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

> state
child
> rloc16
b801

Đính kèm lại TDy viên FTD

Mạng Chuỗi có hai nút không thú vị lắm. Hãy CANNOT TRANSLATE

Trên FTy ban FTD, hãy bắt đầu lại chuỗi bài đăng:

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

> ifconfig up
Done
> thread start
Done

Trong vòng 2 phút, ứng dụng này tự động kết nối lại với mạng "lớp học mã" dưới dạng Thiết bị kết thúc và sau đó tự quảng bá cho bộ định tuyến.

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

> state
router
Done

Hãy kiểm tra bộ định tuyến và bảng con trên FTD Connectorer để 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

otot_top02C_02.png

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

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

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

Màn hình

Nếu bạn bị mất cấu hình (có 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 nhấn các 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 ở cuối dòng lệnh No Sockets found. Sau đó, hãy tạo lại cửa sổ Màn hình cho từng thiết bị. Trạng thái thiết bị được giữ lại ngay cả khi đã loại bỏ Màn hình.

Nút chuỗi

Nếu cấu trúc liên kết của mạng Thread không như mô tả trong Lớp học lập trình này hoặc các nút ngắt kết nối vì một số lý do (có thể là do máy Linux đang dùng chế độ này để chuyển sang chế độ ngủ), thì tốt nhất bạn nên gỡ Thread, xóa thông tin đăng nhập của mạng và bắt đầu lại từ Tạo bước Kết nối chuỗi.

Cách đặ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ự như trong ot-ctl:

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

> thread stop
Done
> ifconfig down
Done
> factoryreset
Done

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

Multicast được dùng để giao tiếp thông tin với một nhóm thiết bị cùng lúc. Trong một mạng Chuỗi cuộc trò chuyện, các địa chỉ cụ thể được dành riêng để sử dụng cho nhiều đường truyền với các nhóm thiết bị khác nhau, tùy thuộc vào phạm vi.

Địa chỉ IPv6

Phạm vi

Đã gửi tới

ff02::1

Liên kết địa phương

Tất cả các FTD và MED

ff02::2

Liên kết địa phương

Tất cả thiết bị di động và máy bào biên giới

ff03::1

Lưới địa phương

Tất cả các FTD và MED

ff03::2

Lưới địa phương

Tất cả thiết bị di động và máy bào biên giới

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

Phạm vi liên kết cục bộ bao gồm tất cả các giao diện Chuỗi có thể truy cập được qua một lần truyền sóng vô tuyến hoặc một "hop". Cấu trúc liên kết mạng cho biết thiết bị nào phản hồi lệnh ping tới địa chỉ đa hướng ff02::1.

Gửi lệnh ping ff02::1 đến từ FTy ban FTD:

## 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 (FTD Connectorer và RCP Connectorer), nhưng they viên FTD chỉ nhận được một phản hồi, từ địa chỉ Liên kết địa phương (LLA) của nhà tham gia FTD. Điều này có nghĩa là Thành viên FTD là thiết bị duy nhất mà y viên FTD có thể liên hệ bằng một bước nhảy duy nhất.

otot_top02C_02_LL.png

Bây giờ, hãy ping ff02::1 từ Trình tham gia 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! 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úc4b1d ) là LLA của Fy viên FTD và LLA thứ 2 (kết thúc)943b ) là LLA của người tham gia RCP.

otot_top02C_02_LL02.png

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

Lưới địa phương

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

Gửi lệnh ping ff03::1 đến từ FTy ban FTD:

## 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 2 câu trả lời, một là từ Bộ định tuyến tham gia của FTD (Rskaya, kết thúc bằng b800) và một là từ Bộ phận hỗ trợ địa phương về máy (Me--ID) của Đơn vị tổ chức RCP, kết thúc bằng d55f). Đó là do phạm vi lưới cục bộ bao gồm toàn bộ mạng Chuỗi. Bất kể thiết bị ở đâu trong mạng, thiết bị đó vẫn được đăng ký theo địa chỉ ff03::1.

otot_top02C_02_ML.png

Ping ff03::1 từ Mã tham gia 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

otot_top02C_02_LL02.png

Hãy lưu ý thời gian phản hồi cho Trình tham gia RCP trong cả hai kết quả ping. Liên kết RCP mất nhiều thời gian hơn để đến được they viên FTD (68 mili giây) so với để tiếp cận TDy viên FTD (23 mili giây). Lý do là phải tiến hành hai bước nhảy để liên hệ với TDy viên FTD, so với một bước nhảy liên quan đến việc 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 với Rskaya cho hai FTD—chứ không phải RCP Mối tham gia. Lý do là các FTD là bộ định tuyến trong mạng, còn RCP là một Thiết bị kết thúc.

Kiểm tra trạng thái của Tham gia 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à User Datagram Protocol (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 để chuyển thông báo giữa các nút trong mạng Chuỗi hoặc đến các thiết bị khác trong mạng bên ngoài (như Internet, nếu mạng Chuỗi này có Bộ định tuyến biên).

Các cổng UDP được hiển thị thông qua CLI mở chuỗi. Hãy cùng sử dụng tính năng này để chuyển thông báo giữa hai loại FTD.

Nhận địa chỉ Mesh-Local EID cho tham gia FTD. Chúng tôi đang sử dụng địa chỉ này vì bạn có thể truy cập địa chỉ này từ bất kỳ vị trí nào 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 nó 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 FTy ban FTD, khởi động UDP và kết nối với ổ cắm mà bạn thiết lập trên Trình tham gia FTD bằng 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 nằm giữa hai nút. Gửi thông báo của TDy viên FTD:

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

> udp send hellothere
Done

Trên Trình tham gia FTD, chúng tôi đã 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 Chuỗi cuộc trò chuyện thực!

b915c433e7027cc7.png

Bây giờ bạn sẽ biết:

  • điểm khác biệt giữa các loại thiết bị Chuỗi, vai trò và phạm vi
  • cách thiết bị Chuỗi 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

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

  • Khởi động lại danh sách Người tham gia FTD như một Người dùng mới (NTD) bằng tệp nhị phân ot-cli-mtd và quan sát thấy rằng nhóm này không bao giờ tự nâng cấp lên Bộ định tuyến hoặc cố gắng trở thành Người đứng đầu
  • Thêm nhiều 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 tới địa chỉ đa hướng
  • Sử dụng pyspinel để kiểm soát NCP
  • Chuyển đổi NCP thành Bộ định tuyến biên bằng bộ định tuyến OpenThread Border Router và kết nối mạng Chuỗi của bạn với Internet

Đọc thêm

Truy cập openthread.ioGitHub để tham khảo nhiều tài nguyên trong OpenThread, bao gồm:

Tham khảo: