esp32now主机AB端互相收发信息,这是一个基础的程序,可以下载下来自己添加想要的功能

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);
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白文化

求大佬打赏;

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值