两个esp8266-01s实现互相通信
时间: 2023-12-25 09:03:07 浏览: 197
要实现两个ESP8266-01S之间的通信,你可以使用ESP-NOW协议。ESP-NOW是ESP8266的一种通信协议,可以在两个或多个ESP8266之间快速建立低功耗的直连网络。
以下是一个简单的示例代码,演示了如何使用ESP-NOW在两个ESP8266-01S之间发送和接收数据:
首先,将以下代码上传到第一个ESP8266-01S上:
```cpp
#include <ESP8266WiFi.h>
#include <espnow.h>
// 设置ESP-NOW发送回调函数
void OnDataSent(uint8_t* mac_addr, uint8_t sendStatus) {
Serial.println("数据已发送");
}
void setup() {
Serial.begin(115200);
// 初始化ESP-NOW
if (esp_now_init() != 0) {
Serial.println("ESP-NOW初始化失败");
return;
}
// 注册发送回调函数
esp_now_register_send_cb(OnDataSent);
// 注册对方的MAC地址
uint8_t receiverMac[] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB};
esp_now_peer_info_t peerInfo;
memcpy(peerInfo.peer_addr, receiverMac, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
// 添加对方为配对设备
if (esp_now_add_peer(&peerInfo) != ESP_OK) {
Serial.println("添加配对设备失败");
return;
}
}
void loop() {
// 发送数据
String message = "Hello from ESP8266-01S #1";
esp_now_send(NULL, (uint8_t*)message.c_str(), message.length());
delay(1000);
}
```
接下来,将以下代码上传到第二个ESP8266-01S上:
```cpp
#include <ESP8266WiFi.h>
#include <espnow.h>
// 设置ESP-NOW接收回调函数
void OnDataRecv(uint8_t* mac_addr, uint8_t* data, uint8_t len) {
Serial.print("接收到的数据: ");
for (int i = 0; i < len; i++) {
Serial.print((char)data[i]);
}
Serial.println();
}
void setup() {
Serial.begin(115200);
// 初始化ESP-NOW
if (esp_now_init() != 0) {
Serial.println("ESP-NOW初始化失败");
return;
}
// 注册接收回调函数
esp_now_register_recv_cb(OnDataRecv);
// 注册对方的MAC地址
uint8_t senderMac[] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB};
esp_now_peer_info_t peerInfo;
memcpy(peerInfo.peer_addr, senderMac, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
// 添加对方为配对设备
if (esp_now_add_peer(&peerInfo) != ESP_OK) {
Serial.println("添加配对设备失败");
return;
}
}
void loop() {
// 循环执行
}
```
在代码中,你需要根据实际情况修改`receiverMac`和`senderMac`的值,分别设置第一个ESP8266-01S和第二个ESP8266-01S的MAC地址。
上传完代码后,打开串口监视器,你将看到第一个ESP8266-01S每秒发送一条消息,并且第二个ESP8266-01S会接收并打印该消息。
这样,你就成功实现了两个ESP8266-01S之间的互相通信。你可以根据需要修改代码来发送和接收不同的数据。
阅读全文