You are on page 1of 23

Machine Translated by Google

AN1322: Phát triển đa giao thức động với


Bluetooth® và Zigbee EmberZNet SDK 7.0 trở lên

Ghi chú ứng dụng này cung cấp chi tiết về cách phát triển các ứng
NHỮNG ĐIỂM CHÍNH

dụng Đa giao thức động bằng Bluetooth và Zigbee trong GSDK 4.0 trở
lên. Nó mô tả cách định cấu hình các ứng dụng trong Simplicity • Tạo và tải các ứng dụng ví dụ đa giao thức
động.
Studio bằng Zigbee EmberZNet SDK v. 7.0 trở lên. Sau đó, nó cung cấp
• Thêm chức năng đa giao thức động vào một dự
hướng dẫn chi tiết về cách thức hoạt động của các mã bên dưới. Để án Zigbee hiện có.

biết chi tiết về phát triển Ứng dụng đa giao thức động áp dụng cho • Thông tin chi tiết về Giao diện người dùng

tất cả các kết hợp giao thức, hãy xem UG305: Hướng dẫn sử dụng đa của ứng dụng. • Cách ứng dụng ví dụ Zigbee
chức năng.
giao thức động.
• Ứng dụng Bluetooth hoạt động như thế nào.

Zigbee EmberZNet SDK v7.0 đã giới thiệu một kiến trúc dự án dựa trên thành phần đã thay
thế AppBuilder. Nếu bạn đang làm việc với Zigbee EmberZNet SDK v 6.10.x trở xuống, hãy
xem AN1133: Dynamic Multiprotocol Developer with Bluetooth và Zigbee EmberZNet SDK 6.x trở
xuống để biết thông tin này.

silabs.com | Xây dựng một thế giới kết nối hơn. Bản quyền © 2023 của Phòng thí nghiệm Silicon Phiên bản 0,2
AN1322: Phát triển đa giao thức động với Bluetooth và Zigbee EmberZNet SDK 7.0 trở lên Giới thiệu
Machine Translated by Google

1. Giới thiệu

Các ứng dụng ví dụ được tham chiếu ở đây có thể được điều khiển từ ứng dụng chuyển mạch dành riêng cho giao thức hoặc từ ứng dụng điện thoại
thông minh hỗ trợ Bluetooth. Ghi chú ứng dụng này cung cấp chi tiết về cách các ví dụ này được thiết kế và triển khai. Nó cũng mô tả cách
tạo, biên dịch và tải mã ứng dụng mẫu cũng như cách thêm chức năng đa giao thức động vào dự án Zigbee hiện có.
Ghi chú ứng dụng nhằm mục đích sử dụng khi phát triển triển khai đa giao thức động Zigbee/Bluetooth của riêng bạn.

Lưu ý: Giải pháp đa giao thức động Zigbee hiện chỉ được hỗ trợ cho các kiến trúc SoC. Hỗ trợ cho các kiến trúc NCP đã không còn được dùng để ủng
hộ DMP RCP. Vui lòng liên hệ với bộ phận Bán hàng của Phòng thí nghiệm Silicon để biết thêm thông tin về lộ trình phần mềm đa giao thức của chúng tôi.

1.1 Tài nguyên

• UG305: Hướng dẫn sử dụng đa giao thức động cung cấp chi tiết về:

• Kiến trúc đa giao thức động • Hoạt


động của Bộ lập lịch trình vô tuyến (có ví dụ) •
Quản lý mức độ ưu tiên của tác

vụ • AN1135: Sử dụng Bộ nhớ không biến đổi thế hệ thứ ba (NVM3) Lưu trữ dữ liệu giải thích cách NVM3 có thể được sử dụng làm dữ liệu không biến đổi
lưu trữ trong các ứng dụng Đa giao thức động với Zigbee và Bluetooth.

1.2 Yêu cầu về môi trường phát triển

• Studio đơn giản 5

• GSDK 4.0 trở lên, bao gồm Zigbee EmberZNet SDK phiên bản 7.0.0 trở lên và Bluetooth SDK 3.3 trở lên. • Chip EFR32 với ít

nhất 512 kB flash (cần thiết để chạy tất cả các thành phần phần mềm cần thiết)

Để làm việc với các bản trình diễn, hãy tải xuống ứng dụng EFR Connect từ Google Play Store hoặc App Store.

silabs.com | Xây dựng một thế giới kết nối hơn. Phiên bản 0,2 | 2
AN1322: Phát triển đa giao thức động với Bluetooth và Zigbee EmberZNet SDK 7.0 trở lên Làm việc với các ví
Machine Translated by Google
dụ về Zigbee/Bluetooth

2 Làm việc với các ví dụ Zigbee/Bluetooth

Phần này mô tả

• Cách xây dựng và flash các ứng dụng đa giao thức động được cung cấp cùng với Zigbee EmberZNet SDK. • Cách

thêm Bluetooth vào dự án Zigbee và biến nó thành dự án đa giao thức động.

2.1 Tạo ứng dụng

Để làm việc với các ứng dụng đa giao thức động Zigbee/Bluetooth như được mô tả trong ghi chú ứng dụng này, bạn phải cài đặt GSDK 4.0 trở
lên. Các ứng dụng có thể được xây dựng bằng GCC (Bộ sưu tập trình biên dịch GNU) hoặc IAR-EWARM. Xem QSG180: Bắt đầu với EmberZNet PRO
để biết thông tin về cách cài đặt SDK và thiết lập trình biên dịch.

Các ứng dụng đa giao thức động được tạo, xây dựng và tải lên giống như các ứng dụng khác. Nếu bạn không quen với các quy trình này, hãy
xem QSG180: Hướng dẫn bắt đầu nhanh Zigbee EmberZNet dành cho SDK 7.0 trở lên để biết chi tiết. Các ứng dụng đa giao thức động có trong
EmberZNet SDK là:

• DynamicMultiprotocolLight là một ứng dụng được thiết kế để minh họa một thiết bị DMP có khả năng điều phối Zigbee 3.0. •
DynamicMultiprotocolLightSed là một ứng dụng được thiết kế để chứng minh thiết bị DMP có khả năng SED.

Quy trình tóm tắt sau đây sử dụng ứng dụng ví dụ DynamicMultiprotocolLight .

1. Trong Simplicity Studio, bắt đầu một dự án mới dựa trên ví dụ DynamicMultiprotocolLight . Cách dễ nhất là chọn Zigbee làm
Công nghệ Nhập và lọc từ “động”.

silabs.com | Xây dựng một thế giới kết nối hơn. Phiên bản 0,2 | 3
AN1322: Phát triển đa giao thức động với Bluetooth và Zigbee EmberZNet SDK 7.0 trở lên Làm việc với các ví
Machine Translated by Google
dụ về Zigbee/Bluetooth

2. Khi dự án được tạo, các tệp sẽ được tạo tự động. Nhấp vào Build (biểu tượng cái búa) để xây dựng hình ảnh ứng dụng.

3. Để flash hình ảnh ứng dụng, trong giao diện Project Explorer, nhấp chuột phải vào tệp .s37 của ứng dụng và chọn Flash to Device.

Nếu bạn có nhiều thiết bị được kết nối, hãy chọn mục tiêu. Trình lập trình Flash mở ra.

silabs.com | Xây dựng một thế giới kết nối hơn. Phiên bản 0,2 | 4
AN1322: Phát triển đa giao thức động với Bluetooth và Zigbee EmberZNet SDK 7.0 trở lên Làm việc với các ví
Machine Translated by Google
dụ về Zigbee/Bluetooth

4. Đường dẫn của tệp .s37 phải được điền tự động. Nhấp vào Chương trình để flash tệp vào mục tiêu.

5. Các chỉ số tải ứng dụng thành công phụ thuộc vào mã. Nếu các dự án ví dụ đang được sử dụng trên bảng phát triển hỗ trợ chức năng LCD, thì LCD sẽ
hiển thị màn hình sau khi bật nguồn. Nhấn nút PB0 để chuyển sang hiển thị đèn. Trên các bo mạch phát triển khác không có thiết bị ngoại vi bổ sung
để hỗ trợ giao diện người dùng đầy đủ tính năng, hãy sử dụng giao diện dòng lệnh để chạy các lệnh khác nhau.

Lưu ý: Ví dụ về Phòng thí nghiệm Silicon yêu cầu bộ tải khởi động. Nếu bộ tải khởi động bị xóa, một cách dễ dàng để tải bộ tải khởi động là chạy bản
demo Dynamic Multiprotocol Light. Thao tác này sẽ cài đặt hình ảnh ứng dụng/bộ tải khởi động kết hợp. Sau đó, bạn có thể flash hình ảnh ứng
dụng của riêng mình để chỉ cập nhật khu vực ứng dụng. Nếu bạn đang sử dụng bo mạch không tương thích với các bản trình diễn có sẵn, thì bạn
có thể tải bộ tải khởi động bằng cách chọn một ví dụ, chẳng hạn như Bộ tải khởi động lưu trữ SPI Flash (hình ảnh đơn), rồi xây dựng và
flash nó như mô tả ở trên.

silabs.com | Xây dựng một thế giới kết nối hơn. Phiên bản 0,2 | 5
AN1322: Phát triển đa giao thức động với Bluetooth và Zigbee EmberZNet SDK 7.0 trở lên Làm việc với các ví
Machine Translated by Google
dụ về Zigbee/Bluetooth

2.2 Chuyển đổi Ứng dụng Zigbee thành Ứng dụng Đa giao thức Zigbee/Bluetooth LE Dynamic

Phần này mô tả các thay đổi cấu hình cần thiết để chuyển đổi ứng dụng Zigbee đang hoạt động thành ứng dụng Zigbee/Bluetooth LE Dynamic
Multiprotocol. Hướng dẫn trình bày các bước chung cho quá trình chuyển đổi, với các ví dụ cụ thể dựa trên việc biến ví dụ Z3Light thành
tương đương với DynamicMultiprotocolLight.

Yêu cầu: • Ứng

dụng Zigbee được thiết lập để xây dựng với IAR ARM hoặc GCC (các hướng dẫn này sử dụng Z3

Light) • Bất kỳ phần EFR32 nào có tối thiểu 512 kB flash và 64 kB RAM (các hướng dẫn này giả sử BRD4161
(EFR32MG12P432F1024GL125)

Lưu ý: Các ví dụ về Đa giao thức động không hỗ trợ các bản cập nhật OTA ngay lập tức. Để hỗ trợ các bản cập nhật OTA, hãy gỡ cài đặt Zigbee
linh kiện LCD. Điều này giải phóng các chân cổng được ghép với đèn flash bên ngoài.

2.2.1 Tạo và xây dựng ứng dụng Zigbee

Mục đích của bước này là để xác minh rằng ứng dụng Zigbee cơ bản đã được tải và đang hoạt động bình thường và đầu ra đó đang được in ra
bảng điều khiển. Ví dụ này sử dụng ứng dụng mẫu Z3Light. Nó bắt đầu với các cài đặt mặc định để các thay đổi cấu hình rõ ràng. Tạo và xây
dựng dự án, tải nó lên bảng và kiểm tra đầu ra Nối tiếp 1 để đảm bảo rằng nó đang hoạt động.

silabs.com | Xây dựng một thế giới kết nối hơn. Phiên bản 0,2 | 6
AN1322: Phát triển đa giao thức động với Bluetooth và Zigbee EmberZNet SDK 7.0 trở lên Làm việc với các ví
Machine Translated by Google
dụ về Zigbee/Bluetooth

2.2.2 Cấu hình dự án

Để chuyển đổi ứng dụng Z3Light thành ứng dụng đa giao thức Zigbee-Bluetooth LE tương tự như DMP Light, hãy làm theo các bước bên dưới: 1. Điều

hướng đến tab THÀNH PHẦN PHẦN MỀM trên dự án Z3Light, tìm kiếm và thêm các thành phần sau.

• Bluetooth > Ngăn xếp > Lõi Bluetooth - Lý do: Đây là thành phần lõi ngăn xếp Bluetooth

Lưu ý: Việc cài đặt này sẽ kích hoạt nhiều ngăn xếp giao thức trong dự án và do đó cũng kích hoạt lớp CMSIS RTOS2 và Hạt nhân Micrium OS, đây
là cách triển khai RTOS được khuyến nghị.

• Bluetooth > Ngăn xếp > Máy khách GATT, Máy chủ GATT, Trình quản lý bảo mật, Hệ thống - Lý do: Khối xây dựng Bluetooth cơ bản.

silabs.com | Xây dựng một thế giới kết nối hơn. Phiên bản 0,2 | 7
AN1322: Phát triển đa giao thức động với Bluetooth và Zigbee EmberZNet SDK 7.0 trở lên Làm việc với các ví dụ
Machine Translated by Google
về Zigbee/Bluetooth

silabs.com | Xây dựng một thế giới kết nối hơn. Phiên bản 0,2 | số 8
AN1322: Phát triển đa giao thức động với Bluetooth và Zigbee EmberZNet SDK 7.0 trở lên Làm việc với các ví
Machine Translated by Google
dụ về Zigbee/Bluetooth

• Bluetooth > Tính năng > Quảng cáo kế thừa, Kết nối, Máy quét. Lý do: Tính năng Bluetooth cơ bản.

silabs.com | Xây dựng một thế giới kết nối hơn. Phiên bản 0,2 | 9
AN1322: Phát triển đa giao thức động với Bluetooth và Zigbee EmberZNet SDK 7.0 trở lên Làm việc với các
Machine Translated by Google
ví dụ về Zigbee/Bluetooth

2. Thêm triển khai sl_bt_on_event(sl_bt_msg_t* evt) vào tệp app.c của bạn. Sau đây là ví dụ triển khai trình xử lý sự kiện
Bluetooth LE bắt đầu quảng cáo khi khởi động và in ra thông tin khi một số sự kiện phổ biến nhất xảy ra:

#include "sl_bluetooth.h"
#include "sl_bluetooth_advertiser_config.h" #include
"sl_bluetooth_connection_config.h"

#include "gatt_db.h"
uint8_t adv_handle;
#define DEVNAME_LEN 8
#define UUID_LEN 16 // UUID 128-bit

silabs.com | Xây dựng một thế giới kết nối hơn. Phiên bản 0,2 | 10
AN1322: Phát triển đa giao thức động với Bluetooth và Zigbee EmberZNet SDK 7.0 trở lên Làm việc với các
Machine Translated by Google
ví dụ về Zigbee/Bluetooth

// để chuyển số hex thành ký tự ascii uint8_t ascii_lut[] = { '0',


'1', '2', '3', '4', '5', '6', '7', '8 ', '9', 'A', 'B', 'C', 'D', 'E',
'F'};

void zb_ble_dmp_print_ble_address(uint8_t *address) {

emberAfCorePrint("\nĐịa chỉ BLE: [%X %X %X %X %X %X]\n",


địa chỉ[5], địa chỉ[4], địa chỉ[3], địa chỉ[2],
địa chỉ[1], địa chỉ[0]);
}

void enableBleAdvertisements(void) {

sl_status_t trạng thái;

/* Tạo Id và tên thiết bị dựa trên địa chỉ bluetooth bị cắt ngắn 16 bit
Sao chép vào cơ sở dữ liệu GATT cục bộ - điều này sẽ được ngăn xếp BLE sử dụng để đặt tên thiết
bị cục bộ vào quảng cáo, nhưng chỉ khi chúng tôi đang sử dụng quảng cáo mặc định */ uint8_t type;
bd_addr ble_address; Tên dev tĩnh
[DEVNAME_LEN];

status = sl_bt_system_get_identity_address(&ble_address, &type); if ( status !=


SL_STATUS_OK ) emberAfCorePrintln("Không {
thể lấy địa chỉ BLE. Mã lỗi: 0x%x", status); trở lại;

devName[0] = 'D';
devName[1] = 'M';
devName[2] = 'P';
devName[3] = ascii_lut[( (ble_address.addr[1] & 0xF0) >> 4)]; devName[4] =
ascii_lut[(ble_address.addr[1] & 0x0F)]; devName[5] =
ascii_lut[( (ble_address.addr[0] & 0xF0) >> 4)]; devName[6] =
ascii_lut[(ble_address.addr[0] & 0x0F)]; devName[7] = '\0';

emberAfCorePrintln("devName = %s", devName); status =


sl_bt_gatt_server_write_attribute_value(gattdb_device_name, 0, strlen(devName), (uint8_t

*)devName);

nếu ( trạng thái != SL_STATUS_OK ) {


emberAfCorePrintln("Không thể sl_bt_gatt_server_write_attribute_value tên thiết bị. Mã lỗi: 0x%x", status); trở lại;

trạng thái = sl_bt_advertiser_set_timing(adv_handle,


(100 / 0,625), // Khoảng thời gian quảng cáo tối thiểu 100ms tính theo 0,625ms
(100 / 0,625), // Khoảng thời gian quảng cáo tối đa 100ms tính theo 0,625ms // thời
lượng: tiếp tục quảng cáo cho đến khi dừng 0, // max_events: tiếp tục
quảng cáo cho đến khi dừng 0);
if (trạng thái != SL_STATUS_OK) { return;

/* Bắt đầu quảng cáo ở chế độ người dùng và bật kết nối*/ status =
sl_bt_legacy_advertiser_start(adv_handle,
nhà quảng cáo_connectable_scannable);
nếu (trạng thái) {
emberAfCorePrintln("sl_bt_legacy_advertiser_start ERROR : status = 0x%0X", status); } other { emberAfCorePrintln("Đã
bật quảng
cáo tùy chỉnh BLE");

silabs.com | Xây dựng một thế giới kết nối hơn. Phiên bản 0,2 | 11
AN1322: Phát triển đa giao thức động với Bluetooth và Zigbee EmberZNet SDK 7.0 trở lên Làm việc với các
Machine Translated by Google
ví dụ về Zigbee/Bluetooth

}
}

void sl_bt_on_event(sl_bt_msg_t* evt) {

switch (SL_BT_MSG_ID(evt->header)) { case


sl_bt_evt_system_boot_id: { bd_addr ble_address;
loại uint8_t; sl_status_t
status =
sl_bt_system_hello(); emberAfCorePrintln("BLE xin chào: %s",

(trạng thái == SL_STATUS_OK)? "thành công" : "lỗi");

status = sl_bt_system_get_identity_address(&ble_address, &type);


zb_ble_dmp_print_ble_address(ble_address.addr);

status = sl_bt_advertiser_create_set(&adv_handle); nếu (trạng thái) {

emberAfCorePrintln("sl_bt_advertiser_create_set status 0x%x", status);

} // bắt đầu quảng cáo


enableBleAdvertisements();

} phá vỡ;

trường hợp sl_bt_evt_connection_opened_id: {


emberAfCorePrintln("sl_bt_evt_connection_opened_id \n"); sl_bt_evt_connection_opened_t
*conn_evt =
(sl_bt_evt_connection_opened_t*) &(evt->data);

// phy được ưu tiên 1: phy 1M, phy 2: 2M, phy 4: 125k được mã hóa, phy 8: 500k được mã hóa // chấp nhận phy
1: 1M phy, 2: 2M phy, 4: phy được mã hóa, ff: bất kỳ
sl_bt_connection_set_preferred_phy(conn_evt ->kết nối, test_phy_1m, 0xff);

emberAfCorePrintln("Đã mở kết nối BLE");

} phá vỡ;

trường hợp sl_bt_evt_connection_phy_status_id: {


sl_bt_evt_connection_phy_status_t *conn_evt =
(sl_bt_evt_connection_phy_status_t *)&(evt->data);
// cho biết PHY đã được chọn emberAfCorePrintln("hiện đang sử
dụng %dMPHY\r\n", conn_evt->phy);

} phá vỡ;

trường hợp sl_bt_evt_connection_closed_id: {


sl_bt_evt_connection_closed_t *conn_evt =
(sl_bt_evt_connection_closed_t*) &(evt->data);

// khởi động lại quảng cáo


enableBleAdvertisements();

emberAfCorePrintln(
"Đã đóng kết nối BLE, xử lý=0x%x, lý do=0x%2x", conn_evt->kết nối, conn_evt-
>lý do);

} phá vỡ;

mặc định:
phá vỡ;
}

silabs.com | Xây dựng một thế giới kết nối hơn. Phiên bản 0,2 | 12
AN1322: Phát triển đa giao thức động với Bluetooth và Zigbee EmberZNet SDK 7.0 trở lên Làm việc với các
Machine Translated by Google
ví dụ về Zigbee/Bluetooth

3. Lưu dự án Z3Light mới của bạn và nhấp vào Force Generation trong khung tổng quan dự án.

silabs.com | Xây dựng một thế giới kết nối hơn. Phiên bản 0,2 | 13
AN1322: Phát triển đa giao thức động với Bluetooth và Zigbee EmberZNet SDK 7.0 trở lên Làm việc với các
Machine Translated by Google
ví dụ về Zigbee/Bluetooth

4. Xây dựng và flash dự án và tìm kiếm thiết bị trong màn hình “Connected Lighting demo” của ứng dụng điện thoại thông minh EFR Connect.

Bạn cũng có thể xem bản in liên quan đến hoạt động Bluetooth LE trong tab Sê-ri 1 của bảng điều khiển.

Đây là chức năng Bluetooth rất cơ bản. Để tìm hiểu thêm về cách lập trình chức năng Bluetooth LE, hãy xem QSG169: Hướng dẫn bắt đầu nhanh Bluetooth® SDK v3.x.

silabs.com | Xây dựng một thế giới kết nối hơn. Phiên bản 0,2 | 14
AN1322: Phát triển đa giao thức động với Bluetooth và Zigbee EmberZNet SDK 7.0 trở lên Giới thiệu về các ví
Machine Translated by Google
dụ về Zigbee/Bluetooth LE

3 Giới thiệu về Zigbee/Bluetooth LE Ví dụ

Các ví dụ về Đa giao thức động Zigbee/Bluetooth LE cho thấy ánh sáng có thể được điều khiển qua Bluetooth LE và Zigbee. Các ví dụ về phần mềm có thể được
biên dịch bằng cách sử dụng các ứng dụng SoC mẫu trong EmberZNet SDK. Mục đích của các ví dụ là để chỉ ra cách triển khai ứng dụng đa giao thức động bằng cách
sử dụng ngăn xếp EmberZNet của Phòng thí nghiệm Silicon.

Ứng dụng Dynamic Multiprotocol Demo có các thành phần chính này.

1. Giao diện người dùng Mainboard (LCD, Buttons, LEDs (tùy chọn cho các bộ phận có các thiết bị ngoại vi này)

2. Ứng dụng Zigbee (Điều phối viên hoặc Thiết bị kết thúc buồn ngủ)

3. Ứng dụng Bluetooth 4. Giao

diện CLI

3.1 Giao diện người dùng Mainboard

Mã ứng dụng giao diện bo mạch chủ có ba thành phần chính. Những điều này giúp nâng cao trải nghiệm người dùng, nhưng không cần thiết đối với chức năng cốt
lõi của DMP. Nếu bảng radio demo của bạn không hỗ trợ LCD, phiên bản tối thiểu của các ứng dụng này sẽ tự động được chọn và các nút, đèn LED và các thành
phần LCD sẽ tự động bị xóa khỏi dự án.

3.1.1 Các nút

Các ứng dụng mẫu DynamicMultiprotocol sử dụng hai nút trên bo mạch chính. Chức năng này được cung cấp bằng cách sử dụng hai phiên bản của thành phần Nút đơn
giản và có thể dễ dàng gỡ cài đặt nếu bo mạch chính không có nút. Nút PB0 chuyển đổi trạng thái cục bộ của đèn. Nút PB1 điều khiển các hoạt động của mạng như
biểu mẫu, tham gia và rời khỏi.

3.1.2 Đèn LED

Ứng dụng mẫu hiển thị trạng thái hiện tại của đèn Bật/Tắt bằng hai đèn LED trên bo mạch chính. Mã ứng dụng này được cung cấp bằng cách sử dụng hai phiên bản
của thành phần LED đơn giản .

3.1.3 LCD

Màn hình LCD nâng cao trải nghiệm tổng thể của người dùng bằng cách cung cấp các hướng dẫn hữu ích và hiển thị trạng thái của nút. Chức năng này được cung
cấp bằng cách sử dụng thành phần Màn hình LCD Zigbee . Thành phần này cung cấp các API để cập nhật văn bản và đồ họa trên màn hình LCD. Các API này được gọi
từ các hàm gọi lại Zigbee và trình xử lý sự kiện Bluetooth của ứng dụng.

3.2 Tác vụ giao diện dòng lệnh (CLI)

Tác vụ CLI chạy dưới dạng tác vụ có mức độ ưu tiên tương đối thấp và xử lý các lệnh cũng như hiển thị đầu ra. Vì tác vụ CLI có thể thực thi các chức năng
không an toàn theo luồng, nên việc chuyển đổi tác vụ bị khóa trong hàm hook trước lệnh (sli_cli_pre_cmd_hook) trước khi được thực thi. Chuyển đổi tác vụ
RTOS được khôi phục trong chức năng hook sau lệnh (sli_cli_post_cmd_hook). Các lệnh CLI cũng đăng semaphore và cho phép tác vụ Zigbee RTOS chạy bằng cách gọi

hàm sl_zigbee_common_rtos_wakeup_stack_task() trong hook lệnh đăng.

silabs.com | Xây dựng một thế giới kết nối hơn. Phiên bản 0,2 | 15
AN1322: Phát triển đa giao thức động với Bluetooth và Zigbee EmberZNet SDK 7.0 trở lên Giới thiệu về các ví
Machine Translated by Google
dụ về Zigbee/Bluetooth LE

3.3 Ứng dụng Zigbee

Ứng dụng mẫu DynamicMultiprotocolLight là một điều phối viên Zigbee và DyamicMultiprotocolLightSed là một thiết bị cuối buồn ngủ Zigbee.
Cả hai ứng dụng mẫu đều minh họa đèn không dây có thể được điều khiển cục bộ bằng nút hoặc không dây bằng công tắc Zigbee hoặc ứng dụng
di động Bluetooth LE.

Bộ cụm sau đây được cả ứng dụng DynamicMultiprotocolLight và DynamicMultiprotocolLightSed hỗ trợ :


• Nền tảng

• Nhận dạng

• Cảnh

• Các nhóm
• Bật/Tắt

• Vận hành ZLL

Ví dụ DynamicMultiprotocolLight cũng hỗ trợ điểm cuối Green Power Proxy Basic. Lưu ý rằng các ví dụ được phát triển với trọng tâm là thể
hiện các tính năng đa giao thức động và có thể không được Zigbee chứng nhận.

Cụm On/Off điều khiển các đèn LED và biểu tượng bóng đèn trên màn hình LCD của mainboard để thể hiện trạng thái của đèn.

3.3.1 Tác vụ Zigbee RTOS

Các ứng dụng mẫu DMP sử dụng cấu trúc CMSIS-RTOS2 và do đó được cấu trúc để hỗ trợ Micrium OS hoặc FreeRTOS, mặc dù chỉ Micrium OS được hỗ
trợ trong phiên bản này. Các tác vụ RTOS là: • Tác vụ lớp liên kết Bluetooth

(mức ưu tiên: 52) • Tác vụ ngăn xếp máy

chủ Bluetooth (mức độ ưu tiên: 51) • Tác

vụ xử lý sự kiện Bluetooth (mức độ ưu tiên:

50) • Tác vụ ứng dụng và ngăn xếp Zigbee (mức độ ưu

tiên: 49) • Giao diện dòng lệnh nhiệm vụ (ưu tiên: 16)

Các tác vụ này đều được tạo độc lập với nhau. Cấu hình liên quan đến tác vụ Zigbee RTOS nằm trong thành phần Chung của Khung ứng dụng
Zigbee .

Lưu ý rằng không được thay đổi mức độ ưu tiên của tác vụ Zigbee và Bluetooth so với giá trị mặc định của chúng để đảm bảo rằng ứng dụng
hoạt động như dự định. Mọi tác vụ RTOS của ứng dụng phải có mức độ ưu tiên thấp hơn tác vụ RTOS trong ngăn xếp Zigbee và có thể được tạo
trong tệp ứng dụng theo mã ví dụ trong phần này. Tác vụ RTOS ngăn xếp Zigbee được tạo trong sli_zigbee_common_rtos_init_callback, tác vụ
này lần lượt được gọi từ trình xử lý sự kiện stack_init, đây là một tệp được tạo tự động.

void sli_zigbee_common_rtos_init_callback(void) {

App_OS_SetAllHooks();

// Tạo tác vụ ZigBee.


zigbee_task_attr.name = "Nhiệm vụ Zigbee";
zigbee_task_attr.stack_mem = &zigbee_task_stack[0];
zigbee_task_attr.stack_size = sizeof(zigbee_task_stack); zigbee_task_attr.cb_mem
= zigbee_task_cb; zigbee_task_attr.cb_size =
osThreadCbSize; zigbee_task_attr.priority =
ZIGBEE_STACK_TASK_PRIORITY; zigbee_task_attr.attr_bits = 0;

silabs.com | Xây dựng một thế giới kết nối hơn. Phiên bản 0,2 | 16
AN1322: Phát triển đa giao thức động với Bluetooth và Zigbee EmberZNet SDK 7.0 trở lên Giới thiệu về các ví
Machine Translated by Google
dụ về Zigbee/Bluetooth LE

zigbee_task_attr.tz_module = 0;

zigbee_task_id = osThreadNew(zigbee_task,
NULL,
&zigbee_task_attr);
khẳng định (zigbee_task_id != NULL);

zigbee_task_event_flags_id = osEventFlagsNew(&zigbee_task_event_flags_attr); khẳng định


(zigbee_task_event_flags_id != NULL);
}

Tác vụ Zigbee gọi các lệnh gọi lại khởi tạo khung ứng dụng và ngăn xếp trước khi chạy vòng lặp while. Các lệnh gọi lại đánh dấu được thực thi
trong vòng lặp, theo đó tác vụ Zigbee tạo ra, nếu có thể, để cho phép bộ vi điều khiển chuyển sang chế độ năng lượng thấp.

khoảng trống tĩnh zigbee_task(void *p_arg) {

(void)p_arg;

sli_zigbee_stack_init_callback();
sli_zigbee_app_framework_init_callback();

trong khi (đúng)


{ sli_zigbee_stack_tick_callback();
sli_zigbee_app_framework_tick_callback();

// Nhường nhiệm vụ ngăn xếp ZigBee nếu có thể.


zigbee_stack_task_yield();
}
}

Một số cơ chế ghi đè ứng dụng kiểm soát xem bộ vi điều khiển có được phép chuyển sang chế độ ngủ (EM2) hay không hoạt động (EM1) hay không.
Các cờ này, kết hợp với thời gian đến ứng dụng gần nhất hoặc sự kiện ngăn xếp, kiểm soát thời gian thực hiện tác vụ Zigbee RTOS. Các tùy chọn
này cũng được định cấu hình trong thành phần Chung của Khung ứng dụng Zigbee .

silabs.com | Xây dựng một thế giới kết nối hơn. Phiên bản 0,2 | 17
AN1322: Phát triển đa giao thức động với Bluetooth và Zigbee EmberZNet SDK 7.0 trở lên Giới thiệu về các ví
Machine Translated by Google
dụ về Zigbee/Bluetooth LE

3.3.2 Mã ứng dụng

Trên cả hai ứng dụng DMP light, sau khi ngăn xếp Zigbee được thiết lập để chạy, các tương tác tiếp theo với ngăn xếp sẽ xảy ra thông qua trình xử lý sự kiện.
Hình dưới đây cho thấy các trình xử lý sự kiện trong ứng dụng ánh sáng đầy đủ chức năng.

Mỗi cụm được kích hoạt phải có một thành phần tương ứng xử lý các cuộc gọi lại cho cụm. Ngoài ra, điều này có thể được cung cấp bởi một triển khai tùy chỉnh
trong tệp gọi lại dự án. Ngoài ra, tệp gọi lại Zigbee đăng ký các lệnh gọi lại ngăn xếp tùy chọn, chẳng hạn như các lệnh gọi lại trạng thái ngăn xếp, để hiển
thị trạng thái mạng và thực hiện các hoạt động khác dựa trên sự thay đổi trạng thái.

Bất cứ khi nào ứng dụng mẫu điều phối viên bắt đầu tham gia, nó sẽ bắt đầu nhận dạng và cũng đặt tất cả các đèn được kết nối ở chế độ nhận dạng. Điều này giúp
công tắc tham gia xác định tất cả các đèn có trong mạng. Ứng dụng mẫu buồn ngủ cũng thực hiện tương tự đối với lệnh gọi lại trạng thái lái.

Thuộc tính Bật/Tắt có thể được thay đổi cục bộ bằng nút PB0. Quy trình button_on_change ISR kích hoạt khi thay đổi trạng thái nút.
Lưu ý rằng, vì quy trình này được thực thi từ ngữ cảnh ngắt, nên không nên in các thông báo trong quy trình này. Vì lý do
này, khi dấu thời gian được ghi lại và trạng thái được đặt, một trình xử lý sự kiện riêng biệt được đặt thành hoạt động để
xử lý thêm thao tác nhấn nút. Do trình xử lý sự kiện chạy từ bối cảnh tác vụ Zigbee, semaphore phải được đăng bằng cách gọi
hàm sl_zigbee_com mon_rtos_wakeup_stack_task().

Thuộc tính Bật/Tắt cũng có thể được thay đổi bằng cách nhận lệnh chuyển đổi bật tắt Zigbee từ một thiết bị từ xa như Z3Switch. Đường dẫn này đi theo
emberAfPostAttributeChangeCallback. Bất kỳ thay đổi nào đối với thuộc tính cũng sẽ kích hoạt thông báo qua kết nối Bluetooth LE, nếu một kết nối đang mở. Ngoài
trạng thái, nguồn kích hoạt và EUI của nguồn kích hoạt được ghi lại để theo dõi.

Thuộc tính Bật/Tắt cũng có thể được sửa đổi bằng ứng dụng di động EFR Connect. Đèn hiển thị trên ứng dụng là “DMPxxxx”, trong đó xxxx là bốn chữ số cuối của
địa chỉ MAC Bluetooth LE. Đặc điểm có thể được đọc và ghi bằng ứng dụng di động.
Điều này kích hoạt thay đổi đối với thuộc tính Zigbee.

THẬN TRỌNG: Ngăn xếp Zigbee không an toàn cho luồng và không được thiết kế để an toàn cho luồng. Do đó, tất cả lệnh gọi đến các chức năng của EmberZNet phải
được thực hiện từ tác vụ Zigbee để tránh rủi ro xảy ra sự cố tương tranh. Để tránh rủi ro về tài nguyên được chia sẻ, nếu bạn muốn gửi tin nhắn Zigbee hoặc
sử dụng các chức năng EmberZNet từ một tác vụ không phải là Tác vụ ngăn xếp Zigbee, thì bạn phải lên lịch một sự kiện tùy chỉnh từ trong tác vụ không phải là
Zigbee Stack. Trong hàm xử lý sự kiện tương ứng cho sự kiện tùy chỉnh, API ngăn xếp Zigbee có thể được sử dụng vì trình xử lý sự kiện sẽ được gọi từ bối cảnh
Nhiệm vụ ngăn xếp Zigbee.

silabs.com | Xây dựng một thế giới kết nối hơn. Phiên bản 0,2 | 18
AN1322: Phát triển đa giao thức động với Bluetooth và Zigbee EmberZNet SDK 7.0 trở lên Giới thiệu về các ví
Machine Translated by Google
dụ về Zigbee/Bluetooth LE

3.4 Ứng dụng Bluetooth

Ứng dụng Bluetooth hỗ trợ các dịch vụ và đặc điểm sau. Chúng được chọn trước trong trình chỉnh sửa GATT trong quá trình tạo dự án.

3.4.1 Dịch vụ ánh sáng Silabs DMP

Trong bảng trên, 'Silabs DMP Light' là dịch vụ tùy chỉnh có UUID là bae55b96-7d19-458d-970c-50613d801bc9. UUID tùy chỉnh này được sử dụng để
nhận dạng duy nhất Ánh sáng bằng ứng dụng EFR Connect.

Dịch vụ có hai đặc điểm,

3.4.2 Đèn hiệu

Ứng dụng này triển khai cả iBeacon cũng như đèn hiệu Eddystone. Hành vi mặc định là truyền từng đèn hiệu ở các khoảng thời gian 100 mS.

silabs.com | Xây dựng một thế giới kết nối hơn. Phiên bản 0,2 | 19
AN1322: Phát triển đa giao thức động với Bluetooth và Zigbee EmberZNet SDK 7.0 trở lên Giới thiệu về các ví
Machine Translated by Google
dụ về Zigbee/Bluetooth LE

3.4.3 Xử lý sự kiện Bluetooth

Ngăn xếp Bluetooth được khởi tạo như một phần của tác vụ Bluetooth. Tác vụ Bluetooth xử lý việc quản lý và nhắn tin lớp liên kết Bluetooth LE. Một số
sự kiện được gọi trong ngữ cảnh của tác vụ Zigbee cho phép ứng dụng người dùng tương tác với ngăn xếp Bluetooth. Sơ đồ sau đây mô tả các sự kiện liên
quan đến Bluetooth..

Lưu ý: Xử lý sự kiện Bluetooth giống nhau cho cả hai bản trình diễn DMP.

Hình 3-1. Định nghĩa trình xử lý sự kiện Bluetooth DMP

silabs.com | Xây dựng một thế giới kết nối hơn. Phiên bản 0,2 | 20
AN1322: Phát triển đa giao thức động với Bluetooth và Zigbee EmberZNet SDK 7.0 trở lên Giới thiệu về các ví
Machine Translated by Google
dụ về Zigbee/Bluetooth LE

3.4.4 Tương tác Bluetooth và Zigbee

Mục đích chính của các ứng dụng ví dụ là hiển thị Zigbee và Bluetooth hoạt động cùng nhau trên một thiết bị. Với mục đích này, khi Light nhận được lệnh thay
đổi trạng thái của nó thông qua một giao thức, nó sẽ thực thi lệnh đó và gửi thông báo đến các thiết bị khác bằng giao thức khác để giữ mọi thứ đồng bộ. Tương
tác của họ là như nhau trong cả hai ví dụ.

Hai thao tác cơ bản được mô tả bên dưới, đầu tiên là ghi vào các đặc tính của Ánh sáng từ thiết bị được kết nối Bluetooth (hiển thị trong hình dưới đây) và
sau đó là thay đổi trạng thái Ánh sáng từ thiết bị Zigbee.

Viết từ thiết bị được kết nối Bluetooth

Các dịch vụ và đặc điểm của ứng dụng được chọn trước trong bộ cấu hình GATT trong Simplicity Studio. Khi tạo, các đặc điểm là #define trong gatt_db.h. Sử
dụng tham chiếu #define, các đặc điểm sau đó có thể được ghép nối để đọc và ghi các yêu cầu Bluetooth. Ví dụ: đặc tính Light được tham chiếu từ GATT dưới
dạng gatt_light_state, sau đó được liên kết với API ghi dành riêng cho ứng dụng của writeLightState trong AppCfgGattServerUserWriteRequest trong
sl_bt_event_handler.c.

Ứng dụng thực hiện ghi thuộc tính Zigbee và phản hồi ghi Bluetooth trong hàm writeLightState. Vì các hàm ember không an toàn cho luồng, nên ứng dụng đăng một
sự kiện Zigbee và một semaphore để đánh thức tác vụ Zigbee và gọi hàm AfWriteAttribute của ember .

Hàm emberAfWriteAttribute() dùng để ghi bảng thuộc tính của ứng dụng Zigbee với giá trị được cung cấp bởi thiết bị kết nối Bluetooth ở trên. Vì thuộc tính bật

tắt của cụm máy chủ bật tắt là thuộc tính có thể báo cáo, nên nó được báo cáo cho tất cả các thiết bị được thiết lập trong bảng ràng buộc của Ánh sáng.

Hàm emberAfPostAttributeChangeCallback() sau đó được sử dụng để thay đổi trạng thái của đèn LED và màn hình LCD để biểu thị trạng thái của đèn trên bo mạch

chính WSTK.

Viết từ thiết bị được kết nối Zigbee

Bất kỳ máy khách bật tắt nào trên cùng một mạng với Light đều có thể gửi lệnh Bật, Tắt hoặc Chuyển đổi của cụm bật tắt tới Light để thay đổi trạng thái của
nó. Sau khi nhận được một lệnh như vậy qua giao diện Zigbee, khung Zigbee của Phòng thí nghiệm Silicon sẽ diễn giải lệnh đó và gọi một trình xử lý riêng
thích hợp để thay đổi giá trị của thuộc tính bật tắt của cụm máy chủ bật tắt. Trong ví dụ về ứng dụng Z3Switch , ứng dụng bật tắt sẽ gửi một lệnh Toggle tới
Light, lệnh này sẽ bật/tắt giá trị của thuộc tính bật tắt và kích hoạt geCallback emberAfPostAttributeChan. Sau đó, lệnh gọi lại được sử dụng để thay đổi
trạng thái của đèn cũng như gửi thông báo về cả Nguồn kích hoạt và đặc điểm của Đèn tới các thiết bị Bluetooth được kết nối, đồng thời cập nhật đèn LED và
màn hình LCD để biểu thị sự thay đổi ở trạng thái Đèn. Bạn có thể tìm thấy mã ví dụ cho lệnh gọi lại trong tệp lệnh gọi lại của dự án.

silabs.com | Xây dựng một thế giới kết nối hơn. Phiên bản 0,2 | 21
AN1322: Phát triển đa giao thức động với Bluetooth và Zigbee EmberZNet SDK 7.0 trở lên Lịch sử sửa đổi
Machine Translated by Google
tài liệu

4 Lịch sử sửa đổi tài liệu

Bản sửa đổi 0,2

Tháng 3 năm

2023 • Đã thêm cảnh báo về an toàn luồng vào phần 3.2.2

Bản sửa đổi 0,1

tháng 12 năm 2021

• phát hành lần đầu

silabs.com | Xây dựng một thế giới kết nối hơn. Phiên bản 0,2 | 22
Machine Translated by Google

đơn giản Studio


Truy cập bằng một cú nhấp chuột vào MCU và không dây

công cụ, tài liệu, phần mềm, thư


viện mã nguồn, v.v. Có sẵn cho Windows, Mac

và Linux!

Danh mục đầu tư IoT SW/HW Chất Hỗ trợ & Cộng đồng
www.silabs.com/IoT www.silabs.com/simplicity lượng www.silabs.com/quality www.silabs.com/community

từ chối trách nhiệm

Phòng thí nghiệm Silicon dự định cung cấp cho khách hàng tài liệu chuyên sâu, chính xác và mới nhất về tất cả các thiết bị ngoại vi và mô-đun có sẵn cho những người cố vấn triển khai hệ thống
và phần mềm đang sử dụng hoặc có ý định sử dụng các sản phẩm của Phòng thí nghiệm Silicon. Dữ liệu mô tả đặc điểm, các mô-đun và thiết bị ngoại vi có sẵn, kích thước bộ nhớ và địa chỉ bộ nhớ
đề cập đến từng thiết bị cụ thể và các thông số “Điển hình” được cung cấp có thể và thực sự khác nhau trong các ứng dụng khác nhau. Các ví dụ ứng dụng được mô tả ở đây chỉ nhằm mục đích minh
họa. Silicon Labs có quyền thực hiện các thay đổi mà không cần thông báo thêm đối với thông tin sản phẩm, thông số kỹ thuật và mô tả ở đây và không đưa ra bảo đảm về tính chính xác hoặc tính
đầy đủ của thông tin được bao gồm. Không cần thông báo trước, Silicon Labs có thể cập nhật chương trình cơ sở của sản phẩm trong quá trình sản xuất vì lý do bảo mật hoặc độ tin cậy. Những
thay đổi như vậy sẽ không làm thay đổi thông số kỹ thuật hoặc hiệu suất của sản phẩm. Silicon Labs sẽ không chịu trách nhiệm về hậu quả của việc sử dụng thông tin được cung cấp trong tài liệu
này. Tài liệu này không ngụ ý hoặc cấp rõ ràng bất kỳ giấy phép nào để thiết kế hoặc chế tạo bất kỳ mạch tích hợp nào. Các sản phẩm không được thiết kế hoặc cho phép sử dụng trong bất kỳ thiết
bị Cấp III nào của FDA, các ứng dụng cần có sự chấp thuận trước khi tiếp thị của FDA hoặc Hệ thống Hỗ trợ Sự sống mà không có sự đồng ý cụ thể bằng văn bản của Phòng thí nghiệm Silicon. “Hệ
thống hỗ trợ sự sống” là bất kỳ sản phẩm hoặc hệ thống nào nhằm hỗ trợ hoặc duy trì sự sống và/hoặc sức khỏe, nếu không thành công, có thể dẫn đến thương tích cá nhân nghiêm trọng hoặc tử vong.
Các sản phẩm của Silicon Labs không được thiết kế hoặc ủy quyền cho các ứng dụng quân sự. Trong mọi trường hợp, các sản phẩm của Silicon Labs sẽ không được sử dụng làm vũ khí hủy diệt hàng
loạt bao gồm (nhưng không giới hạn ở) vũ khí hạt nhân, sinh học hoặc hóa học hoặc tên lửa có khả năng mang những vũ khí đó. Phòng thí nghiệm Silicon từ chối tất cả các bảo đảm rõ ràng và ngụ ý
và sẽ không chịu trách nhiệm hoặc trách nhiệm pháp lý đối với bất kỳ thương tích hoặc thiệt hại nào liên quan đến việc sử dụng sản phẩm của Phòng thí nghiệm Silicon trong các ứng dụng trái phép như v
Lưu ý: Nội dung này có thể chứa thuật ngữ xúc phạm hiện đã lỗi thời. Silicon Labs đang thay thế các điều khoản này bằng ngôn ngữ bao gồm bất cứ khi nào có thể. Để biết thêm thông tin, hãy truy
cập www.silabs.com/about-us/inclusive-lexicon-project

Thông tin nhãn hiệu

Silicon Laboratories Inc.®, Silicon Laboratories®, Silicon Labs®, SiLabs® và logo Silicon Labs®, Bluegiga®, Bluegiga Logo®, EFM®, EFM32®, EFR, Ember®, Energy Micro, Energy Micro logo và sự kết
hợp của chúng , “bộ vi điều khiển thân thiện với năng lượng nhất thế giới”, Redpine Signals®, WiSeConnect , n-Link, ThreadArch®, EZLink®, EZRadio®, EZRadioPRO®, Gecko®, Gecko OS, Gecko OS
Studio, Precision32®, Simplicity Studio®, Telegesis , Telegesis Logo®, USBXpress® , Zentri, logo Zentri và Zentri DMS, Z-Wave® và các nhãn hiệu khác là nhãn hiệu hoặc nhãn hiệu đã đăng ký của
Silicon Labs. ARM, CORTEX, Cortex-M3 và THUMB là các nhãn hiệu hoặc nhãn hiệu đã đăng ký của ARM Holdings. Keil là nhãn hiệu đã đăng ký của ARM Limited. Wi-Fi là nhãn hiệu đã đăng ký của Wi-Fi
Alliance. Tất cả các sản phẩm hoặc tên thương hiệu khác được đề cập ở đây là thương hiệu của chủ sở hữu tương ứng.

Phòng thí nghiệm Silicon Inc.


400 Tây Cesar Chavez
Austin, TX 78701
Hoa Kỳ

www.silabs.com

You might also like