簡介
本實驗通過ESP-NOW無線通信協議實現多個ESP32/ESP 8266開發板向ESP32開發板發送數據。例如可以應用于從多個遠程傳感器上收集數據。
讀取ESP32/ESP8266接收方Receiver的MAC地址
讀取ESP32開發板的代碼
#ifdef ESP32
#include < WiFi.h >
#include < esp_wifi.h >
#else
#include < ESP8266WiFi.h >
#endif
void setup(){
Serial.begin(115200);
Serial.print("ESP Board MAC Address: ");
#ifdef ESP32
WiFi.mode(WIFI_STA);
WiFi.STA.begin();
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");
}
#else
Serial.println(WiFi.macAddress());
#endif
}
void loop(){
}
通過串口打印讀取到接收方ESP32開發板1的MAC地址為:54:43:b2:7f:00:60
ESP32/ESP8266發送方Sender程序
把讀取到的接收方的MAC地址填入到uint8_t broadcastAddress[]數組中,并修改結構體的中myData.id的值,ESP32開發板1程序中填入myData.id = 1,ESP32開發板2程序中填入myData.id = 2,ESP32開發板3程序中填入myData.id = 3,接收方以此來分辨是哪一個ESP32開發板發過來的數據。
#include < esp_now.h >
#include < WiFi.h >
// REPLACE WITH THE RECEIVER'S 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 {
int id; // must be unique for each sender board
int x;
int y;
} struct_message;
// Create a struct_message called myData
struct_message myData;
// Create peer interface
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
myData.id = 1;
myData.x = random(0,50);
myData.y = random(0,50);
// 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(10000);
}
ESP32/ESP8266接收方Receiver程序
#include < esp_now.h >
#include < WiFi.h >
// Structure example to receive data
// Must match the sender structure
typedef struct struct_message {
int id;
int x;
int y;
}struct_message;
// Create a struct_message called myData
struct_message myData;
// Create a structure to hold the readings from each board
struct_message board1;
struct_message board2;
struct_message board3;
// Create an array with all the structures
struct_message boardsStruct[3] = {board1, board2, board3};
// callback function that will be executed when data is received
void OnDataRecv(const uint8_t * mac_addr, const uint8_t *incomingData, int len) {
char macStr[18];
Serial.print("Packet received from: ");
snprintf(macStr, sizeof(macStr), "%02x:%02x:%02x:%02x:%02x:%02x",
mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
Serial.println(macStr);
memcpy(&myData, incomingData, sizeof(myData));
Serial.printf("Board ID %u: %u bytesn", myData.id, len);
// Update the structures with the new incoming data
boardsStruct[myData.id-1].x = myData.x;
boardsStruct[myData.id-1].y = myData.y;
Serial.printf("x value: %d n", boardsStruct[myData.id-1].x);
Serial.printf("y value: %d n", boardsStruct[myData.id-1].y);
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() {
// Acess the variables for each board
/*int board1X = boardsStruct[0].x;
int board1Y = boardsStruct[0].y;
int board2X = boardsStruct[1].x;
int board2Y = boardsStruct[1].y;
int board3X = boardsStruct[2].x;
int board3Y = boardsStruct[2].y;*/
delay(10000);
}
ESP-NOW通信驗證

分別給左邊的3個ESP32開發板下載好發送方Sender程序,給右邊的ESP32開發板下載好接收方Receiver程序
若接收方接收到數據串口會打印出接收到對應的ESP32開發板的ID號和ESP32開發板的兩個隨機數
若發送方數據發送成功串口會打印出數據發送完成,數據接收成功
若發送方數據發送成功串口會打印出數據發送完成,數據接收失敗
總結
通過以上例程驗證了ESP32開發板之間單向多對一的ESP-NOW無線通信。
審核編輯 黃宇
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
無線通信
+關注
關注
58文章
5037瀏覽量
146986 -
開發板
+關注
關注
26文章
6362瀏覽量
119885 -
ESP8266
+關注
關注
51文章
972瀏覽量
49707 -
ESP32
+關注
關注
26文章
1214瀏覽量
22205
發布評論請先 登錄
相關推薦
熱點推薦
ESP32/ESP8266開發板ESP-NOW無線通信
ESP-NOW 是由Espressif開發的基于數據鏈路層的無線通信協議,它將五層 OSI 上層協議精簡為一層,數據傳輸時無需依次經過網絡層、傳輸層、會話層、表示層、應用層等復雜的層級
【ESP32-P4系列】WT9932P4-MINI開發板上手指南
開發板介紹ESP32-P4-MINI開發板是深圳市啟明云端有限公司推出的,基于WT0132P4-A1核心板設計的多媒體開發板。WT0132P
【ESP32-P4系列】WT9932P4-MINI開發板規格書
開發板介紹ESP32-P4-MINI開發板是深圳市啟明云端有限公司推出的,基于WT0132P4-A1核心板設計的多媒體開發板。WT0132P
無需安裝!在瀏覽器里就能玩轉ESP32/ESP8266,這個神器絕了!
無需安裝!在瀏覽器里就能玩轉ESP32/ESP8266,這個神器絕了!【往期精選】十年嵌入式最深的痛,不是Bug,而是抓不到日志!vivo宣布原生支持HomeAssistant生態設備接入(含
樂鑫科技ESP-AMP框架詳解!兩款已支持的ESP32-P4C5開發板推薦!啟明云端樂鑫科技代理
操作系統,并提供完整的核間通信機制。啟明云端旗兩款高性能開發板——WT99P4C5-S1與WTDKP4C5-S1,搭載樂鑫科技ESP32-P4芯片和ESP32-C5芯
ESP32-P4全功能開發板和ESP32-P4-TINY開發板該怎么選?看這篇就夠了!
啟明云端基于樂鑫科技ESP32-P4芯片設計了多款開發板,這些開發板有什么區別?基于應用場景如何選擇?本期,我們聚焦兩款代表性產品:WT99P4C5-S1開發板與WT9932P4-TI
晶科鑫 | 國產26MHz晶振匹配Espressif(樂鑫) ESP8285/ESP8266芯片案例
本,兩者可以共用同一套SDK,只是ESP8285內部集成了1MBFlash,SPIMode設置為DOUT,而ESP8266則需要外接Flash,并且是Din模式。除此之外,ESP828
ESP8266和ESP32開發板常見的2種下載方式
ESP32和ESP8266是性價比很高而且使用較為廣泛的的Wi-Fi模塊,在物聯網(IoT)領域的DIY項目中可以首先考慮這2款產品。
兩款芯片都屬于32位處理器。ESP32是低功耗雙核80MHz
ESP8266和ESP32開發板常見的2種下載方式
ESP8266全IO口引出,直接下載無需復位!
ESP32功能框圖
基于arduino的ESP32/ESP8266開發環境搭建
1.在a
發表于 10-24 18:04
ESP32的ESP-NOW通訊踩坑記
1、背景前段時間看到樂鑫推出了一種很有意思的Wi-Fi通訊協議,它允許設備在無連接的時候進行直接通訊。樂鑫對它的概述如下:“ESP-NOW是一種由樂鑫公司定義的無連接Wi-Fi通信協議
ESP32-P4-MINI開發板開箱和上手指南來了!速速碼住!
上期“夢中情板”ESP32-P4-MINI開發板一出就備受青睞這期我們立馬就端著開箱和上手指南來了!不用驚嘆,我們就是這么迅速,請把“啟明云端權威”打在公屏上好嘛!開箱展示拿到
ESP32-S3開發板燒錄小智AI系統全流程指南
在AI語音交互領域不斷發展的今天,開發者們對于功能強大、開源靈活的開發板需求日益增長。今天,我們就來詳細了解一下ESP32AgentDevKit燒錄小智的全流程,這款搭載樂鑫科技
ESP32/ESP8266開發板單向多對一ESP-NOW無線通信
評論