ESP-NOW简介
ESP-NOW是Espressif开发的一种基于Wi-Fi的低功耗通信协议。与传统Wi-Fi通信不同,ESP-NOW不需要配对过程,设备间可以直接通信,非常适合需要快速传输小数据包的应用,如传感器网络、遥控器和智能家居设备。它的优势在于低延迟、低功耗和无需网络路由器的直连通信。
使用两块ESP8266实现ESP-NOW通信
要使用两块ESP8266实现ESP-NOW通信,我们需要配置一块作为发送设备,另一块作为接收设备。首先,确保你已经安装了Arduino IDE,并添加了ESP8266的开发板支持。
准备工作
安装Arduino IDE和ESP8266支持包:
- 打开Arduino IDE,导航到
File
>Preferences
,在“Additional Boards Manager URLs”字段中添加以下链接:http://arduino.esp8266.com/stable/package_esp8266com_index.json
- 然后,打开
Tools
>Board
>Boards Manager
,搜索esp8266
并安装。
- 打开Arduino IDE,导航到
库文件:
- 安装ESP-NOW库:打开
Sketch
>Include Library
>Manage Libraries
,搜索ESP8266WiFi
并安装。
- 安装ESP-NOW库:打开
发送端代码
以下是ESP8266作为发送端的Arduino代码:
#include <ESP8266WiFi.h>
#include <espnow.h>
// 广播地址,所有设备均可接收
uint8_t broadcastAddress[] = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
// 发送数据结构
typedef struct struct_message {
char message[32];
} struct_message;
struct_message myData;
void setup() {
// 初始化串口监视器
Serial.begin(115200);
// 初始化Wi-Fi
WiFi.mode(WIFI_STA);
// 初始化ESP-NOW
if (esp_now_init() != 0) {
Serial.println("Error initializing ESP-NOW");
return;
}
// 注册发送回调
esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_COMBO, 1, NULL, 0);
}
void loop() {
// 填充发送数据
strcpy(myData.message, "Hello, ESP-NOW!");
// 发送数据
esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
// 打印发送信息
Serial.println("Message sent: " + String(myData.message));
// 每隔2秒发送一次
delay(2000);
}
接收端代码
以下是ESP8266作为接收端的Arduino代码:
#include <ESP8266WiFi.h>
#include <espnow.h>
// 接收数据结构
typedef struct struct_message {
char message[32];
} struct_message;
struct_message myData;
// 接收回调函数
void onDataRecv(uint8_t *mac, uint8_t *incomingData, uint8_t len) {
memcpy(&myData, incomingData, sizeof(myData));
Serial.print("Received message: ");
Serial.println(myData.message);
}
void setup() {
// 初始化串口监视器
Serial.begin(115200);
// 初始化Wi-Fi
WiFi.mode(WIFI_STA);
// 初始化ESP-NOW
if (esp_now_init() != 0) {
Serial.println("Error initializing ESP-NOW");
return;
}
// 注册接收回调
esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);
esp_now_register_recv_cb(onDataRecv);
}
void loop() {
// 空闲
}
总结
ESP-NOW是一个强大的协议,可以在没有Wi-Fi网络的情况下实现设备间的快速通信。通过以上步骤,你可以使用两块ESP8266开发板建立一个简单的ESP-NOW通信系统。这种方式特别适用于低功耗、低延迟和无需网络基础设施的应用场景。希望这篇博客能帮你快速入门ESP-NOW,开启你的无线通信开发之旅。