INHOUDSOPGAWE:

Hoe om meerdere ESP-praatjies te maak via ESP-NOW met behulp van ESP32 en ESP8266: 8 stappe
Hoe om meerdere ESP-praatjies te maak via ESP-NOW met behulp van ESP32 en ESP8266: 8 stappe

Video: Hoe om meerdere ESP-praatjies te maak via ESP-NOW met behulp van ESP32 en ESP8266: 8 stappe

Video: Hoe om meerdere ESP-praatjies te maak via ESP-NOW met behulp van ESP32 en ESP8266: 8 stappe
Video: How to use ESP32 WiFi and Bluetooth with Arduino IDE full details with examples and code 2024, Julie
Anonim
Hoe om verskeie ESP-praatjies te maak via ESP-NOW met behulp van ESP32 en ESP8266
Hoe om verskeie ESP-praatjies te maak via ESP-NOW met behulp van ESP32 en ESP8266

Op my voortgesette projek het ek verskeie ESP nodig om sonder 'n router met mekaar te praat. Om dit te doen, gebruik ek die ESP-NOW om draadloos met mekaar te kommunikeer sonder 'n router op die ESP.

Voorrade

Dinge wat ek gebruik het:

ESP32 DEV -module

NODEMCU 1.0 (ESP12E -module)

Stap 1: Kry die Board Mac -adres

Kry die Board Mac -adres
Kry die Board Mac -adres
Kry die Board Mac -adres
Kry die Board Mac -adres

Deur middel van ESP-now praat ESP-toestelle met mekaar deur data na hul unieke adres te stuur terwyl hulle gekoppel is aan 'n interne toegangspuntnetwerk wat gemaak is nadat die esp nou geïntiliseer is.. Bepaal dus die MAC -adres van elke toestel. Aangeheg is my ESP32 en ESP8266 Board Settings

VIR ESP32

#sluit "WiFi.h" in // Om toegang te verkry tot ESP32 WIFI -vermoëns

ongeldige opstelling () {Serial.begin (115200); Serial.print ("ESP32 Board MAC -adres:"); Serial.println (WiFi.macAddress ()); // druk sy MAC -adres} leemte -lus () {} af

VIR ESP8266

#include // Biblioteek wat gebruik word om toegang te verkry tot ESP8266 WIFI -vermoëns

ongeldige opstelling () {Serial.begin (115200); Serial.println (); Serial.print ("ESP8266 Board MAC -adres:"); Serial.println (WiFi.macAddress ()); // druk sy MAC -adres} leemte -lus () {} af

My MAC ADRES is:

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

Stap 2: Hoe om ESP-NOU te laat werk

Hier is 'n oorsig van hoe u dit kan laat werk:

  1. Sluit nou esp en wifi -biblioteke in
  2. Stoor die mac -adres van die ontvanger ESP
  3. Definieer die datastruktuur van die boodskap stuur/ontvang
  4. Stel die wifi in die stasie -modus op tydens die opstelling
  5. Initialiseer esp_now
  6. bel en registreer die terugbelfunksie wat gebel word nadat data gestuur en ontvang is
  7. Definieer die rol vir Esp8266
  8. registreer die eweknie of ontvanger, bv
  9. Stuur data

Stap 3: ESP-NOU-FUNKSIES (ESP32)

esp_now_init (nietig)

Terug:

  • ESP_OK: slaag
  • ESP_ERR_ESPNOW_INTERNAL: Interne fout

Beskrywing:

Begin die ESPNOW -funksie

esp_now_register_send_cb (cb)

Opbrengs:

  • ESP_OK: slaag
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW is nie geïnisialiseer nie
  • ESP_ERR_ESPNOW_INTERNAL: interne fout

Grense:

  • cb: terugbelfunksienaam nadat ESPNOW -data met hierdie parameters gestuur is:

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

      • mac_addr: mac -adres van ontvanger
      • status:

        • 1 = sukses
        • 0 = misluk

Beskrywing:

Bel die funksie OnDataSent nadat u ESPNOW -data gestuur het

esp_now_add_peerconst esp_now_peer_info_t *eweknie)

Opbrengs:

  • ESP_OK: slaag
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW is nie geïnisialiseer nie
  • ESP_ERR_ESPNOW_ARG: ongeldige argument
  • ESP_ERR_ESPNOW_FULL: eweknieëlys is vol
  • ESP_ERR_ESPNOW_NO_MEM: geheue op
  • ESP_ERR_ESPNOW_EXIST: eweknie bestaan

Grense:

  • eweknie: eweknie -inligting met die volgende data:

    • uint8_t

      peer_addr [ESP_NOW_ETH_ALEN]; ESPNOW eweknie -MAC -adres, wat ook die MAC -adres van die stasie of sagteware is

    • uint8_t lmk [ESP_NOW_KEY_LEN]

      ESPNOW eweknie -plaaslike hoofsleutel wat gebruik word om data te enkripteer

    • uint8_t kanaal

      Wi-Fi-kanaal wat eweknie gebruik om ESPNOW-data te stuur/ontvang. As die waarde 0 is, gebruik die huidige kanaal waarop die stasie of sagteware is. Andersins moet dit ingestel word as die kanaal waarop die stasie of sagteware is

    • wifi_interface_t ifidx

      Wi-Fi-koppelvlak wat eweknie gebruik om ESPNOW-data te stuur/ontvang

    • bool encrypt

      ESPNOW -data wat hierdie eweknie stuur/ontvang, is geïnkripteer of nie

    • leegte *priv

      ESPNOW eweknie -privaat data

Beskrywing:

Voeg 'n eweknie -tot -eweknie -lys by

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

Opbrengs:

  • ESP_OK: slaag
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW is nie geïnisialiseer nie
  • ESP_ERR_ESPNOW_ARG: ongeldige argument
  • ESP_ERR_ESPNOW_INTERNAL: interne fout
  • ESP_ERR_ESPNOW_NO_MEM: geheue op
  • ESP_ERR_ESPNOW_NOT_FOUND: eweknie word nie gevind nie
  • ESP_ERR_ESPNOW_IF: die huidige WiFi -koppelvlak stem nie ooreen met die van eweknie nie

Grense:

  • peer_addr: eweknie MAC -adres
  • data: data wat gestuur moet word
  • len: lengte van data

Beskrywing:

Stuur ESPNOW -data. In sommige gevalle gebeur dit:

  • As peer_addr nie NULL is nie, stuur data na die eweknie wie se MAC -adres ooreenstem met peer_addr
  • As peer_addr NULL is, stuur data na al die eweknieë wat by die eweknieëlys gevoeg word
  • Die maksimum lengte data moet minder wees as ESP_NOW_MAX_DATA_LEN
  • Die buffer waarop data -argument aangedui word, hoef nie geldig te wees nadat esp_now_send opgawes is nie

esp_now_register_recv_cb (cb)

Opbrengs:

  • ESP_OK: slaag
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW is nie geïnisialiseer nie
  • ESP_ERR_ESPNOW_INTERNAL: interne fout

Grense:

  • cb: terugbelfunksie vir die ontvangs van ESPNOW -data
    • leegte cb (const uint8_t *mac_addr, const uint8_t *data, int data_len)

      • mac_addr:

        mac -adres van die ontvanger

      • *data:

        data ontvang

      • data_len

        data byte lengte

Beskrywing:

Bel die funksie cb nadat u ESPNOW -data ontvang het

Stap 4: ESP-NOW-FUNKSIES (ESP8266)

FUNKSIES BESKRYWING ESP32 ESP8266

int esp_now_init (nietig)

Opbrengs:

  • 1 = sukses
  • 0 = misluk

Beskrywing

Begin die ESPNOW -funksie

int esp_now_set_self_role (u8 -rol)

Grense:

  • ESP_NOW_ROLE_IDLE: data -oordrag word nie toegelaat nie.
  • ESP_NOW_ROLE_CONTROLLER: Sation -koppelvlak kry prioriteit
  • ESP_NOW_ROLE_SLAVE: SoftAP -koppelvlak het prioriteit
  • ESP_NOW_ROLE_COMBO: prioriteit word gegee aan SoftAP -koppelvlak

Beskrywing

Stel die toestel se rol in

int esp_now_register_send_cb (cb)

Opbrengs:

  • 1 = sukses
  • 0 = misluk

Grense:

  • cb: terugbelfunksienaam nadat ESPNOW -data met hierdie parameters gestuur is:

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

      • mac_addr: mac -adres van ontvanger
      • status:

        • 1 = sukses
        • 0 = misluk

Beskrywing

Bel die funksie OnDataSent nadat u ESPNOW -data gestuur het

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

Opbrengs:

  • 1 = sukses
  • 0 = misluk

Grense:

  • mac_addr

    mac -adres van eweknie

  • rol
  • kanaal

    As die waarde 0 is, gebruik die huidige kanaal waarop die stasie of sagteware is. Andersins moet dit ingestel word as die kanaal waarop die stasie of sagteware is

  • *sleutel

    sleutel vir kodering

  • key_len

    lengte van die sleutel

Beskrywing:

Voeg 'n eweknie -tot -eweknie -lys by

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

Opbrengs:

  • 1 = Sukses
  • 0 = Misluk

Grense:

  • peer_addr: eweknie MAC -adres
  • data: data wat gestuur moet word
  • len: lengte van data

Beskrywing:

Stuur ESPNOW -data. In sommige gevalle gebeur dit:

  • As peer_addr nie NULL is nie, stuur data na die eweknie wie se MAC -adres ooreenstem met peer_addr
  • As peer_addr NULL is, stuur data na al die eweknieë wat by die eweknieëlys gevoeg word
  • Die maksimum lengte data moet minder wees as ESP_NOW_MAX_DATA_LEN
  • Die buffer waarop data -argument aangedui word, hoef nie geldig te wees nadat esp_now_send opgawes is nie

int esp_now_register_recv_cb (cb)

Opbrengs:

  • 1 = Sukses
  • 0 = Misluk

Grense:

  • cb: terugbelfunksie vir die ontvangs van ESPNOW -data
    • leegte cb (const uint8_t *mac_addr, const uint8_t *data, int data_len)

      • mac_addr:

        mac -adres van die ontvanger

      • *data:

        data ontvang

      • data_len

        data byte lengte

Beskrywing:

Bel die funksie cb nadat u ESPNOW -data ontvang het

Stap 5: Eenrigtingkommunikasie (ESP32 as sender)

Die ESP32 stuur data na 'n ESP8266. met hierdie kode. Verander die broadcastAddress na u korresponderende ontvanger se mac -adres. Myne was A4: CF: 12: C7: 9C: 77

// Voeg die nodige biblioteke by

#include // Om toegang te verkry tot die funksies van esp nou #include // Om wifi -vermoëns by te voeg op ESP32 // stoor die MAC -adres in 'n skikking met die naam broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // MAC -adres van my ontvanger/*definieer die datatipes van die veelvoudige veranderlikes wat gestruktureer is en dit alles hernoem as struct_message*/typedef struct struct_message {char a [32]; int b; dryf c; String d; bool e; } struct_boodskap; // Skep 'n struct_message genaamd myData struct_message myData; // funksie word gebel wanneer data gestuur word om die status leegte daarvan OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t status) af te druk {{Serial.print ("\ r / nStatus van die laaste pakkie: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Afleweringsukses": "Aflewering misluk"); } leemte -opstelling () {// Stel die baud -tempo in vir seriële kommunikasie met ESP Serial.begin (115200); // Stel die toestel in as 'n Wi-Fi-stasie WiFi.mode (WIFI_STA); // Begin die wifi // Begin ESP-NOW en gee sy status terug as (esp_now_init ()! = ESP_OK) {Serial.println ("Fout by die inisialisering van ESP -NU "); terugkeer; } // noem die funksie OnDataSent nadat ESPNOW -data gestuur is esp_now_register_send_cb (OnDataSent); // Registreer eweknie esp_now_peer_info_t peerInfo; // initialiseer en ken die eweknie -inligting as 'n wyser toe aan 'n addres memcpy (peerInfo.peer_addr, broadcastAddress, 6); // kopieer die waarde van broadcastAddress met 6 grepe na peerInfo.peer_addr peerInfo.channel = 0; // kanaal waarop die esp praat. 0 beteken ongedefinieerd en data sal op die huidige kanaal gestuur word. 1-14 geldige kanale, wat dieselfde is met die plaaslike toestel peerInfo.encrypt = false; // nie geënkripteer // Voeg die toestel by die lys van gekoppelde toestelle as (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Kon nie eweknie byvoeg nie"); terugkeer; }} void lus () {// Stel waardes om strcpy te stuur (myData.a, "DIT IS 'N CHAR"); // stoor "THIS IS A CHAR" in veranderlike a van my "data" wat vroeër gedefinieer is myData.b = random (1, 20); // stoor 'n ewekansige waarde myData.c = 1.2; // save a float myData.d = "Hallo"; // stoor 'n string myData.e = false; // Stoor 'n bool if (result == ESP_OK) {Serial.println ("Met sukses gestuur"); } anders {Serial.println ("Fout met die stuur van die data"); } vertraging (2000); }

Die ESP8266 ontvang data van die ESP32 met behulp van hierdie kode.

// Voeg die nodige biblioteke by

#include // Om Wifi -vermoëns by ESP32 by te voeg #include // Om toegang te verkry tot die funksies van esp nou /*definieer die datatipes van die veelvoudige veranderlikes wat gestruktureer is en dit alles hernoem as struct_message* /typedef struct struct_message {char a [32]; int b; dryf c; String d; bool e; } struct_boodskap; // Skep 'n veranderlike struct_message genaamd myData struct_message myData; // funksie genoem wanneer die data ontvang word en dit ongeldig druk OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Bytes ontvang:"); 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 (); } leemte -opstelling () {// Stel die baud -tempo in vir seriële kommunikasie met ESP Serial.begin (115200); // Stel die toestel in as 'n Wi-Fi-stasie WiFi-modus (WIFI_STA); // Begin die wifi // Init ESP-NOW en gee sy status terug as (esp_now_init ()! = 0) {Serial.println ("Fout tydens die begin van ESP-NOW"); terugkeer; } esp_now_set_self_role (ESP_NOW_ROLE_SLAVE); // Definieer die rol van hierdie esp esp_now_register_recv_cb (OnDataRecv); // bel die funksie OnDataRecv na ontvangs van ESPNOW data} leemte lus () {}

Stap 6: Eenrigtingkommunikasie (ESP8266 as sender)

Die ESP8266 stuur data na 'n ESP32. met hierdie kode. Verander die broadcastAddress na u korresponderende ontvanger se mac -adres. My esp32 adres is 30: AE: A4: F5: 03: A4. Vir ander funksies vir esp8266, gaan hier

// Voeg die nodige biblioteke by

#include // Om wifi -vermoëns by te voeg op ESP32 #include // Om toegang te verkry tot die funksies van esp nou // stoor die MAC -adres in 'n skikking met die naam broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*definieer die datatipes van die veelvoudige veranderlikes wat gestruktureer is en dit alles hernoem as struct_message*/ typedef struct struct_message {char a [32]; int b; dryf c; String d; bool e; } struct_boodskap; // Skep 'n gestruktureerde veranderlike genaamd myData struct_message myData; // funksie genoem wanneer data gestuur word en druk die status leegte daarvan OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nLaaste pakkie stuurstatus: / t"); Serial.println (sendStatus == 1? "Afleweringsukses": "Aflewering misluk"); } leemte -opstelling () {// Stel die baud -tempo in vir seriële kommunikasie met ESP Serial.begin (115200); // Stel die toestel in as 'n Wi-Fi-stasie WiFi.mode (WIFI_STA); // Begin die wifi // Begin ESP-NOW en gee sy status terug as (esp_now_init ()) {Serial.println ("Fout tydens die inisialisering van ESP-NOW"); terugkeer; } esp_now_register_send_cb (OnDataSent); // bel die funksie OnDataSent nadat ESPNOW -data gestuur is // Voeg die toestel by die gepaarde toestellys as (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)) {Serial.println ("Kon nie eweknie byvoeg nie"); terugkeer; }} void lus () {// Stel waardes om strcpy te stuur (myData.a, "DIT IS 'N CHAR"); // stoor "THIS IS A CHAR" in veranderlike a van my "data" wat vroeër gedefinieer is myData.b = random (1, 20); // stoor 'n ewekansige waarde myData.c = 1.2; // stoor 'n vlot myData.d = "SP8266"; // stoor 'n string myData.e = false; // Stoor 'n bool if (esp_now_init ()! = 0) {Serial.println ("Met sukses gestuur"); } anders {Serial.println ("Fout met die stuur van die data"); } vertraging (2000); }

Die ESP32 ontvang data van 'n ESP8266. met hierdie kode. Vir ander funksies verwys hier

// Voeg die nodige biblioteke by

#include // Om toegang te verkry tot die funksies van esp nou #include // Om wifi -vermoëns by te voeg op ESP32 /*definieer die datatipes van die veelvoudige veranderlikes wat gestruktureer is en dit alles hernoem as struct_message* /typedef struct struct_message {char a [32]; int b; dryf c; String d; bool e; } struct_boodskap; // Skep 'n veranderlike struct_message genaamd myData struct_message myData; // funksie genoem wanneer die data ontvang word en dit leegmaak OnDataRecv (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Bytes ontvang:"); 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 (); } leemte -opstelling () {// Stel die baud -tempo in vir seriële kommunikasie met ESP Serial.begin (115200); // Stel die toestel in as 'n Wi-Fi-stasie WiFi-modus (WIFI_STA); // Begin die wifi // Init ESP-NOW en gee sy status terug as (esp_now_init ()! = 0) {Serial.println ("Fout tydens die begin van ESP-NOW"); terugkeer; } esp_now_register_recv_cb (OnDataRecv); // bel die funksie OnDataRecv na ontvangs van ESPNOW data} leemte lus () {}

Stap 7: TWEE MANIER KOMMUNIKASIE

TWEE MANIER KOMMUNIKASIE
TWEE MANIER KOMMUNIKASIE
TWEE MANIER KOMMUNIKASIE
TWEE MANIER KOMMUNIKASIE

Die ESP32 stuur data by die aanvang na die ESP8266. Die ESP8266 druk die ontvangde boodskap af en reageer dan waarvan die ESP32 op sy seriële monitor druk.

ESP32 KODE

// Voeg die nodige biblioteke by

#include // Om toegang te verkry tot die funksies van esp nou #include // Om wifi -vermoëns by te voeg op ESP32 // stoor die MAC -adres in 'n skikking met die naam broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // MAC -adres van my ontvanger/*definieer die datatipes van die veelvoudige veranderlikes wat gestruktureer is en dit alles hernoem as struct_message*/typedef struct struct_message {char a [32]; int b; dryf c; String d; bool e; } struct_boodskap; // Skep 'n struct_message genaamd myData struct_message myData; // funksie genoem wanneer data gestuur word om sy status leegte OnDataSent te druk (const uint8_t *mac_addr, esp_now_send_status_t status) {Serial.print ("\ r / nLaaste pakkie stuurstatus: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Afleweringsukses": "Aflewering misluk"); if (status! = ESP_NOW_SEND_SUCCESS) {send_data ();}} ongeldig OnDataRecv (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Bytes ontvang:"); 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 (); } leemte -opstelling () {// Stel die baud -tempo in vir seriële kommunikasie met ESP Serial.begin (115200); // Stel die toestel in as 'n Wi-Fi-stasie WiFi.mode (WIFI_STA); // Begin die wifi // Begin ESP-NOW en gee sy status terug as (esp_now_init ()! = ESP_OK) {Serial.println ("Fout by die inisialisering van ESP -NU "); terugkeer; } // noem die funksie OnDataSent nadat ESPNOW -data gestuur is esp_now_register_send_cb (OnDataSent); // Registreer eweknie esp_now_peer_info_t peerInfo; // initialiseer en ken die eweknie -inligting as 'n wyser toe aan 'n addres memcpy (peerInfo.peer_addr, broadcastAddress, 6); // kopieer die waarde van broadcastAddress met 6 grepe na peerInfo.peer_addr peerInfo.channel = 0; // kanaal waarop die esp praat. 0 beteken ongedefinieerd en data sal op die huidige kanaal gestuur word.1-14 geldige kanale, wat dieselfde is met die plaaslike toestel peerInfo.encrypt = false; // nie geënkripteer // Voeg die toestel by die lys van gekoppelde toestelle as (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Kon nie eweknie byvoeg nie"); terugkeer; } esp_now_register_recv_cb (OnDataRecv); // bel die funksie OnDataRecv na ontvangs van ESPNOW -data send_data (); } void lus () {} void send_data () {Serial.println ("Stuur"); // Stel waardes om strcpy te stuur (myData.a, "DIT IS 'N KARAAR"); // stoor "THIS IS A CHAR" in veranderlike a van my "data" wat vroeër gedefinieer is myData.b = random (1, 20); // stoor 'n ewekansige waarde myData.c = 1.2; // stoor 'n vlot myData.d = "ESP32"; // stoor 'n string myData.e = false; // Stoor 'n bool if (result == ESP_OK) {Serial.println ("Met sukses gestuur");} else {Serial.println ("Fout by die stuur van die data"); }}

ESP8266 KODE

// Voeg die nodige biblioteke by

#include // Om wifi -vermoëns by te voeg op ESP32 #include // Om toegang te verkry tot die funksies van esp nou // stoor die MAC -adres in 'n skikking met die naam broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*definieer die datatipes van die veelvoudige veranderlikes wat gestruktureer is en dit alles hernoem as struct_message*/ typedef struct struct_message {char a [32]; int b; dryf c; String d; bool e; } struct_boodskap; // Skep 'n veranderlike struct_message genaamd myData struct_message myData; // funksie genoem wanneer die data ontvang word en dit ongeldig druk OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Bytes ontvang:"); 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 (); stuur_data (); } maak OnDataSent ongeldig (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nLaaste pakkie -stuurstatus: / t"); Serial.println (sendStatus == 1? "Afleweringsukses": "Aflewering misluk"); as (sendStatus! = 1) {send_data (); }} void send_data () {// Stel waardes om strcpy te stuur (myData.a, "DIT IS 'N CHAR"); // stoor "THIS IS A CHAR" in veranderlike a van my "data" wat vroeër gedefinieer is myData.b = random (1, 20); // stoor 'n ewekansige waarde myData.c = 1.2; // stoor 'n vlot myData.d = "ESP8266"; // stoor 'n string myData.e = false; // stoor 'n bool esp_now_send (broadcastAddress, (uint8_t *) en myData, sizeof (myData)); } leemte -opstelling () {// Stel die baud -tempo in vir seriële kommunikasie met ESP Serial.begin (115200); // Stel die toestel in as 'n Wi-Fi-stasie WiFi-modus (WIFI_STA); // Begin die wifi // Init ESP-NOW en gee sy status terug as (esp_now_init ()! = 0) {Serial.println ("Fout tydens die begin van ESP-NOW"); terugkeer; } if (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)) {Serial.println ("Kon nie eweknie byvoeg nie"); terugkeer; } esp_now_set_self_role (ESP_NOW_ROLE_COMBO); esp_now_register_send_cb (OnDataSent); esp_now_set_self_role (ESP_NOW_ROLE_COMBO); // Definieer die rol van hierdie esp esp_now_register_recv_cb (OnDataRecv); // bel die funksie OnDataRecv na ontvangs van ESPNOW data} leemte lus () {}

Stap 8: VERWYSINGS

ESPNOW_32_Voorbeeld

ESPNOW_8266 Voorbeeld

WIFI.h

ESP8266WiFi.h

esp_now.h vir ESP8266

esp_now.h vir ESP32

esp_now amptelike dokument (beter verduideliking van funksies)

ESP-NOW Amptelike Gids

Aanbeveel: