ESPNow 协议:基于 ESP-NOW 构建的一种轻量级且可扩展的通信层,专为 ESP32 设计
扫描二维码
随时随地手机看文章
如果你曾经使用过 ESP32 和 ESP-NOW,那么你大概很快就会意识到一些事情:ESP-NOW 功能强大……但在其基础上构建一个可靠且可扩展的系统并非易事。处理确认信息、重试操作、多台设备以及网络状态等事宜,很快就会变成重复且容易出错的工作。这就是 ESPNow 协议被创建的真正原因。
什么是 ESPNow 协议?
ESPNow 协议是基于 ESP-NOW 构建的一种轻量级通信层,旨在简化并标准化 ESP32 板之间的设备间通信。
不再需要处理低级别的数据包处理问题,而是会得到一个结构化且可靠的系统,其具备通常在更高层级协议中才会有的功能。
它为设备间的通信提供了一套完整的解决方案,包括:
•通用数据包消息传递
•可靠交付(确认 + 重试)
•消息队列(非阻塞)
•多设备网络连接
•自动对等节点发现
•设备生命周期管理(在线/离线)
•链路诊断(接收信号强度指示 + 质量)
其工作原理
信息传递的流程很简单:
但在内部,ESPNow 协议增加了:
•消息类型(数据、确认、问候、心跳)
•序列控制
•逻辑寻址(节点标识符)
•网络意识
主要特点
1. 可靠通信
每条消息都可以通过“确认 + 重试”的方式发送:
这确保了即使在嘈杂的环境中也能正常交付。
2. 逻辑寻址系统
每个设备都有一个节点标识符,该标识符与 MAC 地址无关:
这使得您的应用程序逻辑变得更加简洁明了。
3. 自动发现(即插即用网络)
设备能够自动识别彼此:
无需手动为每一个节点进行注册。
4. 设备生命周期管理
图书馆记录:
•当设备联网时
•当其断网(超时检测)时
示例日志:
5. 链路质量监测
每个数据包都包含接收信号强度指示(RSSI):
您还可以进行查询:
这对于以下情况非常有用:
•诊断;检测;诊断学
•自适应系统
•信号质量分析
6. 非阻塞架构
内部队列可确保您的应用程序不会出现卡顿现象。
快速入门
第 1 步 — 安装库
使用 Arduino IDE:
•前往图书馆管理界面
•搜索“ESPNow 协议”
•安装
第 2 步 — 基本发送方
第 3 步 — 基本接收器
用例
ESPNow 协议尤其适用于:
•无线传感器网络
•分布式嵌入式系统
•远程控制应用
•实时遥测
•ESP32 簇
重要提示
•“protocol.loop()”必须持续运行
•避免造成延误的情况发生
•最大有效载荷:32 字节
•每个设备都必须拥有一个独一无二的节点标识符。
使这座图书馆独具特色的原因
ESPNow 协议的独特之处在于,它将 ESP-NOW 视为一个真正的网络,而不仅仅是数据包传输通道。
你得到:
•网络形成
•设备感知能力
•通信可靠性
•诊断;检测;诊断学
所有这些都没有 Wi-Fi 基础设施。
路线图
计划中的功能包括:
•同伴事件回调(在线/离线)
•高级链路指标(延迟、丢包率)
•自动最佳对等节点选择
•网状路由(多跳)
最终想法
ESPNow 协议在构建实际的 ESP-NOW 系统时消除了许多不必要的障碍。
与其每次都要从头开始重新设计,倒不如专注于真正重要的事情:
您的应用逻辑。
如果您要构建的不仅仅是简单的点对点 ESP-NOW 演示程序,那么这个库值得一试。
本文编译自hackster.io





