Hola buenas tardes, solicito su ayuda con lo siguiente:
Quiero establecer una simple comunicación entre 2 esp32 Devkitv1 usando ESPNow, pero no deja de mandarme el mensaje de "Error sending the data" a pesar de que la direccion mac del esp32 receptor es correcta, espero puedan ayudarme a averiguar porque no se establece una correcta comunicacion, y muchas gracias por leerme.
Codigo transmisor:
#include <esp_now.h>
#include <WiFi.h>
uint8_t broadcastAddress[] = {0xCC, 0xDB, 0xA7, 0x13, 0xE2, 0x58};// REPLACE WITH RECEIVER MAC ADDRESS
// Structure example to send data
// Must match the receiver structure
typedef struct struct_message {
char a[32];
int b;
float c;
String d;
bool e;
} struct_message;
struct_message myData;
// callback when data is sent
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
Serial.print(F("\r\n Master packet sent:\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(F("Error initializing ESP-NOW"));
return;
}
Serial.print(F("Transmitter initialized : "));
Serial.println(WiFi.macAddress());
// Define Send function
esp_now_register_send_cb(OnDataSent);
// Register peer
esp_now_peer_info_t peerInfo;
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
// Add peer
if (esp_now_add_peer(&peerInfo) != ESP_OK) {
Serial.println(F("Failed to add peer"));
return;
}
}
void loop() {
// Set values to send
strcpy(myData.a, "data type char");
myData.b = random(1, 20);
myData.c = 1.2;
myData.d = "hello";
myData.e = 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(F("Sent with success"));
}
else {
Serial.println(F("Error sending the data"));
}
delay(1000);
}
Codigo receptor:
#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;
String d;
bool e;
} struct_message;
struct_message myData;
// callback 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("String: ");
Serial.println(myData.d);
Serial.print("Bool: ");
Serial.println(myData.e);
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;
}
Serial.print(F("Receiver initialized : "));
Serial.println(WiFi.macAddress());
// Define receive function
esp_now_register_recv_cb(OnDataRecv);
}
void loop() {
}
CODIGO PARA DETERMINAR DIRECCION MAC DEL RECEPTOR:
#include <WiFi.h>
void setup() {
Serial.begin(115200);
delay(1000);
// Inicializar WiFi para obtener la dirección MAC
WiFi.mode(WIFI_STA);
Serial.println("Dirección MAC:");
Serial.println(WiFi.macAddress());
while (true) {
delay(1000);
}
}
void loop() {
// No hay necesidad de ejecutar código en el bucle de loop
}
