ESP_NOW POC
This commit is contained in:
106
ESP32/ESP_NOW/ESP_NOW_BROADCAST_test/ESP_NOW_BROADCAST_test.ino
Normal file
106
ESP32/ESP_NOW/ESP_NOW_BROADCAST_test/ESP_NOW_BROADCAST_test.ino
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
|
||||||
|
#include <WiFi.h>
|
||||||
|
#include <esp_wifi.h>
|
||||||
|
#include <esp_now.h>
|
||||||
|
|
||||||
|
#define ONBOARD_LED 2 //GPIO02 D2
|
||||||
|
|
||||||
|
// MAC ADDRESS: 1: 6c:c8:40:06:43:d4
|
||||||
|
// MAC ADDRESS: 2: 78:1c:3c:2d:1e:78
|
||||||
|
|
||||||
|
//RECEIVER MAC Address
|
||||||
|
uint8_t broadcastAddress[] = {0x78, 0x1C, 0x3C, 0x2D, 0x1E, 0x78};
|
||||||
|
|
||||||
|
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:%02x\n",
|
||||||
|
baseMac[0], baseMac[1], baseMac[2],
|
||||||
|
baseMac[3], baseMac[4], baseMac[5]);
|
||||||
|
} else {
|
||||||
|
Serial.println("Failed to read MAC address");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Structure example to send data
|
||||||
|
// Must match the receiver structure
|
||||||
|
typedef struct struct_message {
|
||||||
|
char a[32];
|
||||||
|
int b;
|
||||||
|
float c;
|
||||||
|
bool led;
|
||||||
|
} 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("\r\nLast 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;
|
||||||
|
}
|
||||||
|
pinMode(ONBOARD_LED, OUTPUT);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
// Set values to send
|
||||||
|
strcpy(myData.a, "THIS IS A CHAR");
|
||||||
|
myData.b = random(1,20);
|
||||||
|
myData.c = 1.2;
|
||||||
|
|
||||||
|
if (myData.led == true){
|
||||||
|
myData.led = false;
|
||||||
|
digitalWrite(ONBOARD_LED, LOW);
|
||||||
|
}else {
|
||||||
|
myData.led = true;
|
||||||
|
digitalWrite(ONBOARD_LED, HIGH);
|
||||||
|
}
|
||||||
|
Serial.println("myData.led");
|
||||||
|
Serial.println(myData.led);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 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(200);
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
|
||||||
|
#include <esp_now.h>
|
||||||
|
#include <WiFi.h>
|
||||||
|
|
||||||
|
#define ONBOARD_LED 2 //GPIO02 D2
|
||||||
|
|
||||||
|
// Structure example to receive data
|
||||||
|
// Must match the sender structure
|
||||||
|
typedef struct struct_message {
|
||||||
|
char a[32];
|
||||||
|
int b;
|
||||||
|
float c;
|
||||||
|
bool led;
|
||||||
|
} 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.led);
|
||||||
|
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));
|
||||||
|
pinMode(ONBOARD_LED, OUTPUT);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
if (myData.led == true){
|
||||||
|
digitalWrite(ONBOARD_LED, HIGH);
|
||||||
|
} else {
|
||||||
|
digitalWrite(ONBOARD_LED, LOW);
|
||||||
|
}
|
||||||
|
delay(10);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user