为什么选择 Zigbee 3.0?
在智能家居领域,Zigbee 3.0 可能是被低估最多的协议。相比 Wi-Fi,它的功耗只有 1/10;相比蓝牙,它的覆盖范围更远;相比 Z-Wave,它的成本更低。最关键的是,Zigbee 3.0 统一了之前分裂的标准,让不同品牌的设备可以真正互联互通。
这篇文章,我会带你从零开始搭建一个 Zigbee 3.0 mesh 网络,包括硬件选型、组网配置、代码实现,以及实际部署中会遇到的各种坑。
Zigbee 3.0 核心特性
Zigbee 3.0 相比旧版本有几个关键升级:
统一标准:之前的 Zigbee Light Link、Zigbee Home Automation 等标准各自为政,3.0 把它们整合成一个标准,设备兼容性大幅提升。
真正的 Mesh 网络:每个 Zigbee 设备都可以作为中继节点,信号可以跳跃传输。理论上,只要设备密度足够,覆盖范围可以无限扩展。
超低功耗:终端设备(如传感器)可以进入深度睡眠,两节 AA 电池能用 2-3 年。
2.4GHz 频段:全球通用,不需要像 Sub-1GHz 那样考虑区域差异。
硬件清单
| 设备 | 型号 | 数量 | 单价 | 总价 |
|---|---|---|---|---|
| Zigbee 协调器 | CC2652P USB 棒 | 1 | ¥89 | ¥89 |
| Zigbee 路由器 | ESP32-C6 + Zigbee 模块 | 2 | ¥45 | ¥90 |
| Zigbee 终端 | 温湿度传感器 (Aqara) | 3 | ¥59 | ¥177 |
| Zigbee 终端 | 人体传感器 (Aqara) | 2 | ¥49 | ¥98 |
| 天线 | 2.4GHz 5dBi | 3 | ¥15 | ¥45 |
| 合计 | – | – | – | ¥499 |
购买建议:
- 协调器推荐 CC2652P 芯片的方案,兼容性最好
- 路由器可以用 ESP32-C6 自己 DIY,成本更低
- 终端设备直接买成品,Aqara、小米的都可以
搭建 Zigbee 协调器
协调器是 Zigbee 网络的大脑,负责建立网络、管理设备。我推荐用 Sonoff Zigbee 3.0 USB Dongle Plus,基于 CC2652P 芯片,¥89 包邮。
收到后先刷最新固件:
# 下载固件
wget https://github.com/Koenkk/Z-Stack-firmware/raw/master/coordinator/Z-Stack_3.x.0/bin/CC1352P2_CC2652P_launchpad_coordinator_*.zip
# 解压
unzip CC1352P2_CC2652P_launchpad_coordinator_*.zip
# 刷写固件(需要 cc2538-bsl 工具)
python3 cc2538-bsl.py -ewv -p /dev/ttyUSB0 CC1352P2_CC2652P_launchpad_coordinator.hex
刷完后,设备会出现在 /dev/ttyUSB0(Linux)或 COM3(Windows)。
使用 Zigbee2MQTT 管理网络
Zigbee2MQTT 是目前最流行的 Zigbee 管理软件,支持 200+ 设备,还能对接 Home Assistant。
安装步骤:
# 克隆仓库
git clone https://github.com/Koenkk/zigbee2mqtt.git
cd zigbee2mqtt
# 安装依赖
npm ci
# 复制配置文件
cp configuration.example.yaml configuration.yaml
# 编辑配置
nano configuration.yaml
配置文件关键部分:
# 串口配置
serial:
port: /dev/ttyUSB0
adapter: zstack
# MQTT 配置
mqtt:
base_topic: zigbee2mqtt
server: \'mqtt://localhost:1883\'
# 前端界面
frontend:
port: 8080
host: 0.0.0.0
# 设备权限
permit_join: true
启动服务:
# 后台运行
npm start
# 或者用 systemd 管理
sudo systemctl enable zigbee2mqtt
sudo systemctl start zigbee2mqtt
访问 http://你的服务器 IP:8080 就能看到管理界面。
配对设备
在管理界面点击\"Permit Join\"(允许加入),然后在 60 秒内给设备通电。
配对技巧:
- 终端设备尽量靠近协调器(1 米内)
- 路由器设备可以先配对,再移到目标位置
- 配对成功后,设备会显示在列表中
配对完成后,你会看到类似这样的设备列表:
设备 0x00158d0001234567
型号:lumi.weather
名称:温湿度传感器_客厅
电池:95%
信号强度:-45 dBm
设备 0x00158d0001234568
型号:lumi.sensor_motion
名称:人体传感器_玄关
电池:100%
信号强度:-52 dBm
代码示例:读取传感器数据
Zigbee2MQTT 会自动把设备数据发布到 MQTT 主题。用 Python 订阅数据非常简单:
import paho.mqtt.client as mqtt
import json
# MQTT 回调
def on_message(client, userdata, msg):
data = json.loads(msg.payload)
print(f\"设备:{msg.topic}\")
print(f\"温度:{data.get(\'temperature\')}°C\")
print(f\"湿度:{data.get(\'humidity\')}%\")
print(f\"电池:{data.get(\'battery\')}%\")
# 连接 MQTT
client = mqtt.Client()
client.connect(\"localhost\", 1883, 60)
client.subscribe(\"zigbee2mqtt/温湿度传感器_客厅\")
client.on_message = on_message
# 开始监听
client.loop_forever()
输出示例:
设备:zigbee2mqtt/温湿度传感器_客厅
温度:24.5°C
湿度:58%
电池:95%
组建 Mesh 网络
Zigbee 的 Mesh 网络是自动形成的,但有几个要点需要注意:
路由器选择:
- 插电设备(如智能插座、灯泡)自动成为路由器
- 电池设备只能是终端,不能中继
- 建议每 10-15 米部署一个路由器
网络拓扑优化:
- 协调器放在房屋中心位置
- 路由器均匀分布,避免单点故障
- 终端设备可以放在边缘,只要能连到路由器就行
信号强度参考:
- -30 到 -50 dBm:优秀
- -50 到 -70 dBm:良好
- -70 到 -80 dBm:可用
- -80 dBm 以下:不稳定,需要增加路由器
常见问题排查
问题 1:设备无法配对
可能原因:
- 协调器固件过旧
- 设备距离太远
- 2.4GHz Wi-Fi 干扰
解决方案:
# 检查协调器固件版本
cat /sys/bus/usb-serial/devices/ttyUSB0/device/product
# 临时关闭 Wi-Fi 减少干扰
sudo nmcli radio wifi off
# 把设备靠近协调器重新配对
问题 2:设备频繁掉线
可能原因:
- 信号弱
- 电池电量低
- 路由器负载过高
解决方案:
- 在管理界面查看信号强度(LQI)
- 更换电池
- 增加路由器节点
问题 3:MQTT 数据不更新
可能原因:
- 设备进入深度睡眠
- MQTT 服务未运行
- 主题订阅错误
解决方案:
# 检查 MQTT 服务状态
sudo systemctl status mosquitto
# 手动触发设备上报
# (有些设备需要唤醒,如人体传感器检测到运动)
# 检查订阅主题是否正确
mosquitto_sub -t \"zigbee2mqtt/#\" -v
问题 4:Home Assistant 无法发现设备
解决方案:
# Home Assistant configuration.yaml
mqtt:
discovery: true
discovery_prefix: homeassistant
# 重启 Home Assistant
sudo systemctl restart home-assistant@homeassistant
功耗测试
我用一个 Aqara 温湿度传感器做了功耗测试:
| 工作模式 | 电流 | 预计续航 |
|---|---|---|
| 活跃传输 | 30mA | – |
| 深度睡眠 | 5μA | – |
| 上报间隔 1 分钟 | 平均 0.1mA | 18 个月 |
| 上报间隔 10 分钟 | 平均 0.02mA | 36 个月 |
优化建议:
- 非关键传感器设置 10-30 分钟上报间隔
- 关键传感器(如烟雾报警)设置 1 分钟
- 用 Zigbee2MQTT 的
availability功能检测设备在线状态
进阶:自定义 Zigbee 设备
如果你想 DIY Zigbee 设备,ESP32-C6 是个好选择。它内置了 802.15.4 射频,支持 Zigbee 3.0。
硬件连接:
ESP32-C6
GPIO4 → LED 正极
GND → LED 负极
3.3V → 传感器 VCC
GPIO5 → 传感器 DATA
GND → 传感器 GND
代码框架(基于 ESP-Zigbee 库):
#include
// 初始化 Zigbee
void setup() {
esp_zb_platform_config_t config = {
.radio_config = ESP_ZB_DEFAULT_RADIO_CONFIG(),
.host_config = ESP_ZB_DEFAULT_HOST_CONFIG(),
};
esp_zb_init(&config);
// 注册设备
esp_zb_device_register();
// 开始网络
esp_zb_start();
}
// 主循环
void loop() {
// 读取传感器
float temp = read_temperature();
// 上报数据
esp_zb_report_attribute(temp);
// 进入睡眠
esp_zb_sleep(60000); // 60 秒
}
总结
Zigbee 3.0 是智能家居的理想选择,特别是对于电池设备和大规模部署。它的 Mesh 网络特性让覆盖范围不再是问题,低功耗让维护成本极低。
搭建一个 Zigbee 网络的成本可以控制在 500 元以内,却能覆盖 200 平米的户型。更重要的是,一旦网络建成,添加新设备只需要几秒钟的配对时间。
如果你正在规划智能家居系统,或者对低功耗 IoT 感兴趣,Zigbee 3.0 值得深入了解。
希望这篇博客文章对您有所帮助!