ESP8266Arduino网络编程实例什么是ESPNow
ESP8266-Arduino网络编程实例-什么是ESP-Now
什么是ESP-Now
文章目录
1、ESP-Now介绍
根据乐鑫官方文档描述,ESP-Now是一种短数据传输、无连接的快速通信技术,适用于智能灯、遥控控制、传感器数据回传等场景
ESP-Now使用了IEEE802.11 Action Vendor帧技术,结合了乐鑫特有的IE功能和CCMP加密技术,为使用者提供了无连接,安全通信的可行方案。

ESP-Now具有如下技术特性:
- 单播包加密或单播包不加密通信
- 加密配对设备和非加密配对设备混合
- 可携带长为250字节的有效payload数据
- 支持设置发送回调函数以通知应用层帧发送或成功
ESP-Now有如下限制:
- 暂不支持广播包
- 加密配对设备有限制,Station模式下支持10个加密配对设备;SoftAP或SoftAP + Station模式下支持6个加密设备配对。非加密配对设备支持若干,与加密设备总数和不超过20个。
- 有效payload限制为250字节。
2、ESP-Now通信方式
2.1 One-Way(单向)通信方式
One-Way通信方式相当于主从通信模式(单向),比如,一个ESP8266与另一个ESP8266通信。

这种配置非常容易实现,并且非常适合将数据从一块板发送到另一块板,例如传感器读数或控制 GPIO 的 ON 和 OFF 命令。
2.2 One Master-Multi Slave通信方式
在这种通信方式下一个 ESP8266设备可以向多个不同的 ESP8266设备发送相同或不同的命令。 这种通信方式非常适合构建遥控器之类的东西。 比较周围有几个ESP8266设备,由一个主ESP8266设备控制。

2.3 One Slave-Multi Master通信方式
如果需要将来自多个传感器节点的数据收集到一个 ESP8266 板上,则此配置是理想的选择。 例如,可以将其配置为 Web 服务器以显示来自所有其他设备的数据。

注意:在ESP-Now文档中,没有”Sender/Master”或”Receiver/Slave”的概念,在这里为了表达清晰,使用了这类词语。每个ESP8266设备都可以成为Sender或Receiver。
2.4 Two-Way(双向)通信方式
在这种模式下,每个ESP8266设备都可以发送或接收数据,通信是双向的。

多个ESP8266设备可以组成如下网络:

3、ESP-Now使用步骤
ESP-Now使用步骤分为两部分:
1)发送者(Sender):
- 初始化ESP-Now
- 注册数据发送回调函数
onDataSent。onDataSent函数将在信息发送完成后被执行。这样就可以知道消息是否发送成功。 - 添加一个从设备(Receiver)。执行这一步骤需要知道消息接收设备的MAC地址。
- 发送数据到从设备
2)接收者(Receiver)
- 初始化ESP-Now
- 注册数据接收回调函数
onDataRecv。该函数将在消息接收完成后执行。 - 在
onDataRecv回调函数中,可以将接收到的消息储存,触发消息处理服务等等。
3.1 MAC地址查询
在使用ESP-Now过程中,需要使用到设备的MAC地址,下面代码演示了如何查询设备的MAC地址:
1 | #include <ESP8266WiFi.h> |
3.2 ESP-Now常用API函数
- **esp_now_init()**:初始化ESP-Now。在使用ESP-Now通信前,必须初始化ESP-Now。当初始化成功,则返回0。
- **esp_now_set_self_role(role)**:设置设备在通信过程中的角色。角色有如下类型:
- ESP_NOW_ROLE_IDLE
- ESP_NOW_ROLE_CONTROLLER
- ESP_NOW_ROLE_SLAVE
- ESP_NOW_ROLE_COMBO
- ESP_NOW_ROLE_MAX
- **esp_now_add_peer(uint8 mac_addr, uint8 role, uint8 channel, uint8 key, uint8 key_len)**:添加通信节点。该函数会对设备进行配对。
- **esp_now_send(uint8 mac_address, uint8 data, int len)**:发送数据
- **esp_now_register_send_cb()**:注册数据发送回调函数
- **esp_now_register_rcv_cb()**:注册数据接收回调函数
文章来源: https://iotsmart.blog.csdn.net/article/details/127484512