ESP-NOW无线通信
- ESP-NOW无线通信协议简介
- ESP-NOW单向通信
- ESP-NOW双向通信
- ESP32的MAC地址
- 总结
ESP-NOW无线通信协议简介
ESP-NOW 是由Espressif开发的基于数据链路层的无线通信协议,它将五层 OSI 上层协议精简为一层,数据传输时无需依次经过网络层、传输层、会话层、表示层、应用层等复杂的层级,也无需层层增加包头和解包,大大缓解了网络拥挤时因为丢包而导致的卡顿和延迟,拥有更高的响应速度。
其特点是短数据包传输,该协议类似于低功耗2.4GHz无线连接。设备之间的配对需要在它们通信之前进行。配对完成后,连接是安全的和对等的,不需要握手。这意味着设备相互配对后,连接是持久的。换句话说,如果您的一块板突然断电或复位,当它重新启动时,它会自动连接到它的对等体以继续通信。能够在无路由器的情况下直接、快速、低功耗地控制智能设备。它能够与 Wi-Fi 和 Bluetooth LE 共存。
加密和未加密的单播通信;
混合加密和未加密的对等设备;
最多可携带250字节的有效数据;
发送回调函数,可以设置为通知传输成功或失败的应用层;
Station mode最多支持10个加密对等体,SoftAP或SoftAP +Station mode最多支持6个加密对等体;
支持多个未加密的对等体,但是它们的总数应少于20个,包括加密的对等体;
简而言之,ESP-NOW是一种快速通信协议,可用于在ESP32板之间交换数据(最多250字节)。
ESP-NOW单向通信
一个ESP32板向另一个ESP32板发送数据,如传感器读数或控制GPIOs的开和关命令。
一块ESP32板向不同的ESP32板发送相同或不同的命令。这种配置非常适合构建类似远程控制系统。
一个“从”ESP32从多个“主”ESP32接收数据,例如可以将其配置为web服务器,以显示来自所有其它板的数据。
ESP-NOW双向通信
每个板可以同时成为发送者和接收者。因此,您可以在板之间建立双向通信。
可以向此配置中添加更多的板,并拥有一个看起来像网络的东西(所有ESP32板相互通信)。
ESP32的MAC地址
每个ESP32都有一个唯一的MAC地址,这就是我们如何使用ESP-NOW识别每个板并向其发送数据
#include <WiFi.h>
#include <esp_wifi.h>void readMacAddress(){uint8_t baseMac[6];esp_err_t ret = esp_wifi_get_mac(WIFI_IF_STA, baseMac);if (ret == ESP_OK) {Serial.printf("%02x:%02x:%02x:%02x:%02x:%02x\n",baseMac[0], baseMac[1], baseMac[2],baseMac[3], baseMac[4], baseMac[5]);} else {Serial.println("Failed to read MAC address");}
}void setup(){Serial.begin(115200);WiFi.mode(WIFI_STA);WiFi.STA.begin();Serial.print("[DEFAULT] ESP32 Board MAC Address: ");readMacAddress();
}void loop(){}
上传代码后,以115200的波特率打开串行监视器,然后按下ESP32 RST/EN按钮。MAC地址应该打印如下:
总结
以上介绍了ESP-NOW的基本特性,接下来的文章将举例介绍ESP-NOW的单向和双向通信方式。