ESP32/ESP8266开发板ESP-NOW无线通信

0 阅读3分钟

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.begin();

  Serial.print("[DEFAULT] ESP32 Board MAC Address: ");
  readMacAddress();
}
 
void loop(){

}

上传代码后,以115200的波特率打开串行监视器,然后按下ESP32 RST/EN按钮。MAC地址应该打印如下:

在这里插入图片描述

不同的开发板的MAC地址都会不一样,以实际读取到的地址为准

总结

以上介绍了ESP-NOW的基本特性,接下来的文章将举例介绍ESP-NOW的单向和双向通信方式。