本文由铁熊与默联合创作。
在学习 Arduino 开发的过程中,无线通讯是我们学习道路上一道必过的坎,无线通讯摆脱了线材的束缚,使用更加灵活且通讯距离根据不同无线模块可达几十米甚至是数公里。常见的无线通讯方式有蓝牙、WiFi、LoRa、NB-IoT 等,本教程将重点介绍乐鑫科技开发的另一种无线通讯协议:ESP-NOW,通过本教程的学习,你将了解到如何将 ESP-NOW 技术应用到我们的 DIY 项目中。
硬件准备
任意 ESP32 开发板;
开发环境
我们使用 Arduino 软件来编写本项目的程序。至于如何在 Arduino 中配置 ESP32 的开发环境,不在本文的介绍范围,请自行查阅相关资料。
什么是 ESP-NOW?
ESP-NOW 是由乐鑫开发的另一款无线通信协议,可以使多个设备在没有或不使用 Wi-Fi 的情况下进行通信。这种协议类似常见于无线鼠标中的低功耗 2.4GHz 无线连接——设备在进行通信之前要进行配对。配对之后,设备之间的连接是持续的、点对点的,并且不需要握手协议。它是一种短数据传输、无连接的快速通信技术,可以让低功耗控制器直接控制所有智能设备而无需连接路由器,适用于智能灯、遥控控制、传感器数据回传等场景。
使用了 ESP-NOW 通信之后,如果某一个设备突然断电之后,只要它一旦重启,就是自动连接到对应的节点中重新进行通信。
ESP-NOW 支持如下特性:
单播包加密或单播包不加密通信;
加密配对设备和非加密配对设备混合使用;
可携带最长为 250 字节的有效 payload 数据;
支持设置发送回调函数以通知应用层帧发送失败或成功。
同样,ESP-NOW 也存在一些限制:
暂时不支持广播包;
加密配对设备有限制,Station 模式下最多支持10 个加密配对设备;SoftAP 或 SoftAP + Station 混合模式下最多支持 6 个加密配对设备。非加密配对设备支持若干,与加密设备总数和不超过 20 个;
有效 payload 限制为 250 字节。
ESP-NOW 通信方式
ESP-NOW 支持多种通信方式:
一对一单向通信
一对一单向通信是最简单的通信方式,也就是一个设备负责发送数据,另一个设备负责接收数据,如下图所示:

一对多单向通信
一对多单向通信是指一个设备负责发送数据,多个设备负责接收数据。其中数据发送端就类似与遥控器ÿ