Zigbee Unit

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

支持以下产品:

ZigbeeUnit

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 unit import ZigbeeUnit
 9import time
10
11
12label0 = None
13zigbee_0 = None
14
15
16def setup():
17    global label0, zigbee_0
18
19    M5.begin()
20    Widgets.fillScreen(0x222222)
21    label0 = Widgets.Label("label0", 67, 43, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
22
23    zigbee_0 = ZigbeeUnit(1, port=(18, 17), verbose=True)
24    zigbee_0.set_module_param(
25        ZigbeeUnit.DEVICE_TYPE_COORDINATOR,
26        0x1620,
27        11,
28        ZigbeeUnit.TRANSFER_MODE_PASS_THROUGH,
29        0x6677,
30    )
31    label0.setText(str("start"))
32
33
34def loop():
35    global label0, zigbee_0
36    M5.update()
37    zigbee_0.p2p_transmission(0x0066, "p2p")
38    time.sleep(3)
39    zigbee_0.broadcast("broadcast")
40    time.sleep(3)
41
42
43if __name__ == "__main__":
44    try:
45        setup()
46        while True:
47            loop()
48    except (Exception, KeyboardInterrupt) as e:
49        try:
50            from utility import print_error_msg
51
52            print_error_msg(e)
53        except ImportError:
54            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 unit import ZigbeeUnit
 9
10
11label0 = None
12zigbee_0 = None
13
14
15zigbee_str_data = None
16zigbee_dest_address = None
17zigbee_src_address = None
18
19
20def zigbee_0_receive_event(dest_address, src_address, received_data):
21    global label0, 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, zigbee_0, zigbee_str_data, zigbee_dest_address, zigbee_src_address
33
34    M5.begin()
35    label0 = Widgets.Label("label0", 21, 83, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
36
37    zigbee_0 = ZigbeeUnit(1, port=(33, 32), verbose=True)
38    zigbee_0.set_module_param(
39        ZigbeeUnit.DEVICE_TYPE_ROUTER, 0x1620, 11, ZigbeeUnit.TRANSFER_MODE_PASS_THROUGH, 0x0066
40    )
41    while not (zigbee_0.isconnected()):
42        pass
43    label0.setText(str(zigbee_0.get_custom_address()))
44    zigbee_0.receive_none_block(zigbee_0_receive_event)
45
46
47def loop():
48    global label0, zigbee_0, zigbee_str_data, zigbee_dest_address, zigbee_src_address
49    M5.update()
50
51
52if __name__ == "__main__":
53    try:
54        setup()
55        while True:
56            loop()
57    except (Exception, KeyboardInterrupt) as e:
58        try:
59            from utility import print_error_msg
60
61            print_error_msg(e)
62        except ImportError:
63            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 ZigbeeUnit

Constructors

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

创建一个 Zigbee unit。

参数:
  • id – 单元的 ID。

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

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

UiFlow2

init.png

Methods

ZigbeeUnit.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

ZigbeeUnit.set_device_type(device_type: int)
参数:

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

设置 Zigbee 模块的设备类型。

UiFlow2

set_device_type.png

ZigbeeUnit.set_pan_id(pan_id: int)
参数:

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

设置 Zigbee 模块的 PAN ID。

UiFlow2

set_pan_id.png

ZigbeeUnit.set_channel(channel: int)
参数:

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

设置 Zigbee 模块的通道。

UiFlow2

set_channel.png

ZigbeeUnit.set_transfer_mode(transfer_mode: int)
参数:

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

设置 Zigbee 模块的传输模式。

UiFlow2

set_transfer_mode.png

ZigbeeUnit.get_custom_address() int

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

返回:

Zigbee 模块的自定义地址。

UiFlow2

get_custom_address.png

ZigbeeUnit.set_custom_address(custom_address: int)
参数:

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

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

UiFlow2

set_custom_address.png

ZigbeeUnit.set_ant_type(ant_type: int)
参数:

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

设置 Zigbee 模块的天线类型。

UiFlow2

set_ant_type.png

ZigbeeUnit.get_short_address() int

获取 Zigbee 模块的短地址。

返回:

Zigbee 模块的短地址。

UiFlow2

get_short_address.png

ZigbeeUnit.isconnected() bool

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

返回:

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

UiFlow2

isconnected.png

ZigbeeUnit.receive_none_block(receive_callback)
参数:

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

从 Zigbee 模块接收数据。

UiFlow2

receive_none_block.png

receive_data_str_event.png

receive_data_event.png

ZigbeeUnit.stop_receive()

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

UiFlow2

stop_receive.png

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

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

向 Zigbee 模块发送数据。

UiFlow2

p2p_transmission.png

ZigbeeUnit.broadcast(data: bytes)
参数:

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

向所有 Zigbee 模块广播数据。

UiFlow2

broadcast.png