Inhoudsopgave:

Meerdere ESP-gesprekken voeren via ESP-NOW met ESP32 en ESP8266: 8 stappen
Meerdere ESP-gesprekken voeren via ESP-NOW met ESP32 en ESP8266: 8 stappen

Video: Meerdere ESP-gesprekken voeren via ESP-NOW met ESP32 en ESP8266: 8 stappen

Video: Meerdere ESP-gesprekken voeren via ESP-NOW met ESP32 en ESP8266: 8 stappen
Video: #289 - Bitcoin NFT verkocht voor $500.000, de opmars van Coinbase en Bitcoin in je inboedel 2024, Juli-
Anonim
Meerdere ESP-gesprekken voeren via ESP-NOW met ESP32 en ESP8266
Meerdere ESP-gesprekken voeren via ESP-NOW met ESP32 en ESP8266

Op mijn lopende project heb ik meerdere ESP nodig om met elkaar te praten zonder een router. Om dit te doen, zal ik de ESP-NOW gebruiken om draadloos met elkaar te communiceren zonder een router op de ESP.

Benodigdheden

Dingen die ik heb gebruikt:

ESP32 DEV-module

NODEMCU 1.0 (ESP12E-module)

Stap 1: Verkrijg het Mac-adres van het bord

Het Mac-adres van het bord ophalen
Het Mac-adres van het bord ophalen
Het Mac-adres van het bord ophalen
Het Mac-adres van het bord ophalen

Via ESP-now praten ESP-apparaten met elkaar door gegevens naar hun unieke adres te sturen terwijl ze zijn verbonden met een intern toegangspuntnetwerk dat is gemaakt bij het installeren van de esp now.. Bepaal dus het MAC-adres van elk apparaat. Bijgevoegd zijn mijn ESP32- en ESP8266-kaartinstellingen:

VOOR ESP32

#include "WiFi.h" // Om toegang te krijgen tot ESP32 WIFI-mogelijkheden

void setup(){ Serial.begin(115200); Serial.print ("ESP32-kaart MAC-adres: "); Serial.println(WiFi.macAddress()); // drukt zijn MAC-adres af } void loop () {}

VOOR ESP8266:

#include //Bibliotheek gebruikt om toegang te krijgen tot ESP8266 WIFI-mogelijkheden

void setup(){ Serial.begin(115200); Serieel.println(); Serial.print ("ESP8266 Board MAC-adres: "); Serial.println(WiFi.macAddress()); // drukt zijn MAC-adres af } void loop () {}

Mijn MAC-ADRES is:

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

Stap 2: Hoe ESP-NOW te laten werken?

Hier is een overzicht van hoe je het kunt laten werken:

  1. Voeg nu esp en wifi-bibliotheken toe
  2. Bewaar het mac-adres van de ontvanger ESP
  3. Definieer de gegevensstructuur van het verzonden/ontvangen bericht
  4. Stel bij de installatie de wifi in op stationmodus
  5. Initialiseer esp_now
  6. maak en registreer de terugbelfunctie die wordt aangeroepen na het verzenden en ontvangen van gegevens
  7. Definieer voor Esp8266 zijn rol
  8. registreer de peer of ontvanger in het bijzonder
  9. Verstuur data

Stap 3: ESP-NOW-FUNCTIES (ESP32)

esp_now_init(void)

Opbrengst:

  • ESP_OK: slagen
  • ESP_ERR_ESPNOW_INTERNAL: Interne fout

Beschrijving:

ESPNOW-functie initialiseren

esp_now_register_send_cb(cb)

Geeft terug:

  • ESP_OK: slagen
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW is niet geïnitialiseerd
  • ESP_ERR_ESPNOW_INTERNAL: interne fout

Parameters:

  • cb: naam van de callback-functie na het verzenden van ESPNOW-gegevens met deze parameters:

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

      • mac_addr: mac-adres van ontvanger
      • toestand:

        • 1 = succes
        • 0 = mislukt

Beschrijving:

Roep de functie OnDataSent aan na het verzenden van ESPNOW-gegevens

esp_now_add_peerconst esp_now_peer_info_t *peer)

Geeft terug:

  • ESP_OK: slagen
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW is niet geïnitialiseerd
  • ESP_ERR_ESPNOW_ARG: ongeldig argument
  • ESP_ERR_ESPNOW_FULL: lijst met peers is vol
  • ESP_ERR_ESPNOW_NO_MEM: onvoldoende geheugen
  • ESP_ERR_ESPNOW_EXIST: peer heeft bestaan

Parameters:

  • peer:peer informatie met de volgende gegevens:

    • uint8_t

      peer_addr[ESP_NOW_ETH_ALEN]; ESPNOW peer MAC-adres dat ook het MAC-adres is van station of softap

    • uint8_t lmk[ESP_NOW_KEY_LEN]

      ESPNOW peer lokale hoofdsleutel die wordt gebruikt om gegevens te versleutelen

    • uint8_t kanaal

      Wi-Fi-kanaal dat peer gebruikt om ESPNOW-gegevens te verzenden/ontvangen. Als de waarde 0 is, gebruik dan het huidige kanaal waarop het station of de softap staat. Anders moet het worden ingesteld als het kanaal waarop die zender of softap staat

    • wifi_interface_t ifidx

      Wi-Fi-interface die peer gebruikt om ESPNOW-gegevens te verzenden/ontvangen

    • bool versleutelen

      ESPNOW-gegevens die deze peer verzendt / ontvangt, zijn gecodeerd of niet

    • leegte *priv

      ESPNOW peer-privégegevens

Beschrijving:

Een peer-to-peer-lijst toevoegen

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

Geeft terug:

  • ESP_OK: slagen
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW is niet geïnitialiseerd
  • ESP_ERR_ESPNOW_ARG: ongeldig argument
  • ESP_ERR_ESPNOW_INTERNAL: interne fout
  • ESP_ERR_ESPNOW_NO_MEM: onvoldoende geheugen
  • ESP_ERR_ESPNOW_NOT_FOUND: peer is niet gevonden
  • ESP_ERR_ESPNOW_IF: huidige WiFi-interface komt niet overeen met die van peer

Parameters:

  • peer_addr: peer MAC-adres
  • gegevens: gegevens om te verzenden
  • len: lengte van gegevens

Beschrijving:

ESPNOW-gegevens verzenden. In sommige gevallen gebeurt dit:

  • Als peer_addr niet NULL is, stuur dan gegevens naar de peer wiens MAC-adres overeenkomt met peer_addr
  • Als peer_addr NULL is, stuur dan gegevens naar alle peers die aan de peerlijst zijn toegevoegd
  • De maximale lengte van gegevens moet kleiner zijn dan ESP_NOW_MAX_DATA_LEN
  • De buffer waarnaar wordt verwezen door het gegevensargument hoeft niet geldig te zijn nadat esp_now_send is geretourneerd

esp_now_register_recv_cb(cb)

Geeft terug:

  • ESP_OK: slagen
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW is niet geïnitialiseerd
  • ESP_ERR_ESPNOW_INTERNAL: interne fout

Parameters:

  • cb: callback-functie voor het ontvangen van ESPNOW-gegevens

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

      • mac_addr:

        mac adres van ontvanger

      • *gegevens:

        gegevens ontvangen

      • data_len

        gegevensbyte lengte

Beschrijving:

Roep de functie cb aan na ontvangst van ESPNOW-gegevens

Stap 4: ESP-NOW-FUNCTIES (ESP8266)

FUNCTIES OMSCHRIJVING ESP32 ESP8266

int esp_now_init(void)

Geeft terug:

  • 1 = succes
  • 0=mislukt

Beschrijving

ESPNOW-functie initialiseren

int esp_now_set_self_role(u8 rol)

Parameters:

  • ESP_NOW_ROLE_IDLE: gegevensoverdracht is niet toegestaan.
  • ESP_NOW_ROLE_CONTROLLER: prioriteit wordt gegeven aan de Sation-interface
  • ESP_NOW_ROLE_SLAVE: prioriteit wordt gegeven aan SoftAP-interface
  • ESP_NOW_ROLE_COMBO: prioriteit wordt gegeven aan SoftAPinterface

Beschrijving

Stelt de apparaatrol in

int esp_now_register_send_cb(cb)

Geeft terug:

  • 1 = succes
  • 0 = mislukt

Parameters:

  • cb: naam van de callback-functie na het verzenden van ESPNOW-gegevens met deze parameters:

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

      • mac_addr: mac-adres van ontvanger
      • toestand:

        • 1 = succes
        • 0 = mislukt

Beschrijving

Roep de functie OnDataSent aan na het verzenden van ESPNOW-gegevens

int esp_now_add_peer(u8 *mac_addr, u8 rol, u8 kanaal, u8 *key, u8 key_len)

Geeft terug:

  • 1 = succes
  • 0 = mislukt

Parameters:

  • mac_addr

    mac-adres van peer

  • rol
  • kanaal

    Als de waarde 0 is, gebruik dan het huidige kanaal waarop het station of de softap staat. Anders moet het worden ingesteld als het kanaal waarop dat station of die softap is ingeschakeld

  • *toets

    sleutel voor codering

  • key_len

    lengte van de sleutel

Beschrijving:

Een peer-to-peer-lijst toevoegen

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

Geeft terug:

  • 1 = Succes
  • 0 = Mislukt

Parameters:

  • peer_addr: peer MAC-adres
  • gegevens: gegevens om te verzenden
  • len: lengte van gegevens

Beschrijving:

ESPNOW-gegevens verzenden. In sommige gevallen gebeurt dit:

  • Als peer_addr niet NULL is, stuur dan gegevens naar de peer wiens MAC-adres overeenkomt met peer_addr
  • Als peer_addr NULL is, stuur dan gegevens naar alle peers die aan de peerlijst zijn toegevoegd
  • De maximale lengte van gegevens moet kleiner zijn dan ESP_NOW_MAX_DATA_LEN
  • De buffer waarnaar wordt verwezen door het gegevensargument hoeft niet geldig te zijn nadat esp_now_send is geretourneerd

int esp_now_register_recv_cb(cb)

Geeft terug:

  • 1 = Succes
  • 0 = Mislukt

Parameters:

  • cb: callback-functie voor het ontvangen van ESPNOW-gegevens

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

      • mac_addr:

        mac adres van ontvanger

      • *gegevens:

        gegevens ontvangen

      • data_len

        gegevensbyte lengte

Beschrijving:

Roep de functie cb aan na ontvangst van ESPNOW-gegevens

Stap 5: Eenrichtingscommunicatie (ESP32 als afzender)

De ESP32 stuurt gegevens naar een ESP8266. met deze code. Wijzig het broadcastAddress in uw corresponderende mac-adres van de ontvanger. De mijne was A4:CF:12:C7:9C:77

//Voeg benodigde bibliotheken toe

#include //To toegang tot de esp now-functies #include //To Add Wifi Capabilities on ESP32 //Save het MAC-adres in een array met de naam broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; //MAC-adres van mijn ontvanger /*definieer de datatypes van de meerdere gestructureerde variabelen en hernoem ze allemaal als struct_message*/ typedef struct struct_message { char a[32]; int b; zweven c; Tekenreeks d; bool e; } struct_bericht; // Maak een struct_message genaamd myData struct_message myData; // functie aangeroepen wanneer gegevens worden verzonden om de status ervan af te drukken ongeldig OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) { Serial.print("\r\nLaatste pakketverzendstatus:\t"); Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Bezorging geslaagd": "Bezorging mislukt"); } void setup () { // Stel de baudrate in voor seriële communicatie met ESP Serial.begin (115200); // Stel het apparaat in als een Wi-Fi Station WiFi.mode (WIFI_STA);// Start de wifi // Init ESP-NOW en retourneert de status if (esp_now_init() != ESP_OK) { Serial.println ("Fout bij initialiseren van ESP -NU"); opbrengst; } // bel de functie OnDataSent na het verzenden van ESPNOW-gegevens esp_now_register_send_cb (OnDataSent); // Registreer peer esp_now_peer_info_t peerInfo; // initialiseer en wijs de peer-informatie toe als een aanwijzer naar een adres memcpy (peerInfo.peer_addr, broadcastAddress, 6); // kopieer de waarde van broadcastAddress met 6 bytes naar peerInfo.peer_addr peerInfo.channel = 0; // kanaal waarop de esp praten. 0 betekent ongedefinieerd en gegevens worden verzonden op het huidige kanaal. 1-14 zijn geldige kanalen, wat hetzelfde is als het lokale apparaat peerInfo.encrypt = false; //niet versleuteld //Voeg het apparaat toe aan de lijst met gekoppelde apparaten if (esp_now_add_peer(&peerInfo) != ESP_OK){ Serial.println("Failed to add peer"); opbrengst; } } void loop () {// Stel waarden in om strcpy te verzenden (myData.a, "THIS IS A CHAR"); //save "THIS IS A CHAR" naar variabele a van mijn "data" eerder gedefinieerd myData.b = random (1, 20); // sla een willekeurige waarde op myData.c = 1.2; //save a float myData.d = "Hallo"; // sla een string op myData.e = false; //save a bool //Stuur data kleiner dan of gelijk aan 250 bytes via ESP-NOW en retourneert de status esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); if (resultaat == ESP_OK) { Serial.println ("Verzonden met succes"); } else { Serial.println("Fout bij het verzenden van de gegevens"); } vertraging (2000); }

De ESP8266 ontvangt met deze code gegevens van de ESP32.

//Voeg benodigde bibliotheken toe

#include //To Add Wifi Capabilities on ESP32 #include //To toegang tot de esp now-functies /*definieer de datatypes van de meerdere variabelen gestructureerd en hernoem ze allemaal als struct_message*/ typedef struct struct_message { char a[32]; int b; zweven c; Tekenreeks d; bool e; } struct_bericht; // Maak een variabele struct_message genaamd myData struct_message myData; // functie wordt aangeroepen wanneer de gegevens worden ontvangen en drukt deze af. Serial.print("Bytes ontvangen: "); Serial.println(len); Serial.print("Char: "); Serial.println(myData.a); Serial.print("Int: "); Serial.println(mijnData.b); Serial.print("Float: "); Serial.println(myData.c); Serial.print("String: "); Serial.println(myData.d); Serial.print("Bool: "); Serial.println(myData.e); Serieel.println(); } void setup () { // Stel de baudrate in voor seriële communicatie met ESP Serial.begin (115200); // Stel het apparaat in als een Wi-Fi Station WiFi.mode (WIFI_STA); // Start de wifi // Init ESP-NOW en retourneert de status if (esp_now_init() != 0) { Serial.println ("Fout bij initialiseren van ESP-NOW"); opbrengst; } esp_now_set_self_role (ESP_NOW_ROLE_SLAVE); // Definieert de rol van deze esp_now_register_recv_cb (OnDataRecv); // roep de functie OnDataRecv aan na ontvangst van ESPNOW-gegevens} void loop () {}

Stap 6: Eenrichtingscommunicatie (ESP8266 als afzender)

De ESP8266 stuurt gegevens naar een ESP32. met deze code. Wijzig het broadcastAddress in uw corresponderende mac-adres van de ontvanger. Mijn esp32-adres is 30:AE:A4:F5:03:A4. Voor andere functies voor esp8266 ga hier

//Voeg benodigde bibliotheken toe

#include //To Add Wifi Capabilities on ESP32 #include //To toegang tot de esp now-functies // sla het MAC-adres op in een array met de naam broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*definieer de datatypes van de meerdere gestructureerde variabelen en hernoem ze allemaal als struct_message*/ typedef struct struct_message { char a[32]; int b; zweven c; Tekenreeks d; bool e; } struct_bericht; // Maak een gestructureerde variabele met de naam myData struct_message myData; // functie aangeroepen wanneer gegevens worden verzonden en de status ervan afdrukken ongeldig OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) { Serial.print("\r\nLaatste pakketverzendstatus:\t"); Serial.println (sendStatus == 1 ? "Bezorging geslaagd": "Bezorging mislukt"); } void setup () { // Stel de baudrate in voor seriële communicatie met ESP Serial.begin (115200); // Stel het apparaat in als een Wi-Fi Station WiFi.mode (WIFI_STA);// Start de wifi // Init ESP-NOW en retourneert de status if (esp_now_init()) { Serial.println ("Fout bij initialiseren van ESP-NOW"); opbrengst; } esp_now_register_send_cb(OnDataSent); // Roep de functie OnDataSent aan na het verzenden van ESPNOW-gegevens // Voeg het apparaat toe aan de lijst met gekoppelde apparaten als (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)) {Serial.println ("Failed to add peer"); opbrengst; } } void loop () {// Stel waarden in om strcpy te verzenden (myData.a, "THIS IS A CHAR"); //save "THIS IS A CHAR" naar variabele a van mijn "data" eerder gedefinieerd myData.b = random (1, 20); // sla een willekeurige waarde op myData.c = 1.2; // sla een float myData.d = "SP8266" op; // sla een string op myData.e = false; //save a bool //Stuur data kleiner dan of gelijk aan 250 bytes via ESP-NOW en retourneert de status int result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); if (esp_now_init() != 0) { Serial.println("Verzonden met succes"); } else { Serial.println("Fout bij het verzenden van de gegevens"); } vertraging (2000); }

De ESP32 ontvangt gegevens van een ESP8266. met deze code. Zie hier voor andere functies:

//Voeg benodigde bibliotheken toe

#include //To toegang tot de esp now-functies #include //To Add Wifi Capabilities on ESP32 /*definieer de datatypes van de meerdere variabelen gestructureerd en hernoem ze allemaal als struct_message*/ typedef struct struct_message { char a[32]; int b; zweven c; Tekenreeks d; bool e; } struct_bericht; // Maak een variabele struct_message genaamd myData struct_message myData; // functie wordt aangeroepen wanneer de gegevens worden ontvangen en drukt deze af. Serial.print("Bytes ontvangen: "); Serial.println(len); Serial.print("Char: "); Serial.println(mijnData.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); Serieel.println(); } void setup () { // Stel de baudrate in voor seriële communicatie met ESP Serial.begin (115200); // Stel het apparaat in als een Wi-Fi Station WiFi.mode (WIFI_STA); // Start de wifi // Init ESP-NOW en retourneert de status if (esp_now_init() != 0) { Serial.println ("Fout bij initialiseren van ESP-NOW"); opbrengst; } esp_now_register_recv_cb(OnDataRecv); // roep de functie OnDataRecv aan na ontvangst van ESPNOW-gegevens} void loop () {}

Stap 7: TWEE-WEG COMMUNICATIE

WEDERZIJDSE COMMUNICATIE
WEDERZIJDSE COMMUNICATIE
WEDERZIJDSE COMMUNICATIE
WEDERZIJDSE COMMUNICATIE

De ESP32 stuurt gegevens bij het opstarten naar de ESP8266. De ESP8266 print het ontvangen bericht en vervolgens de antwoorden waarvan de ESP32 afdrukt op zijn seriële monitor.

ESP32-CODE

//Voeg benodigde bibliotheken toe

#include //To toegang tot de esp now-functies #include //To Add Wifi Capabilities on ESP32 //Save het MAC-adres in een array met de naam broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; //MAC-adres van mijn ontvanger /*definieer de datatypes van de meerdere variabelen gestructureerd en hernoem ze allemaal als struct_message*/ typedef struct struct_message { char a[32]; int b; zweven c; Tekenreeks d; bool e; } struct_bericht; // Maak een struct_message genaamd myData struct_message myData; // functie aangeroepen wanneer gegevens worden verzonden om de status ervan af te drukken ongeldig OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) { Serial.print("\r\nLaatste pakketverzendstatus:\t"); Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Bezorging geslaagd": "Bezorging mislukt"); if(status!=ESP_NOW_SEND_SUCCESS){send_data();} } void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) { memcpy(&myData, inkomendeData, sizeof(myData)); Serial.print("Bytes ontvangen: "); 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); Serieel.println(); } void setup () { // Stel de baudrate in voor seriële communicatie met ESP Serial.begin (115200); // Stel het apparaat in als een Wi-Fi Station WiFi.mode(WIFI_STA);//Start de wifi // Init ESP-NOW en retourneert de status if (esp_now_init() != ESP_OK) { Serial.println("Fout bij initialiseren ESP -NU"); opbrengst; } // bel de functie OnDataSent na het verzenden van ESPNOW-gegevens esp_now_register_send_cb (OnDataSent); // Registreer peer esp_now_peer_info_t peerInfo; // initialiseer en wijs de peer-informatie toe als een aanwijzer naar een adres memcpy (peerInfo.peer_addr, broadcastAddress, 6); //kopieer de waarde van broadcastAddress met 6 bytes naar peerInfo.peer_addr peerInfo.channel = 0; // kanaal waarop de esp praten. 0 betekent ongedefinieerd en gegevens worden verzonden op het huidige kanaal.1-14 zijn geldige kanalen, wat hetzelfde is als het lokale apparaat peerInfo.encrypt = false; //niet versleuteld //Voeg het apparaat toe aan de lijst met gekoppelde apparaten if (esp_now_add_peer(&peerInfo) != ESP_OK){ Serial.println("Failed to add peer"); opbrengst; } esp_now_register_recv_cb(OnDataRecv); // bel de functie OnDataRecv na ontvangst van ESPNOW-gegevens send_data (); } void loop() {} void send_data(){ Serial.println("Verzenden"); // Stel waarden in om strcpy te verzenden (myData.a, "THIS IS A CHAR"); //save "THIS IS A CHAR" naar variabele a van mijn "data" eerder gedefinieerd myData.b = random (1, 20); // sla een willekeurige waarde op myData.c = 1.2; //save a float myData.d = "ESP32"; // sla een string op myData.e = false; //save a bool //Stuur data kleiner dan of gelijk aan 250 bytes via ESP-NOW en retourneert de status esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); if (resultaat == ESP_OK) { Serial.println ("Verzonden met succes");} else { Serial.println ("Fout bij het verzenden van de gegevens"); } }

ESP8266-CODE

//Voeg benodigde bibliotheken toe

#include //To Add Wifi Capabilities on ESP32 #include //To toegang tot de esp now-functies // sla het MAC-adres op in een array met de naam broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*definieer de datatypes van de meerdere gestructureerde variabelen en hernoem ze allemaal als struct_message*/ typedef struct struct_message { char a[32]; int b; zweven c; Tekenreeks d; bool e; } struct_bericht; // Maak een variabele struct_message genaamd myData struct_message myData; // functie wordt aangeroepen wanneer de gegevens worden ontvangen en drukt deze af. Serial.print("Bytes ontvangen: "); 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); Serieel.println(); verstuur data(); } void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) { Serial.print("\r\nLaatste pakketverzendstatus:\t"); Serial.println (sendStatus == 1 ? "Bezorging geslaagd": "Bezorging mislukt"); if(sendStatus!=1){ send_data(); } } void send_data () {// Stel waarden in om strcpy te verzenden (myData.a, "THIS IS A CHAR"); //save "THIS IS A CHAR" naar variabele a van mijn "data" eerder gedefinieerd myData.b = random (1, 20); // sla een willekeurige waarde op myData.c = 1.2; // sla een float myData.d = "ESP8266" op; // sla een string op myData.e = false; //save a bool esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); } void setup () { // Stel de baudrate in voor seriële communicatie met ESP Serial.begin (115200); // Stel het apparaat in als een Wi-Fi Station WiFi.mode (WIFI_STA); // Start de wifi // Init ESP-NOW en retourneert de status if (esp_now_init() != 0) { Serial.println ("Fout bij initialiseren van ESP-NOW"); opbrengst; } if (esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)){ Serial.println("Kan geen peer toevoegen"); opbrengst; } esp_now_set_self_role (ESP_NOW_ROLE_COMBO); esp_now_register_send_cb(OnDataSent); esp_now_set_self_role (ESP_NOW_ROLE_COMBO); // Definieert de rol van deze esp_now_register_recv_cb (OnDataRecv); // roep de functie OnDataRecv aan na ontvangst van ESPNOW-gegevens} void loop () {}

Stap 8: REFERENTIES

ESPNOW_32_Voorbeeld

ESPNOW_8266 Voorbeeld

WIFI.h

ESP8266WiFi.h

esp_now.h voor ESP8266

esp_now.h voor ESP32

esp_now officieel document (betere uitleg van functies)

Officiële ESP-NOW-gids

Aanbevolen: