前言
蓝牙网关 zigbee网关 听得多了,ESP-NOW网关有没有搞头?有肯定是有的,但是当前有几个拦路虎
-
存在接入节点数量限制,中心设备的 peer 表上限在20个,除去一个广播peer,为19个。
-
esphome官方(截止2026.8)没有对老旧的esp8266实现espnow支持。
-
esphome官方(截止2026.8)的ESP-NOW Packet Transport平台只能传输浮点数和布尔值,字符串只能走裸消息收发,编写复杂的lambda来编解码裸消息显然不是容易维护的方案。
思考解决方案:
1、中心设备peer表限制,可以让一部分不重要的消息走广播来规避,但是广播缺少了单播的ACK机制。
考虑到单个ESP设备的信号覆盖范围不大,可以使用区域中心化方案来缩小服务范围和节点接入数,以该设备作为该区域的自动化中枢,实现完全离HA与离网可用的自动化方案。
espnow通讯是基于mac地址的,因此没有网关下属节点相互隔离一说,想跨网关调数据,也只是再加一个peer mac的事
2、esp8266原生支持espnow,这个没有硬件级别的限制,只是8266只支持espnow v1,与esp32的espnow v2存在一些差异,但是v2是向下兼容v1的,因此主要工作是为esphome移植适配8266专用的espnow组件,并与esp32的官方espnow组件实现互通,同时兼容Packet Transport平台
3、复杂lambda编写这个好解决,使用宏接口来简化裸消息编解码即可
解决方案落地
-
针对esp8266开发了espnow外部组件,实现与官方版本的单播广播通讯,并且支持Packet Transport平台,配置方式与官方几乎无异
)
-
针对本文传感器的通讯,开发了简易通讯助手外部组件,大大简化了espnow 原始信息的编解码处理与路由发布,同时为espnow节点提供真实时间同步功能
-
以上两个组件,因为说明文档字数过多,不便于此处发布,后续将另发帖子公布,有兴趣的可以关注一波
实验平台
节点设备
- 最近刚好改造了几个智能开关,有c3的有8266的,刚好可以测试不同系列芯片的espnow互通性
网关设备
实验效果
-
完成了esp32c3与esp8266的同时接入,同时接入4个节点,功能实体无异常,通讯反应灵敏。
-
使用了esphome的sub device来组织节点与网关的结构,完美适配这种中心化设备的使用场景
-
gateway端实体示列,目前只做了节点在线统计,与群控重启
-
由于4个插座节点实体基本一致,这里只展示一个,espnow的一大优点就是无连接通讯,因此节点的wifi默认都是不启动的,但是有时候需要调试或者更新固件,需要用到wifi,
这里就设置了一个wifi开关,打开后,节点就会恢复wifi连接,同时不影响espnow通讯,关闭后,就会恢复为纯espnow节点。
另外,长按物理键也可以打开wifi,作为一个兜底方案,防止节点失联。
这套方案,很好地解决了纯espnow节点难以维护与调试的问题,毕竟不可能每次ota,都把节点拆下来线刷的,当然无线ota刷挂了,那就是你自己水平问题了~
-
因为esphome本身就没有运行时新增组件的能力,因此每加入一个节点,就要修改一次gateway的配置并ota固件,不过都玩到这份上了,编译刷写早已是家常便饭,嫌麻烦的我不知道你为什么要看到这里。
-
目前这个实验平台,单个节点不到800行配置,网关不到1500行,每增加一个节点,网关需要增加300行左右配置,但是大部分都可以复用,工作量不会很大
部分配置示列