Um Informationen zu übertragen oder zu empfangen, erfordert das „esp“ -Protokoll die „MAC“ -Adresse der ESP32-Modul, von denen Sie die Informationen erhalten, und Sie müssen auch die „MAC“ -Adresse des ESP32-Modul angeben, an das Sie die Informationen übertragen möchten.
Ich zeige dann den Code, der auf dem Bildschirm angezeigt wird, mit dem „Monitor Series“, die MAC-Adresse des ESP32-Moduls, das den Code ausführt.
Code, um die Adresse „MAC“ von „Monitor Serie“ zu kennen:
#include <Arduino.h>
#include "WiFi.h"
void setup(){
Serial.begin(9600);
WiFi.mode(WIFI_STA);
Serial.println(WiFi.macAddress());
}
void loop(){
Serial.println(WiFi.macAddress());
delay(5000);
}
Code, von dem ein ESP Modul eine Information an das andere Modul überträgt und gleichzeitig eine Information vom gleichen Modul empfängt.
Als Erste müssen wir die Bibliotheken dass wir brauchen hinzufügen. In diesem Projekt benötigen wir die Bibliothek „esp-now“, die das Protokoll zum Empfangen und Übertragen von einem Modul zum anderen enthält. Und die „WiFi“ -Bibliothek, mit der wir das ESP32-WLAN-Kommunikationssystem betreiben werden.
#include <esp_now.h>
#include <WiFi.h>
Als Nächstes, um die MAC-Adresse zu speichern, haben wir ein Array mit der Bezeichnung „broadcastAddress“ verwendet. In diesem Fall ist „uint8_t“ als Datenwert definiert, der eine 8-Bit-Ganzzahl ohne negatives Vorzeichen ist.
// REPLACE WITH YOUR RECEIVER MAC Address
uint8_t broadcastAddress[] = {0x34, 0x86, 0x5D, 0xFD, 0x00, 0x00};
Im folgenden Code definieren wir die Struktur, die die Daten haben sollen, sowohl für das Senden als auch für das Empfangen. Wir verwenden „struct“, um dem folgenden Namen einen Datentyp namens „structure“ zuzuordnen, und deklarieren ihn als Typ „typedef“, so dass er als diese Name gespeichert wird, in diesem Fall wird der von uns definierte Name als Struktur gespeichert, auf diese Weise müssen wir nicht jedes Mal, wenn wir uns auf den definierten Namen beziehen, erneut „struct“ eingeben.
Ein „struct“-Datentyp kann eine oder mehrere Variablen enthalten, in unserem Beispiel eine einzelne Variable „int a“, die den Buchstaben „a“ als Ganzzahl (integer) deklariert.
Wir deklarieren dann zwei Variablen mit den Namen „myDataRec“ und „myDataSen“, die jeweils die Variablen des definierten Datentyps „struct“ enthalten.
// Structure example to send data
// Must match the receiver structure
typedef struct struct_message {
int a;
} struct_message;
// Create a struct_message called myData
struct_message myDataRec;
struct_message myDataSen;
Der folgende Code wird als „peerInfo2“ bezeichnet und ist eine Datentypstruktur, die mit „esp_now_peer_info_t“ verwandt ist (auf der offiziellen Espressif-Website beschrieben),
esp_now_peer_info_t peerInfo;
.
.
.
// 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;
}
// 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");
}
// callback function that will be executed when data is received
void OnDataRecv(const uint8_t *mac, const uint8_t *incomingData, int len) {
memcpy(&myDataRec, incomingData, sizeof(myDataRec));
Serial.print("Bytes received: ");
Serial.println(len);
Serial.print("Int: ");
Serial.println(myDataRec.a);
Serial.println();
}
// Init Serial Monitor
Serial.begin(9600);
// 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);
// Once ESPNow is successfully Init, we will register for recv CB to
// get recv packer info
esp_now_register_recv_cb(OnDataRecv);
// Set values to send
myDataSen.a = 1;
// Send message via ESP-NOW
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myDataSen, sizeof(myDataSen));
if (result == ESP_OK) {
Serial.println("Sent with success");
}
else {
Serial.println("Error sending the data");
}
Vollständiger Modul 1-Code:
#include <esp_now.h>
#include <WiFi.h>
// REPLACE WITH YOUR RECEIVER MAC Address
uint8_t broadcastAddress[] = {0x34, 0x86, 0x5D, 0xFD, 0x00, 0x00};
// Structure example to send data
// Must match the receiver structure
typedef struct struct_message {
int a;
} struct_message;
// Create a struct_message called myData
struct_message myDataRec;
struct_message myDataSen;
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");
}
// callback function that will be executed when data is received
void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
memcpy(&myDataRec, incomingData, sizeof(myDataRec));
Serial.print("Bytes received: ");
Serial.println(len);
Serial.print("Int: ");
Serial.println(myDataRec.a);
Serial.println();
}
void setup() {
// Init Serial Monitor
Serial.begin(9600);
// 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;
}
// Once ESPNow is successfully Init, we will register for recv CB to
// get recv packer info
esp_now_register_recv_cb(OnDataRecv);
}
void loop() {
// Set values to send
myDataSen.a = 1;
// Send message via ESP-NOW
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myDataSen, sizeof(myDataSen));
if (result == ESP_OK) {
Serial.println("Sent with success");
}
else {
Serial.println("Error sending the data");
}
delay(2000);
}
In unserem Beispiel funktioniert Modul 2 genauso wie Modul 1. Nachstehend finden Sie den vollständigen Code für Modul 2:
#include <esp_now.h>
#include <WiFi.h>
// REPLACE WITH YOUR RECEIVER MAC Address
uint8_t broadcastAddress[] = {0xc0, 0x49, 0xef, 0xce, 0x00, 0x00};
// Structure example to receive data
// Must match the sender structure
typedef struct struct_message {
int a;
} struct_message;
// Create a struct_message called myData
struct_message myDataRec;
struct_message myDataSen;
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");
}
// callback function that will be executed when data is received
void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
memcpy(&myDataRec, incomingData, sizeof(myDataRec));
Serial.print("Bytes received: ");
Serial.println(len);
Serial.print("Int: ");
Serial.println(myDataRec.a);
Serial.println();
}
void setup() {
// Initialize Serial Monitor
Serial.begin(9600);
// 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(OnDataRecv);
// 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
myDataSen.a = 2;
// Send message via ESP-NOW
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myDataSen, sizeof(myDataSen));
if (result == ESP_OK) {
Serial.println("Sent with success");
}
else {
Serial.println("Error sending the data");
}
delay(2000);
}
Schreibe einen Kommentar Antworten abbrechen