传感器分布在三层楼里,没有 WiFi 覆盖。传统方案是在每层加 WiFi 中继,拉电源,配 SSID 。三块 ESP32 加几个电池搞不定的事,可能不是技术问题,是你选错了协议。
zh_network[1] 用 ESP-NOW 在 ESP32 之间建了一个轻量 Mesh 网络。不依赖 WiFi 路由器,不需要接入点,节点之间直接通信。最大一跳 218 字节 payload , AES 加密。
截至今天, 118 Star , Apache-2.0 开源协议。由俄罗斯开发者 aZholtikov[2] 维护。用 ESP-IDF 框架的 C 语言编写。上次推送是两个月前。
# 克隆到 ESP-IDF 项目目录
git clone https://github.com/aZholtikov/zh_network.git components/zh_network
# 在 CMakeLists.txt 中加入依赖
idf_component_register(SRCS "main.c"
REQUIRES zh_network)
# 编译烧录
idf.py build flash monitor
跟 LoRa 和 WiFi Mesh 的边界:该选哪个
三种技术在同一个问题空间里,但各自有明显边界。
ESP-NOW( zh_network 的底层)是 Espressif 的私有协议,基于 802.11 的 Action Frame 但不需要建立 WiFi 连接。延迟极低(几毫秒),功耗远低于完整 WiFi 连接栈,传输距离跟普通 WiFi 相当(室内 30-50 米,室外可达 200+ 米)。缺点是 payload 小,一跳 218 字节,传输不了大块数据。
LoRa 在传输距离上有绝对优势(几公里),但吞吐量低(几百 bps 到几十 kbps )且延迟高(几百毫秒到秒级)。适合农业传感器每天发一次数据,不适合需要实时响应的场景。
WiFi Mesh( ESP-MESH )是传统 WiFi 的 mesh 扩展,每个节点都有 IP 、能 ping 通、支持完整的 TCP/UDP 。但代价是协议栈重, WiFi 认证、 DHCP 、 IP 路由,功耗高,启动时间长。 zh_network 和 ESP-MESH 的最大区别在于: ESP-MESH 给你一个标准 IP 网络, zh_network 给你最快的消息投递。一个重一个轻,没有谁对谁错。
这个方案不适合什么场景
218 字节一跳。这是 ESP-NOW 的物理限制,上层协议改不了。温湿度、开关量、告警消息够了;音频流、固件 OTA 、图片传不了。如果你需要的 payload 超过 218 字节,要么自己分包重组,要么换协议。
项目在早期阶段。 118 个 Star , 10 个 commit ,一个开发者维护。功能全但文档少,没有路由可视化工具,没有管理界面。适合有 ESP-IDF 开发经验的人直接集成,不适合零基础开箱即用。
AES 加密用的是预共享密钥。所有节点用同一个 key ,没有密钥分发协议。安全模型假设攻击者拿不到你的固件。对于家庭传感器("厨房温度 26°C")够用,对于工业环境或敏感数据,需要自己在应用层加强。
一个人维护, 118 个 Star ,一个轻量到极致的组件。它不做一切事情,只做好一件事:让几十个分布在无 WiFi 角落的 ESP32 互相通信。有时候最好的工具不是最大的那个,是恰好够用的那个。
参考链接
[1] zh_network: https://github.com/aZholtikov/zh_network
[2] aZholtikov: https://github.com/aZholtikov