Zigbee Module

Zigbee 是 M5Stack 推出的自组织网络通信模块。该模块采用 CC2630F128 方案,内部集成 Zigbee 协议栈,并提供开放的串行通信接口。它配备外置天线,单节点稳定通信距离最高可达 1 km,并支持最高 200 级路由深度。通过 MESH 组网,它可以显著扩展 IoT 应用的覆盖范围,同时具备超低功耗与高灵敏度。Zigbee 网络可支持数百个节点,并具备增强的安全特性,为家庭与楼宇自动化提供完整且可互操作的 IoT 解决方案。

支持以下产品:

"""ZigbeeModule"""

MicroPython TX 应用示例:

 1# SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
 2#
 3# SPDX-License-Identifier: MIT
 4
 5import os, sys, io
 6import M5
 7from M5 import *
 8from module import ZigbeeModule
 9import time
10
11
12label0 = None
13com_zigbee_0 = None
14zigbee_0 = None
15
16
17def setup():
18    global label0, com_zigbee_0, zigbee_0
19
20    M5.begin()
21    Widgets.fillScreen(0x222222)
22    label0 = Widgets.Label("label0", 32, 35, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
23
24    com_zigbee_0 = ZigbeeModule(2, 17, 18, verbose=True)
25    com_zigbee_0.set_module_param(
26        ZigbeeModule.DEVICE_TYPE_COORDINATOR,
27        0x1620,
28        11,
29        ZigbeeModule.TRANSFER_MODE_PASS_THROUGH,
30        0x6677,
31    )
32    label0.setText(str("start"))
33
34
35def loop():
36    global label0, com_zigbee_0, zigbee_0
37    M5.update()
38    com_zigbee_0.p2p_transmission(0x0066, "p2p")
39    time.sleep(3)
40    com_zigbee_0.broadcast("broadcast")
41    time.sleep(3)
42
43
44if __name__ == "__main__":
45    try:
46        setup()
47        while True:
48            loop()
49    except (Exception, KeyboardInterrupt) as e:
50        try:
51            com_zigbee_0.stop_receive()
52            from utility import print_error_msg
53
54            print_error_msg(e)
55        except ImportError:
56            print("please update to latest firmware")

MicroPython 应用示例:

 1# SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
 2#
 3# SPDX-License-Identifier: MIT
 4
 5import os, sys, io
 6import M5
 7from M5 import *
 8from module import ZigbeeModule
 9
10
11label0 = None
12com_zigbee_0 = None
13
14
15zigbee_str_data = None
16zigbee_dest_address = None
17zigbee_src_address = None
18
19
20def com_zigbee_0_receive_event(dest_address, src_address, received_data):
21    global label0, com_zigbee_0, zigbee_str_data, zigbee_dest_address, zigbee_src_address
22    zigbee_dest_address = dest_address
23    zigbee_src_address = src_address
24    try:
25        zigbee_str_data = received_data.decode()
26    except:
27        zigbee_str_data = str(received_data)
28    label0.setText(str(zigbee_str_data))
29
30
31def setup():
32    global label0, com_zigbee_0, zigbee_str_data, zigbee_dest_address, zigbee_src_address
33
34    M5.begin()
35    Widgets.fillScreen(0x222222)
36    label0 = Widgets.Label("label0", 50, 34, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
37
38    com_zigbee_0 = ZigbeeModule(2, 14, 13, verbose=True)
39    com_zigbee_0.set_module_param(
40        ZigbeeModule.DEVICE_TYPE_ROUTER,
41        0x1620,
42        11,
43        ZigbeeModule.TRANSFER_MODE_PASS_THROUGH,
44        0x0066,
45    )
46    while not (com_zigbee_0.isconnected()):
47        pass
48    label0.setText(str(com_zigbee_0.get_custom_address()))
49    com_zigbee_0.receive_none_block(com_zigbee_0_receive_event)
50
51
52def loop():
53    global label0, com_zigbee_0, zigbee_str_data, zigbee_dest_address, zigbee_src_address
54    M5.update()
55
56
57if __name__ == "__main__":
58    try:
59        setup()
60        while True:
61            loop()
62    except (Exception, KeyboardInterrupt) as e:
63        try:
64            com_zigbee_0.stop_receive()
65            from utility import print_error_msg
66
67            print_error_msg(e)
68        except ImportError:
69            print("please update to latest firmware")

UIFLOW2 TX 应用示例:

tx_example.png

UiFlow2 RX 应用示例:

rx_example.png

cores3_zigbee_tx_example.m5f2

stickc_plus2_zigbee_rx_example.m5f2

class ZigbeeModule

Constructors

class ZigbeeModule(id: Literal[0, 1, 2], port: list | tuple, verbose: bool = True)

创建一个 Zigbee 单元。

参数:
  • id – 单元的 ID。

  • port – 设备连接到的端口。

  • verbose – 打印日志信息。默认值为 True。

UIFLOW2:

init.png

Methods

ZigbeeModule.set_module_param(device_type: int, pan_id: int, channel: int, transfer_mode: int, custom_address: int, ant_type: int, encryption_enable=ENCRYPTION_ENABLE, encryption_key=b'\x11\x12\x13\x14', node_type=DEVICE_TYPE_ROUTER, node_ant_type=ANT_TYPRE_ON_BOARD, node_transfer_mode=TRANSFER_MODE_PASS_THROUGH, node_custom_address=0x0066)
参数:
  • device_type (int) – Zigbee 模块的设备类型。

  • pan_id (int) – Zigbee 模块的 PAN ID。PAN ID 是一个 16 位的值,用于标识网络。

  • channel (int) – Zigbee 模块的信道。信道范围为 11 到 26。

  • transfer_mode (int) – Zigbee 模块的传输模式。

  • custom_address (int) – Zigbee 模块的自定义地址。

  • ant_type (int) – Zigbee 模块的天线类型。

  • encryption_enable (int) – Zigbee 模块的加密状态。

  • encryption_key (bytes) – Zigbee 模块的加密密钥。

  • node_type (int) – Zigbee 模块的节点类型。

  • node_ant_type (int) – Zigbee 节点的天线类型。

  • node_transfer_mode (int) – Zigbee 节点的传输模式。

  • node_custom_address (int) – Zigbee 节点的自定义地址。

设置 Zigbee 模块的参数。

UIFLOW2:

set_module_param.png

set_module_param1.png

set_module_param2.png

ZigbeeModule.set_device_type(device_type: int)
参数:

device_type (int) – Zigbee 模块的设备类型。

设置 Zigbee 模块的设备类型。

UIFLOW2:

set_device_type.png

ZigbeeModule.set_pan_id(pan_id: int)
参数:

pan_id (int) – Zigbee 模块的 PAN ID。

设置 Zigbee 模块的 PAN ID。

UIFLOW2:

set_pan_id.png

ZigbeeModule.set_channel(channel: int)
参数:

channel (int) – Zigbee 模块的通道。

设置 Zigbee 模块的信道。

UIFLOW2:

set_channel.png

ZigbeeModule.set_transfer_mode(transfer_mode: int)
参数:

transfer_mode (int) – Zigbee 模块的传输模式。

设置 Zigbee 模块的传输模式。

UIFLOW2:

set_transfer_mode.png

ZigbeeModule.get_custom_address() int

获取 Zigbee 模块的自定义地址。

返回:

Zigbee 模块的自定义地址。

UIFLOW2:

get_custom_address.png

ZigbeeModule.set_custom_address(custom_address: int)
参数:

custom_address (int) – Zigbee 模块的自定义地址。

设置 Zigbee 模块的自定义地址。

UIFLOW2:

set_custom_address.png

ZigbeeModule.set_ant_type(ant_type: int)
参数:

ant_type (int) – Zigbee 模块的天线类型。

设置 Zigbee 模块的天线类型。

UIFLOW2:

set_ant_type.png

ZigbeeModule.get_short_address() int

获取 Zigbee 模块的短地址。

返回:

Zigbee 模块的短地址。

UIFLOW2:

get_short_address.png

ZigbeeModule.isconnected() bool

检查 Zigbee 模块是否已连接到 Zigbee 网络。

返回:

如果 Zigbee 模块已连接到 Zigbee 网络,则为 True;否则为 False。

UIFLOW2:

isconnected.png

ZigbeeModule.receive_none_block(receive_callback)
参数:

receive_callback – 当 Zigbee 模块接收到数据时调用的回调函数。

从 Zigbee 模块接收数据。

UIFLOW2:

receive_none_block.png

receive_data_str_event.png

receive_data_event.png

ZigbeeModule.stop_receive()

停止接收来自 Zigbee 模块的数据。

UIFLOW2:

stop_receive.png

ZigbeeModule.p2p_transmission(address: int, data: bytes)
参数:
  • address (int) – 数据发送到的 Zigbee 模块的自定义地址。

  • data (bytes) – 发送到 Zigbee 模块的数据。

向 Zigbee 模块发送数据。

UIFLOW2:

p2p_transmission.png

ZigbeeModule.broadcast(data: bytes)
参数:

data (bytes) – 发送到 Zigbee 模块的数据。

将数据广播到所有 Zigbee 模块。

UIFLOW2:

broadcast.png