esp32A板 08:B6:1F:34:E6:DC
从机MAC Address: 0x08,0xB6,0x1F,0x34,0xE6,0xDC
主机MAC Address: 0x24,0x0A,0xC4,0x58,0x0A,0xC4
由于程序比较繁杂我把程序写在一个子文件夹里,这样就比较好调用了
首先写的是
主机B程序
.cpp文件
#include <nowB.h>
#include <esp_now.h>
#include <WiFi.h>
// 替换为您的接收器 MAC 地址
uint8_t broadcastAddress[] = {0x24,0x0A,0xC4,0x58,0x0A,0xC4};
//接收发送数据信息结构体
typedef struct struct_message {
char a[32];
int b;
float c;
bool d;
} struct_message;
// Create a struct_message called myData
struct_message myData;
// 创建接收结构消息
struct_message reData;
esp_now_peer_info_t peerInfo;
// 发送数据时回调
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
Serial.printf("OnDataSent\r\n");
}
// 收到数据时将执行的回调函数
void ReDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
memcpy(&reData, incomingData, sizeof(reData));
// Serial.print("Bytes received: ");
// Serial.println(len);
Serial.printf("Bytes received:%d\r\n",len);
// Serial.print("Char: ");
// Serial.println(reData.a);
Serial.printf("Char:%s\r\n",reData.a);
//Serial.print("Int: ");
// Serial.println(reData.b);
Serial.printf("Int:%d\r\n",reData.b);
Serial.print("Float: ");
Serial.println(reData.c);
Serial.print("Bool: ");
Serial.println(reData.d);
Serial.println();
//发送数据
strcpy(myData.a, "my ass eome_data");
myData.b = random(100,200);
myData.c = 1.9;
myData.d = false;
// Send message via ESP-NOW
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
if (result == ESP_OK) {
Serial.println("Sent with success");
}
else {
Serial.println("Error sending the data");
}
}
void nowB_Init()
{
// 将设备设置为 Wi-Fi 站
WiFi.mode(WIFI_STA);
// Init ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
//发送回调函数
esp_now_register_send_cb(OnDataSent);
//初始化接收回调函数
esp_now_register_recv_cb(ReDataRecv);
// Register peer
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
// Add peer
if (esp_now_add_peer(&peerInfo) != ESP_OK){
Serial.println("Failed to add peer");
return;
}
}
.h文件
#ifndef NOWB_H
#define NOWB_H
void nowB_Init();
#endif
主机A程序
.CPP文件
```cpp
#include <nowA.h>
#include <esp_now.h>
#include <WiFi.h>
// 替换为您的接收器 MAC 地址
uint8_t broadcastAddress[] = {0x08,0xB6,0x1F,0x34,0xE6,0xDC};
//发送数据的结构示例
//必须与接收器结构匹配
typedef struct struct_message {
char a[32];
int b;
float c;
bool d;
} struct_message;
// 创建发送结构消息
struct_message myData;
// 创建接收结构消息
struct_message reData;
esp_now_peer_info_t peerInfo;
// 发送数据时回调
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
Serial.printf("OnDataSent\r\n");
}
// 收到数据时将执行的回调函数
void ReDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
memcpy(&reData, incomingData, sizeof(reData));
Serial.print("Bytes received: ");
Serial.println(len);
Serial.print("Char: ");
Serial.println(reData.a);
Serial.print("Int: ");
Serial.println(reData.b);
Serial.print("Float: ");
Serial.println(reData.c);
Serial.print("Bool: ");
Serial.println(reData.d);
Serial.println();
}
void nowA_Init()
{
// 将设备设置为 Wi-Fi 站
WiFi.mode(WIFI_STA);
// 立即初始化 ESP
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
//发送回调函数
esp_now_register_send_cb(OnDataSent);
//初始化接收回调函数
esp_now_register_recv_cb(ReDataRecv);
// Register peer
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
// Add peer
if (esp_now_add_peer(&peerInfo) != ESP_OK){
Serial.println("Failed to add peer");
return;
}
}
//循环运行函数
void nowA_config()
{
// Set values to send
strcpy(myData.a, "THIS IS A CHAR");
myData.b = random(1,20);
myData.c = 1.2;
myData.d = false;
// Send message via ESP-NOW
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
if (result == ESP_OK) {
Serial.println("Sent with success");
}
else {
Serial.println("Error sending the data");
}
}
.h文件
#ifndef NOWA_H
#define NOWA_H
void nowA_Init();
void nowA_config();
#endif
main.cpp文件
#include <nowA.h>
#include <Arduino.h>
void setup() {
// 初始化串行监视器
Serial.begin(9600);
nowA_Init();
}
void loop() {
nowA_config();
delay(2000);
}