Inhaltsverzeichnis:

So machen Sie mehrere ESP-Gespräche über ESP-NOW mit ESP32 und ESP8266 - Gunook
So machen Sie mehrere ESP-Gespräche über ESP-NOW mit ESP32 und ESP8266 - Gunook

Video: So machen Sie mehrere ESP-Gespräche über ESP-NOW mit ESP32 und ESP8266 - Gunook

Video: So machen Sie mehrere ESP-Gespräche über ESP-NOW mit ESP32 und ESP8266 - Gunook
Video: Floppy Disk Clock Teil 2 – FreeCAD Tutorial: Front konstruieren 2024, Juli
Anonim
So machen Sie mehrere ESP-Gespräche über ESP-NOW mit ESP32 und ESP8266
So machen Sie mehrere ESP-Gespräche über ESP-NOW mit ESP32 und ESP8266

In meinem laufenden Projekt benötige ich mehrere ESP, um ohne Router miteinander zu sprechen. Dazu verwende ich ESP-NOW, um ohne Router auf dem ESP drahtlos miteinander kommunizieren zu können.

Lieferungen

Dinge, die ich verwendet habe:

ESP32 DEV-Modul

NODEMCU 1.0 (ESP12E-Modul)

Schritt 1: Holen Sie sich die Board-Mac-Adresse

Holen Sie sich die Board-Mac-Adresse
Holen Sie sich die Board-Mac-Adresse
Holen Sie sich die Board-Mac-Adresse
Holen Sie sich die Board-Mac-Adresse

Durch ESP-now kommunizieren ESP-Geräte miteinander, indem sie Daten an ihre eindeutige Adresse senden, während sie mit einem internen Access Point-Netzwerk verbunden sind, das nach der Intilisation des ESP now erstellt wurde.. Bestimmen Sie also die MAC-Adresse jedes Geräts. Im Anhang sind meine ESP32- und ESP8266-Board-Einstellungen

FÜR ESP32

#include "WiFi.h" //Um auf ESP32 WIFI-Funktionen zuzugreifen

Void setup () {Serial.begin (115200); Serial.print ("ESP32-Board-MAC-Adresse: "); Serial.println (WiFi.macAddress()); // druckt seine MAC-Adresse} void loop(){}

FÜR ESP8266

#include //Bibliothek für den Zugriff auf ESP8266 WIFI-Funktionen

Void setup () {Serial.begin (115200); Serial.println(); Serial.print ("ESP8266 Board MAC-Adresse:"); Serial.println (WiFi.macAddress()); // druckt seine MAC-Adresse} void loop(){}

Meine MAC-ADRESSE sind:

  • ESP32 - 30:AE:A4:F5:03:A4
  • ESP8266: A4:CF:12:C7:9C:77

Schritt 2: Wie ESP-NOW funktioniert

Hier ist eine Übersicht, wie es funktioniert:

  1. Integrieren Sie esp now und WLAN-Bibliotheken
  2. Speichern Sie die Mac-Adresse des Empfänger-ESP
  3. Definieren Sie die Datenstruktur der gesendeten/empfangenen Nachricht
  4. Stellen Sie im Setup das WLAN auf den Stationsmodus ein
  5. Esp_now initialisieren
  6. die nach dem Senden und Empfangen von Daten aufgerufene Rückruffunktion ausführen und registrieren
  7. Definieren Sie für ESP8266 seine Rolle
  8. Registrieren Sie den Peer oder Empfänger esp
  9. Schicke Daten

Schritt 3: ESP-NOW-FUNKTIONEN (ESP32)

esp_now_init(leer)

Zurückkehren:

  • ESP_OK: erfolgreich
  • ESP_ERR_ESPNOW_INTERNAL: Interner Fehler

Beschreibung:

ESPNOW-Funktion initialisieren

esp_now_register_send_cb(cb)

Kehrt zurück:

  • ESP_OK: erfolgreich
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW ist nicht initialisiert
  • ESP_ERR_ESPNOW_INTERNAL: interner Fehler

Parameter:

  • cb: Callback-Funktionsname nach dem Senden von ESPNOW-Daten mit diesen Parametern:

    • void cb (const uint8_t *mac_addr, esp_now_send_status_t status)

      • mac_addr: MAC-Adresse des Empfängers
      • Status:

        • 1 = Erfolg
        • 0 = fehlgeschlagen

Beschreibung:

Rufen Sie die Funktion OnDataSent auf, nachdem Sie ESPNOW-Daten gesendet haben

esp_now_add_peerconst esp_now_peer_info_t *Peer)

Kehrt zurück:

  • ESP_OK: erfolgreich
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW ist nicht initialisiert
  • ESP_ERR_ESPNOW_ARG: ungültiges Argument
  • ESP_ERR_ESPNOW_FULL: Peer-Liste ist voll
  • ESP_ERR_ESPNOW_NO_MEM: zu wenig Speicher
  • ESP_ERR_ESPNOW_EXIST: Peer hat existiert

Parameter:

  • peer:peer Informationen mit folgenden Daten:

    • uint8_t

      peer_addr[ESP_NOW_ETH_ALEN]; ESPNOW Peer-MAC-Adresse, die auch die MAC-Adresse der Station oder der Softap ist

    • uint8_t lmk[ESP_NOW_KEY_LEN]

      ESPNOW Peer Local Master Key, der zum Verschlüsseln von Daten verwendet wird

    • uint8_t-Kanal

      Wi-Fi-Kanal, den Peer zum Senden/Empfangen von ESPNOW-Daten verwendet. Wenn der Wert 0 ist, verwenden Sie den aktuellen Kanal, auf dem sich der Sender oder die Softap befindet. Andernfalls muss es als Kanal eingestellt werden, auf dem sich der Sender oder die Softap befindet

    • wifi_interface_t ifidx

      Wi-Fi-Schnittstelle, die Peer zum Senden/Empfangen von ESPNOW-Daten verwendet

    • bool verschlüsseln

      ESPNOW-Daten, die dieser Peer sendet/empfängt, sind verschlüsselt oder nicht

    • leer *priv

      ESPNOW Peer-Privatdaten

Beschreibung:

Peer-to-Peer-Liste hinzufügen

esp_now_send(const uint8_t *peer_addr, const uint8_t *data, size_t len)

Kehrt zurück:

  • ESP_OK: erfolgreich
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW ist nicht initialisiert
  • ESP_ERR_ESPNOW_ARG: ungültiges Argument
  • ESP_ERR_ESPNOW_INTERNAL: interner Fehler
  • ESP_ERR_ESPNOW_NO_MEM: zu wenig Speicher
  • ESP_ERR_ESPNOW_NOT_FOUND: Peer wurde nicht gefunden
  • ESP_ERR_ESPNOW_IF: aktuelle WLAN-Schnittstelle stimmt nicht mit der von Peer überein

Parameter:

  • peer_addr: Peer-MAC-Adresse
  • Daten: zu sendende Daten
  • len: Länge der Daten

Beschreibung:

Senden Sie ESPNOW-Daten. In einigen Fällen geschieht dies:

  • Wenn peer_addr nicht NULL ist, senden Sie Daten an den Peer, dessen MAC-Adresse mit peer_addr übereinstimmt
  • Wenn peer_addr NULL ist, senden Sie Daten an alle Peers, die der Peer-Liste hinzugefügt wurden
  • Die maximale Datenlänge muss kleiner als ESP_NOW_MAX_DATA_LEN. sein
  • Der Puffer, auf den das Datenargument zeigt, muss nicht gültig sein, nachdem esp_now_send zurückgegeben wurde

esp_now_register_recv_cb(cb)

Kehrt zurück:

  • ESP_OK: erfolgreich
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW ist nicht initialisiert
  • ESP_ERR_ESPNOW_INTERNAL: interner Fehler

Parameter:

  • cb: Callback-Funktion zum Empfangen von ESPNOW-Daten

    • void cb (const uint8_t *mac_addr, const uint8_t *data, int data_len)

      • mac_adresse:

        Mac-Adresse des Empfängers

      • *Daten:

        Daten empfangen

      • data_len

        Datenbytelänge

Beschreibung:

Rufen Sie die Funktion cb auf, nachdem Sie ESPNOW-Daten empfangen haben

Schritt 4: ESP-NOW-FUNKTIONEN (ESP8266)

FUNKTIONEN BESCHREIBUNG ESP32 ESP8266

int esp_now_init(void)

Kehrt zurück:

  • 1 = Erfolg
  • 0=fehlgeschlagen

Beschreibung

ESPNOW-Funktion initialisieren

int esp_now_set_self_role(u8-Rolle)

Parameter:

  • ESP_NOW_ROLE_IDLE: Datenübertragung ist nicht erlaubt.
  • ESP_NOW_ROLE_CONTROLLER: Sation-Schnittstelle hat Priorität
  • ESP_NOW_ROLE_SLAVE: Der SoftAP-Schnittstelle wird Priorität eingeräumt
  • ESP_NOW_ROLE_COMBO: SoftAPinterface hat Priorität

Beschreibung

Legt die Geräterolle fest

int esp_now_register_send_cb(cb)

Kehrt zurück:

  • 1 = Erfolg
  • 0 = fehlgeschlagen

Parameter:

  • cb: Callback-Funktionsname nach dem Senden von ESPNOW-Daten mit diesen Parametern:

    • void cb (const uint8_t *mac_addr, esp_now_send_status_t status)

      • mac_addr: MAC-Adresse des Empfängers
      • Status:

        • 1 = Erfolg
        • 0 = fehlgeschlagen

Beschreibung

Rufen Sie die Funktion OnDataSent auf, nachdem Sie ESPNOW-Daten gesendet haben

int esp_now_add_peer(u8 *mac_addr, u8 Rolle, u8 Kanal, u8 *key, u8 key_len)

Kehrt zurück:

  • 1 = Erfolg
  • 0 = fehlgeschlagen

Parameter:

  • mac_addr

    Mac-Adresse des Peers

  • Rolle
  • Kanal

    Wenn der Wert 0 ist, verwenden Sie den aktuellen Kanal, auf dem sich der Sender oder die Softap befindet. Andernfalls muss es als der Kanal eingestellt werden, auf dem der Sender oder die Softap ist

  • *Schlüssel

    Schlüssel zur Verschlüsselung

  • key_len

    Länge des Schlüssels

Beschreibung:

Peer-to-Peer-Liste hinzufügen

int esp_now_send(const uint8_t *peer_addr, const uint8_t *data, size_t len)

Kehrt zurück:

  • 1 = Erfolg
  • 0 = Fehler

Parameter:

  • peer_addr: Peer-MAC-Adresse
  • Daten: zu sendende Daten
  • len: Länge der Daten

Beschreibung:

Senden Sie ESPNOW-Daten. In einigen Fällen geschieht dies:

  • Wenn peer_addr nicht NULL ist, senden Sie Daten an den Peer, dessen MAC-Adresse mit peer_addr übereinstimmt
  • Wenn peer_addr NULL ist, senden Sie Daten an alle Peers, die der Peer-Liste hinzugefügt wurden
  • Die maximale Datenlänge muss kleiner als ESP_NOW_MAX_DATA_LEN. sein
  • Der Puffer, auf den das Datenargument zeigt, muss nicht gültig sein, nachdem esp_now_send zurückgegeben wurde

int esp_now_register_recv_cb(cb)

Kehrt zurück:

  • 1 = Erfolg
  • 0 = Fehler

Parameter:

  • cb: Callback-Funktion zum Empfangen von ESPNOW-Daten

    • void cb (const uint8_t *mac_addr, const uint8_t *data, int data_len)

      • mac_adresse:

        Mac-Adresse des Empfängers

      • *Daten:

        Daten empfangen

      • data_len

        Datenbytelänge

Beschreibung:

Rufen Sie die Funktion cb auf, nachdem Sie ESPNOW-Daten empfangen haben

Schritt 5: Einwegkommunikation (ESP32 als Absender)

Der ESP32 sendet Daten an einen ESP8266. mit diesem Code. Ändern Sie die BroadcastAddress in Ihre entsprechende Empfänger-Mac-Adresse. Meins war A4:CF:12:C7:9C:77

//Erforderliche Bibliotheken hinzufügen

#include //Um auf die ESP-Now-Funktionen zuzugreifen #include //Um Wifi-Funktionen auf ESP32 hinzuzufügen //speichere die MAC-Adresse in einem Array namens BroadcastAddress; uint8_t BroadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; //MAC-Adresse meines Empfängers /*definieren Sie die Datentypen der mehreren Variablen, die strukturiert und in struct_message umbenannt wurden*/ typedef struct struct_message { char a[32]; intb; Schwimmer c; Zeichenfolge d; bool e; } struct_message; // Eine struct_message namens myData erstellen struct_message myData; // Funktion, die aufgerufen wird, wenn Daten gesendet werden, um ihren Status zu drucken 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 ? "Zustellung erfolgreich": "Zustellung fehlgeschlagen"); aufrechtzuerhalten. Void setup () { // Baudrate für die serielle Kommunikation mit ESP Serial.begin (115200) einstellen; // Gerät als Wi-Fi-Station einstellen WiFi.mode(WIFI_STA); // Startet das WLAN // Init ESP-NOW und gibt seinen Status zurück if (esp_now_init() != ESP_OK) { Serial.println("Fehler beim Initialisieren von ESP -JETZT"); Rückkehr; } // Rufen Sie die Funktion OnDataSent auf, nachdem Sie ESPNOW-Daten gesendet haben esp_now_register_send_cb(OnDataSent); // Peer registrieren esp_now_peer_info_t peerInfo; //die Peer-Informationen initialisieren und als Zeiger auf eine Adresse zuweisen memcpy(peerInfo.peer_addr, BroadcastAddress, 6); // den Wert von BroadcastAddress mit 6 Byte nach peerInfo.peer_addr peerInfo.channel = 0 kopieren; //Kanal, auf dem der ESP spricht. 0 bedeutet undefiniert und Daten werden auf dem aktuellen Kanal gesendet. 1-14 sind gültige Kanäle, die mit dem lokalen Gerät gleich sind peerInfo.encrypt = false; // nicht verschlüsselt // Gerät zur gekoppelten Geräteliste hinzufügen if (esp_now_add_peer (&peerInfo) != ESP_OK) { Serial.println ("Fehler beim Hinzufügen des Peers"); Rückkehr; } } void loop() { // Werte zum Senden setzen strcpy(myData.a, "THIS IS A CHAR"); // "THIS IS A CHAR" in Variable a meiner "data" speichern, die zuvor definiert wurde myData.b = random (1, 20); // einen zufälligen Wert speichern myData.c = 1.2; //Float speichern myData.d = "Hallo"; //einen String speichern myData.e = false; //save a bool //Sende Daten kleiner oder gleich 250 Bytes über ESP-NOW und gibt ihren Status zurück esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); if (Ergebnis == ESP_OK) { Serial.println ("Mit Erfolg gesendet"); } else { Serial.println ("Fehler beim Senden der Daten"); } Verzögerung (2000); }

Der ESP8266 empfängt mit diesem Code Daten vom ESP32.

//Erforderliche Bibliotheken hinzufügen

#include //Um Wifi-Funktionen auf ESP32 hinzuzufügen #include //Um auf die ESP-Now-Funktionen zuzugreifen /*definiere die Datentypen der mehreren Variablen strukturiert und benenne sie alle als struct_message*/ typedef struct struct_message { char a[32]; intb; Schwimmer c; Zeichenfolge d; bool e; } struct_message; // Erstellen Sie eine Variable struct_message namens myData struct_message myData; // Funktion wird aufgerufen, wenn die Daten empfangen werden und gibt sie aus void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len) { memcpy(&myData, eingehendeData, sizeof(myData)); Serial.print ("Bytes empfangen: "); Serial.println (len); Serial.print("Zeichen:"); 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(); aufrechtzuerhalten. Void setup () { // Baudrate für die serielle Kommunikation mit ESP Serial.begin (115200) einstellen; // Gerät als Wi-Fi-Station einstellen WiFi.mode(WIFI_STA); // Startet das WLAN // Init ESP-NOW und gibt seinen Status zurück if (esp_now_init () != 0) { Serial.println ("Fehler beim Initialisieren von ESP-NOW"); Rückkehr; } esp_now_set_self_role(ESP_NOW_ROLE_SLAVE); // Definiert die Rolle dieses esp esp_now_register_recv_cb(OnDataRecv); // Rufen Sie die Funktion OnDataRecv auf, nachdem Sie ESPNOW-Daten empfangen haben} void loop() {}

Schritt 6: Einwegkommunikation (ESP8266 als Absender)

Der ESP8266 sendet Daten an einen ESP32. mit diesem Code. Ändern Sie die BroadcastAddress in Ihre entsprechende Empfänger-Mac-Adresse. Meine esp32-Adresse ist 30:AE:A4:F5:03:A4. Für andere Funktionen für esp8266 gehen Sie hier

//Erforderliche Bibliotheken hinzufügen

#include //Um Wifi-Funktionen auf ESP32 hinzuzufügen #include //Um auf die ESP-Now-Funktionen zuzugreifen //speichere die MAC-Adresse in einem Array namens BroadcastAddress; uint8_t BroadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*definieren Sie die Datentypen der mehreren Variablen, die strukturiert und in struct_message umbenannt wurden*/ typedef struct struct_message { char a[32]; intb; Schwimmer c; Zeichenfolge d; bool e; } struct_message; // Erstellen Sie eine strukturierte Variable namens myData struct_message myData; // Funktion wird aufgerufen, wenn Daten gesendet werden und ihren Status ausgeben void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) { Serial.print("\r\nLast Packet Send Status:\t"); Serial.println (sendStatus == 1 ? "Zustellung erfolgreich": "Zustellung fehlgeschlagen"); aufrechtzuerhalten. Void setup () { // Baudrate für die serielle Kommunikation mit ESP Serial.begin (115200) einstellen; // Gerät als Wi-Fi-Station einstellen WiFi.mode (WIFI_STA); // Startet das WLAN // Init ESP-NOW und gibt seinen Status zurück if (esp_now_init ()) { Serial.println ("Fehler beim Initialisieren von ESP-NOW"); Rückkehr; } esp_now_register_send_cb(OnDataSent); // Rufen Sie die Funktion OnDataSent nach dem Senden von ESPNOW-Daten auf // Fügen Sie das Gerät zur Liste der gekoppelten Geräte hinzu if (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)) { Serial.println ("Fehler beim Hinzufügen von Peer"); Rückkehr; } } void loop() { // Werte zum Senden setzen strcpy(myData.a, "THIS IS A CHAR"); // "THIS IS A CHAR" in Variable a meiner "data" speichern, die zuvor definiert wurde myData.b = random (1, 20); // einen zufälligen Wert speichern myData.c = 1,2; //Float speichern myData.d = "SP8266"; //einen String speichern myData.e = false; //save a bool //Sende Daten kleiner oder gleich 250 Bytes über ESP-NOW und gibt ihren Status zurück int result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); if (esp_now_init () ! = 0) { Serial.println ("Mit Erfolg gesendet"); } else { Serial.println ("Fehler beim Senden der Daten"); } Verzögerung (2000); }

Der ESP32 empfängt Daten von einem ESP8266. mit diesem Code. Weitere Funktionen finden Sie hier

//Erforderliche Bibliotheken hinzufügen

#include //Um auf die ESP-Now-Funktionen zuzugreifen #include //Um Wifi-Funktionen auf ESP32 hinzuzufügen /*definiere die Datentypen der mehreren Variablen strukturiert und benenne sie alle als struct_message*/ typedef struct struct_message { char a[32]; intb; Schwimmer c; Zeichenfolge d; bool e; } struct_message; // Erstellen Sie eine Variable struct_message namens myData struct_message myData; // Funktion wird aufgerufen, wenn die Daten empfangen werden und gibt sie aus void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) { memcpy(&myData, eingehendeData, sizeof(myData)); Serial.print ("Bytes empfangen: "); Serial.println (len); Serial.print("Zeichen:"); 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(); aufrechtzuerhalten. Void setup () { // Baudrate für die serielle Kommunikation mit ESP Serial.begin (115200) einstellen; // Gerät als Wi-Fi-Station einstellen WiFi.mode(WIFI_STA); // Startet das WLAN // Init ESP-NOW und gibt seinen Status zurück if (esp_now_init () != 0) { Serial.println ("Fehler beim Initialisieren von ESP-NOW"); Rückkehr; } esp_now_register_recv_cb(OnDataRecv); // Rufen Sie die Funktion OnDataRecv auf, nachdem Sie ESPNOW-Daten empfangen haben} void loop() {}

Schritt 7: ZWEI-WEGE-KOMMUNIKATION

ZWEI-WEGE-KOMMUNIKATION
ZWEI-WEGE-KOMMUNIKATION
ZWEI-WEGE-KOMMUNIKATION
ZWEI-WEGE-KOMMUNIKATION

Der ESP32 sendet beim Start Daten an den ESP8266. Der ESP8266 druckt die empfangene Nachricht und antwortet dann, die der ESP32 auf seinem seriellen Monitor ausdruckt.

ESP32-CODE

//Erforderliche Bibliotheken hinzufügen

#include //Um auf die ESP-Now-Funktionen zuzugreifen #include //Um Wifi-Funktionen auf ESP32 hinzuzufügen //speichere die MAC-Adresse in einem Array namens BroadcastAddress; uint8_t BroadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; //MAC-Adresse meines Empfängers /*definieren Sie die Datentypen der mehreren Variablen, die strukturiert und in struct_message umbenannt wurden*/ typedef struct struct_message { char a[32]; intb; Schwimmer c; Zeichenfolge d; bool e; } struct_message; // Erstellen Sie eine struct_message namens myData struct_message myData; // Funktion, die aufgerufen wird, wenn Daten gesendet werden, um ihren Status zu drucken 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 ? "Zustellung erfolgreich": "Zustellung fehlgeschlagen"); if(status!=ESP_NOW_SEND_SUCCESS){send_data();}} void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) { memcpy(&myData, eingehendeData, sizeof(myData)); Serial.print ("Bytes empfangen: "); Serial.println (len); Serial.print("Zeichen:"); 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(); aufrechtzuerhalten. Void setup () { // Baudrate für die serielle Kommunikation mit ESP Serial.begin (115200) einstellen; // Gerät als Wi-Fi-Station einstellen WiFi.mode(WIFI_STA); // Startet das WLAN // Init ESP-NOW und gibt seinen Status zurück if (esp_now_init() != ESP_OK) { Serial.println("Fehler beim Initialisieren von ESP -JETZT"); Rückkehr; } // Rufen Sie die Funktion OnDataSent auf, nachdem Sie ESPNOW-Daten gesendet haben esp_now_register_send_cb(OnDataSent); // Peer registrieren esp_now_peer_info_t peerInfo; //die Peer-Informationen initialisieren und als Zeiger auf eine Adresse zuweisen memcpy(peerInfo.peer_addr, BroadcastAddress, 6); // den Wert von BroadcastAddress mit 6 Byte nach peerInfo.peer_addr peerInfo.channel = 0 kopieren; //Kanal, auf dem der ESP spricht. 0 bedeutet undefiniert und Daten werden auf dem aktuellen Kanal gesendet.1-14 sind gültige Kanäle, die mit dem lokalen Gerät gleich sind peerInfo.encrypt = false; // nicht verschlüsselt // Gerät zur gekoppelten Geräteliste hinzufügen if (esp_now_add_peer (&peerInfo) != ESP_OK) { Serial.println ("Fehler beim Hinzufügen des Peers"); Rückkehr; } esp_now_register_recv_cb(OnDataRecv); // Rufen Sie die Funktion OnDataRecv auf, nachdem Sie ESPNOW-Daten empfangen haben send_data (); aufrechtzuerhalten. Void Schleife () {} Void send_data () { Serial.println ("Senden"); // Werte zum Senden setzen strcpy(myData.a, "THIS IS A CHAR"); // "THIS IS A CHAR" in Variable a meiner "data" speichern, die zuvor definiert wurde myData.b = random (1, 20); // einen zufälligen Wert speichern myData.c = 1,2; //Float speichern myData.d = "ESP32"; //einen String speichern myData.e = false; //save a bool //Sende Daten kleiner oder gleich 250 Bytes über ESP-NOW und gibt ihren Status zurück esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); if (result == ESP_OK) { Serial.println ("Mit Erfolg gesendet");} else { Serial.println ("Fehler beim Senden der Daten"); } }

ESP8266-CODE

//Erforderliche Bibliotheken hinzufügen

#include //Um Wifi-Funktionen auf ESP32 hinzuzufügen #include //Um auf die ESP-Now-Funktionen zuzugreifen //speichere die MAC-Adresse in einem Array namens BroadcastAddress; uint8_t BroadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*definieren Sie die Datentypen der mehreren Variablen, die strukturiert und in struct_message umbenannt wurden*/ typedef struct struct_message { char a[32]; intb; Schwimmer c; Zeichenfolge d; bool e; } struct_message; // Erstellen Sie eine Variable struct_message namens myData struct_message myData; // Funktion wird aufgerufen, wenn die Daten empfangen werden und gibt sie aus void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len) { memcpy(&myData, eingehendeData, sizeof(myData)); Serial.print ("Bytes empfangen: "); Serial.println (len); Serial.print("Zeichen:"); 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(); schicke Daten(); aufrechtzuerhalten. Void OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\r\nStatus des letzten Pakets:\t"); Serial.println (sendStatus == 1 ? "Zustellung erfolgreich": "Zustellung fehlgeschlagen"); if(sendStatus!=1){ send_data(); } } void send_data () { // Werte zum Senden setzen strcpy (myData.a, "THIS IS A CHAR"); // "THIS IS A CHAR" in Variable a meiner "data" speichern, die zuvor definiert wurde myData.b = random (1, 20); // einen zufälligen Wert speichern myData.c = 1,2; //Float speichern myData.d = "ESP8266"; //einen String speichern myData.e = false; //einen bool speichern esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); aufrechtzuerhalten. Void setup () { // Baudrate für die serielle Kommunikation mit ESP Serial.begin (115200) einstellen; // Gerät als Wi-Fi-Station einstellen WiFi.mode(WIFI_STA); // Startet das WLAN // Init ESP-NOW und gibt seinen Status zurück if (esp_now_init () != 0) { Serial.println ("Fehler beim Initialisieren von ESP-NOW"); Rückkehr; } if (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)) {Serial.println ("Fehler beim Hinzufügen von Peer"); Rückkehr; } esp_now_set_self_role(ESP_NOW_ROLE_COMBO); esp_now_register_send_cb(OnDataSent); esp_now_set_self_role(ESP_NOW_ROLE_COMBO); // Definiert die Rolle dieses esp esp_now_register_recv_cb(OnDataRecv); // Rufen Sie die Funktion OnDataRecv auf, nachdem Sie ESPNOW-Daten empfangen haben} void loop() {}

Schritt 8: REFERENZEN

ESPNOW_32_Beispiel

ESPNOW_8266 Beispiel

WIFI.h

ESP8266WiFi.h

esp_now.h für ESP8266

esp_now.h für ESP32

esp_now offizielles Dokument (Bessere Erklärung der Funktionen)

Offizieller ESP-NOW-Leitfaden

Empfohlen: