ESP-NOW 是一种通信协议,旨在实现 ESP32 设备之间的低功耗、低延迟和高吞吐量通信,无需接入点 (AP)。它非常适合设备需要在本地网络中直接相互通信的场景。ESP-NOW 可用于智能灯、遥控设备、传感器和许多其他应用。
该库提供了一个易于使用的界面,用于设置 ESP-NOW 通信、添加和删除对等节点以及发送和接收数据包。
ESP_NOW_Class 是用于管理 ESP-NOW 通信的主类。
初始化 ESP-NOW 通信。在使用任何其他 ESP-NOW 功能之前,必须调用此函数。
bool begin(const uint8_t *pmk = NULL);
如果初始化成功,则返回 true,否则返回 false。
结束 ESP-NOW 通信。此函数释放 ESP-NOW 库使用的所有资源。
bool end();
如果作成功,则返回 true,否则返回 false。
获取当前添加的对等节点总数。
int getTotalPeerCount();
返回对等体的总数,如果发生错误,则返回 -1。
获取使用加密的对等节点数。
int getEncryptedPeerCount();
返回使用加密的对等体数,如果发生错误,则返回 -1。
您可以使用 onNewPeer 函数注册回调函数来处理来自新对等节点的传入数据。
void onNewPeer(void (*cb)(const esp_now_recv_info_t *info, const uint8_t *data, int len, void *arg), void *arg);
cb 函数签名:
void cb(const esp_now_recv_info_t *info, const uint8_t *data, int len, void *arg);
info:有关收到的数据包的信息。 data:指向接收到的数据的指针。 len:接收数据的长度。 arg:传递给回调函数的用户定义参数。
ESP_NOW_Peer 类表示 ESP-NOW 网络中的对等设备。它是一个抽象类,必须由正确处理对等连接并实现 _onReceive 和 _onSent 方法的子类继承。
创建 ESP_NOW_Peer 类的实例。
ESP_NOW_Peer(const uint8_t *mac_addr, uint8_t channel, wifi_interface_t iface, const uint8_t *lmk);
将对等节点添加到 ESP-NOW 网络。
bool add();
如果成功添加对等节点,则返回 true,否则返回 false。
从 ESP-NOW 网络中删除对等节点。
bool remove();
如果成功删除对等节点,则返回 true,否则返回 false。
将数据发送到对等体。
size_t send(const uint8_t *data, int len);
返回发送的字节数,如果发生错误,则返回 0。
获取对等体的 MAC 地址。
const uint8_t * addr() const;
返回指向 MAC 地址的指针。
Set the MAC address of the peer.
设置对等体的 MAC 地址。
void addr(const uint8_t *mac_addr);
获取对等体的通信通道。
uint8_t getChannel() const;
返回通信通道。
设置 Peer 节点的通信通道。
void setChannel(uint8_t channel);
获取对端的 Wi-Fi 接口。
wifi_interface_t getInterface() const;
返回 Wi-Fi 接口。
设置对端的 Wi-Fi 接口。
void setInterface(wifi_interface_t iface);
检查对等体是否正在使用加密。
bool isEncrypted() const;
如果对等节点正在使用加密,则返回 true,否则返回 false。
设置对等体的本地主密钥 (LMK)。
void setKey(const uint8_t *lmk);
回调函数,用于处理来自对等节点的传入数据。这是一个虚拟方法,可以由上层类实现,用于自定义处理。
void onReceive(const uint8_t *data, int len, bool broadcast);
Callback 函数,用于处理向对等节点发送数据的完成。这是一个虚拟方法,可以由上层类实现,用于自定义处理。
void onSent(bool success);
ESP-NOW 库的 2 个示例,用于在多个 ESP32 设备(多个主设备、多个从设备)之间使用广播消息发送和接收数据。
libraries/ESP_NOW/examples/ESP_NOW_Broadcast_Master/ESP_NOW_Broadcast_Master.ino
libraries/ESP_NOW/examples/ESP_NOW_Broadcast_Slave/ESP_NOW_Broadcast_Slave.ino
使用串行监视器在 2 个 ESP32 设备之间以流的形式发送和接收数据的 ESP-NOW 串行库示例:
libraries/ESP_NOW/examples/ESP_NOW_Serial/ESP_NOW_Serial.ino