@TOC
简介
本例程通过两个ESP32开发板实现单向点对点ESP-NOW无线通信,一个ESP32开发板作为Sender发送方,另一个开发板作为Receiver接收方接收发送方的数据。
读取ESP32接收方Receiver的MAC地址
#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:%02xn",
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(){
}

ESP32发送方Sender程序
把接收方ESP32开发板读取到的MAC地址填入以下程序第4行中
#include < esp_now.h >
#include < WiFi.h >
// REPLACE WITH YOUR RECEIVER MAC Address
uint8_t broadcastAddress[] = {0x54, 0x43, 0xb2, 0x7f, 0x00, 0x60};
// Structure example to send data
// Must match the receiver structure
typedef struct struct_message {
char a[32];
int b;
float c;
bool d;
} struct_message;
// Create a struct_message called myData
struct_message myData;
esp_now_peer_info_t peerInfo;
// callback when data is sent
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
Serial.print("rnLast Packet Send Status:t");
Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail");
}
void setup() {
// Init Serial Monitor
Serial.begin(115200);
// Set device as a Wi-Fi Station
WiFi.mode(WIFI_STA);
// Init ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
// Once ESPNow is successfully Init, we will register for Send CB to
// get the status of Trasnmitted packet
esp_now_register_send_cb(OnDataSent);
// 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 loop() {
// 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");
}
delay(2000);
}
ESP32接收方Receiver程序
#include < esp_now.h >
#include < WiFi.h >
// Structure example to receive data
// Must match the sender structure
typedef struct struct_message {
char a[32];
int b;
float c;
bool d;
} struct_message;
// Create a struct_message called myData
struct_message myData;
// callback function that will be executed when data is received
void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
memcpy(&myData, incomingData, sizeof(myData));
Serial.print("Bytes received: ");
Serial.println(len);
Serial.print("Char: ");
Serial.println(myData.a);
Serial.print("Int: ");
Serial.println(myData.b);
Serial.print("Float: ");
Serial.println(myData.c);
Serial.print("Bool: ");
Serial.println(myData.d);
Serial.println();
}
void setup() {
// Initialize Serial Monitor
Serial.begin(115200);
// Set device as a Wi-Fi Station
WiFi.mode(WIFI_STA);
// Init ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
// Once ESPNow is successfully Init, we will register for recv CB to
// get recv packer info
esp_now_register_recv_cb(esp_now_recv_cb_t(OnDataRecv));
}
void loop() {
}
ESP-NOW通信验证
上传发送方和接收方的程序到ESP32开发板,打开两个串口助手分别显示发送方和接收方的打印结果情况
ESP32发送方:发送结构体struct_message数据并显示发送成功
ESP32接收方:显示接收到的发送方发送的结构体struct_message的具体数据
总结
通过以上例程验证了ESP32开发板之间单向点对点的ESP-NOW无线通信,接下来的篇章将继续验证多个的ESP32开发板之间实现一对多的ESP-NOW无线通信。
审核编辑 黄宇
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
无线通信
+关注
关注
58文章
5210浏览量
147137 -
开发板
+关注
关注
26文章
6507浏览量
121363 -
ESP32
+关注
关注
27文章
1235浏览量
22690
发布评论请先 登录
相关推荐
热点推荐
ESP32/ESP8266开发板ESP-NOW无线通信
ESP-NOW 是由Espressif开发的基于数据链路层的无线通信协议,它将五层 OSI 上层协议精简为一层,数据传输时无需依次经过网络层、传输层、会话层、表示层、应用层等复杂的层级,也无需层层
【ESP32-C5系列】WT9932C5-TINY开发板上手指南
实现了强劲性能与丰富功能的平衡。开发板主频高达240MHz,依托ESP32-C5升级的无线能力,支持Wi-Fi6(802.11ax)与蓝牙5.3双模通信,相比前代
【ESP32-C2系列】WT9932C2-TINY开发板上手指南
体积内实现了强劲性能与丰富功能的平衡。开发板主频高达120MHz,支持蓝牙与Wi-Fi双模无线通信,可无缝适配智能家居、低功耗物联网终端等场景。硬件设计上,不仅将所
【ESP32-P4系列】WT9932P4-MINI开发板上手指南
开发板介绍ESP32-P4-MINI开发板是深圳市启明云端有限公司推出的,基于WT0132P4-A1核心板设计的多媒体开发板。WT0132P
【ESP32-C3】WT9932C3-TINY开发板规格书
体积内实现了强劲性能与丰富功能的平衡。开发板主频高达160MHz,支持蓝牙与Wi-Fi双模无线通信,可无缝适配智能家居、低功耗物联网终端等场景。硬件设计上,不仅将
【ESP32-C5系列】WT9932C5-TINY开发板规格书
了强劲性能与丰富功能的平衡。开发板主频高达240MHz,依托ESP32-C5升级的无线能力,支持Wi-Fi6(802.11ax)与蓝牙5.3双模通信,相比前代吞吐
【ESP32-P4系列】WT9932P4-MINI开发板规格书
开发板介绍ESP32-P4-MINI开发板是深圳市启明云端有限公司推出的,基于WT0132P4-A1核心板设计的多媒体开发板。WT0132P
ESP32-P4全功能开发板和ESP32-P4-TINY开发板该怎么选?看这篇就够了!
启明云端基于乐鑫科技ESP32-P4芯片设计了多款开发板,这些开发板有什么区别?基于应用场景如何选择?本期,我们聚焦两款代表性产品:WT99P4C5-S1开发板与WT9932P4-TI
ESP32的ESP-NOW通讯踩坑记
1、背景前段时间看到乐鑫推出了一种很有意思的Wi-Fi通讯协议,它允许设备在无连接的时候进行直接通讯。乐鑫对它的概述如下:“ESP-NOW是一种由乐鑫公司定义的无连接Wi-Fi通信协议。在ESP-NOW中,应用程序数据被封装在
ESP32-P4-MINI开发板开箱和上手指南来了!速速码住!
上期“梦中情板”ESP32-P4-MINI开发板一出就备受青睐这期我们立马就端着开箱和上手指南来了!不用惊叹,我们就是这么迅速,请把“启明云端权威”打在公屏上好嘛!开箱展示拿到
ESP32-P4 C5开发板烧录小智全流程!速看!
没错,你没有看错!我们带着WT99P4C5-S1开发板烧录小智全流程走来了!开发板搭载乐鑫科技ESP32-P4和ESP32-C5芯片,代码完全开源,支持灵活二次
ESP32-S3开发板烧录小智AI系统全流程指南
在AI语音交互领域不断发展的今天,开发者们对于功能强大、开源灵活的开发板需求日益增长。今天,我们就来详细了解一下ESP32AgentDevKit烧录小智的全流程,这款搭载乐鑫科技ESP32
ESP32开发板单向点对点ESP-NOW无线通信
评论