Taula de continguts:

Com fer diverses converses ESP mitjançant ESP-NOW mitjançant ESP32 i ESP8266: 8 passos
Com fer diverses converses ESP mitjançant ESP-NOW mitjançant ESP32 i ESP8266: 8 passos

Vídeo: Com fer diverses converses ESP mitjançant ESP-NOW mitjançant ESP32 i ESP8266: 8 passos

Vídeo: Com fer diverses converses ESP mitjançant ESP-NOW mitjançant ESP32 i ESP8266: 8 passos
Vídeo: Шестеро друзей подверглись пыткам, изнасиловали и уби... 2024, Juliol
Anonim
Com fer diverses converses ESP mitjançant ESP-NOW mitjançant ESP32 i ESP8266
Com fer diverses converses ESP mitjançant ESP-NOW mitjançant ESP32 i ESP8266

En el meu projecte en curs, necessito diversos ESP per parlar entre ells sense enrutador. Per fer-ho, utilitzaré l’ESP-NOW per fer que la comunicació sense fils entre si no tingui un encaminador a l’ESP.

Subministraments

Coses que he utilitzat:

Mòdul ESP32 DEV

NODEMCU 1.0 (mòdul ESP12E)

Pas 1: Obteniu l'adreça Mac de la junta

Obteniu l'adreça Mac del tauler
Obteniu l'adreça Mac del tauler
Obteniu l'adreça Mac del tauler
Obteniu l'adreça Mac del tauler

Mitjançant ESP-now, els dispositius ESP parlen entre si enviant dades a la seva adreça única mentre es connecten a una xarxa de punts d’accés intern feta en incorporar ara l’esp.. Per tant, determineu l’adreça MAC de cada dispositiu. Adjunta la configuració de la meva placa ESP32 i ESP8266

PER ESP32

#include "WiFi.h" // Per accedir a les funcions WIFI ESP32

configuració nul·la () {Serial.begin (115200); Serial.print ("Adreça MAC de la placa ESP32:"); Serial.println (WiFi.macAddress ()); // imprimeix la seva adreça MAC} bucle buit () {}

PER ESP8266

#include // Biblioteca utilitzada per accedir a les funcions WIFI ESP8266

configuració nul·la () {Serial.begin (115200); Serial.println (); Serial.print ("Adreça MAC de la placa ESP8266:"); Serial.println (WiFi.macAddress ()); // imprimeix la seva adreça MAC} bucle buit () {}

La meva ADREÇA MAC és:

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

Pas 2: Com fer funcionar ESP-NOW

Aquí teniu una visió general de com fer-ho funcionar:

  1. Inclou esp ara i biblioteques wifi
  2. Deseu l'adreça mac del destinatari ESP
  3. Definiu l'estructura de dades del missatge enviat / rebut
  4. A la configuració, configureu el wifi al mode d’estació
  5. Inicialitzeu esp_now
  6. fer i registrar la funció de trucada després de l'enviament i la recepció de dades
  7. Per a Esp8266, definiu el seu paper
  8. registre del parell o destinatari esp
  9. Enviar dades

Pas 3: FUNCIONS ESP-NOW (ESP32)

esp_now_init (buit)

Retorn:

  • ESP_OK: té èxit
  • ESP_ERR_ESPNOW_INTERNAL: error intern

Descripció:

Inicialitzeu la funció ESPNOW

esp_now_register_send_cb (cb)

Devolucions:

  • ESP_OK: té èxit
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW no està inicialitzat
  • ESP_ERR_ESPNOW_INTERNAL: error intern

Paràmetres:

  • cb: nom de la funció de devolució de trucada després d'enviar dades ESPNOW amb aquests paràmetres:

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

      • mac_addr: adreça mac del receptor
      • estat:

        • 1 = èxit
        • 0 = falla

Descripció:

Truqueu a la funció OnDataSent després d’enviar dades ESPNOW

esp_now_add_peerconst esp_now_peer_info_t * parell)

Devolucions:

  • ESP_OK: té èxit
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW no està inicialitzat
  • ESP_ERR_ESPNOW_ARG: argument no vàlid
  • ESP_ERR_ESPNOW_FULL: la llista d’iguals està plena
  • ESP_ERR_ESPNOW_NO_MEM: sense memòria
  • ESP_ERR_ESPNOW_EXIST: el pare ha existit

Paràmetres:

  • peer: informació entre iguals amb les dades següents:

    • uint8_t

      peer_addr [ESP_NOW_ETH_ALEN]; Adreça MAC paritària ESPNOW que també és l'adreça MAC de l'estació o del softap

    • uint8_t lmk [ESP_NOW_KEY_LEN]

      Clau mestra local paritària ESPNOW que s’utilitza per xifrar dades

    • canal uint8_t

      Canal Wi-Fi que el parell utilitza per enviar / rebre dades ESPNOW. Si el valor és 0, utilitzeu el canal actual en què està activada l'estació o el softap. En cas contrari, s’ha d’establir com el canal en què s’utilitza l’estació o el softap

    • wifi_interface_t ifidx

      Interfície Wi-Fi que el parell utilitza per enviar / rebre dades ESPNOW

    • xifrar bool

      Les dades ESPNOW que envia / rep aquest parell estan encriptades o no

    • buit * priv

      Dades privades d’equips d’ESPNOW

Descripció:

Afegiu un parell a la llista d'iguals

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

Devolucions:

  • ESP_OK: té èxit
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW no està inicialitzat
  • ESP_ERR_ESPNOW_ARG: argument no vàlid
  • ESP_ERR_ESPNOW_INTERNAL: error intern
  • ESP_ERR_ESPNOW_NO_MEM: sense memòria
  • ESP_ERR_ESPNOW_NOT_FOUND: no s'ha trobat el parell
  • ESP_ERR_ESPNOW_IF: la interfície WiFi actual no coincideix amb la del parell

Paràmetres:

  • peer_addr: adreça MAC igual
  • dades: dades per enviar
  • len: longitud de les dades

Descripció:

Envia dades ESPNOW. En alguns casos, això passa:

  • Si peer_addr no és NULL, envieu dades al parell l'adreça MAC del qual coincideixi amb peer_addr
  • Si peer_addr és NULL, envieu les dades a tots els parells que s’afegeixen a la llista de parells
  • La longitud màxima de les dades ha de ser inferior a ESP_NOW_MAX_DATA_LEN
  • El buffer assenyalat per l'argument de dades no ha de ser vàlid després de tornar esp_now_send

esp_now_register_recv_cb (cb)

Devolucions:

  • ESP_OK: té èxit
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW no està inicialitzat
  • ESP_ERR_ESPNOW_INTERNAL: error intern

Paràmetres:

  • cb: funció de devolució de trucada per rebre dades ESPNOW

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

      • mac_addr:

        adreça mac del receptor

      • * dades:

        dades rebudes

      • data_len

        longitud de byte de dades

Descripció:

Truqueu a la funció cb després de rebre dades ESPNOW

Pas 4: FUNCIONS ESP-NOW (ESP8266)

FUNCIONS DESCRIPCIÓ ESP32 ESP8266

int esp_now_init (buit)

Devolucions:

  • 1 = èxit
  • 0 = falla

Descripció

Inicialitzeu la funció ESPNOW

int esp_now_set_self_role (rol u8)

Paràmetres:

  • ESP_NOW_ROLE_IDLE: no es permet la transmissió de dades.
  • ESP_NOW_ROLE_CONTROLLER: es dóna prioritat a la interfície Sation
  • ESP_NOW_ROLE_SLAVE: es dóna prioritat a la interfície SoftAP
  • ESP_NOW_ROLE_COMBO: es dóna prioritat a la interfície SoftAP

Descripció

Estableix la funció del dispositiu

int esp_now_register_send_cb (cb)

Devolucions:

  • 1 = èxit
  • 0 = falla

Paràmetres:

  • cb: nom de la funció de devolució de trucada després d'enviar dades ESPNOW amb aquests paràmetres:

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

      • mac_addr: adreça mac del receptor
      • estat:

        • 1 = èxit
        • 0 = falla

Descripció

Truqueu a la funció OnDataSent després d’enviar dades ESPNOW

int esp_now_add_peer (u8 * mac_addr, rol u8, canal u8, tecla u8 *, tecla u8_len)

Devolucions:

  • 1 = èxit
  • 0 = falla

Paràmetres:

  • mac_addr

    adreça mac del parell

  • paper
  • canal

    Si el valor és 0, utilitzeu el canal actual en què està activada l'estació o el softap. En cas contrari, s’ha d’establir com el canal en què s’utilitza l’estació o el softap

  • * clau

    clau per al xifratge

  • clau_len

    longitud de la clau

Descripció:

Afegiu un parell a la llista d'iguals

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

Devolucions:

  • 1 = Èxit
  • 0 = Error

Paràmetres:

  • peer_addr: adreça MAC igual
  • dades: dades per enviar
  • len: longitud de les dades

Descripció:

Envia dades ESPNOW. En alguns casos, això passa:

  • Si peer_addr no és NULL, envieu dades al parell l'adreça MAC del qual coincideixi amb peer_addr
  • Si peer_addr és NULL, envieu les dades a tots els parells que s’afegeixen a la llista de parells
  • La longitud màxima de les dades ha de ser inferior a ESP_NOW_MAX_DATA_LEN
  • El buffer assenyalat per l'argument de dades no ha de ser vàlid després de tornar esp_now_send

int esp_now_register_recv_cb (cb)

Devolucions:

  • 1 = Èxit
  • 0 = Error

Paràmetres:

  • cb: funció de devolució de trucada per rebre dades ESPNOW

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

      • mac_addr:

        adreça mac del receptor

      • * dades:

        dades rebudes

      • data_len

        longitud de byte de dades

Descripció:

Truqueu a la funció cb després de rebre dades ESPNOW

Pas 5: comunicació unidireccional (ESP32 com a remitent)

L'ESP32 envia dades a un ESP8266. amb aquest codi. Canvieu broadcastAddress a la vostra adreça mac del receptor corresponent. El meu era A4: CF: 12: C7: 9C: 77

// Afegiu les biblioteques necessàries

#include // Per accedir a les funcions esp ara #include // Per afegir funcions Wifi a ESP32 // deseu l'adreça MAC en una matriu anomenada broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // L'adreça MAC del meu receptor / * defineix els tipus de dades de les múltiples variables estructurades i les renomina totes com struct_message * / typedef struct struct_message {char a [32]; int b; flotador c; Cadena d; bool e; } missatge_estructura; // Crea un missatge struct_message anomenat myData struct_message myData; // funció anomenada quan s’envien dades per imprimir el seu estat buit OnDataSent (const uint8_t * mac_addr, estat esp_now_send_status_t) {Serial.print ("\ r / nDarrer estat d’enviament de paquets: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Delivery Success": "Error de lliurament"); } void setup () {// Estableix la velocitat de transmissió per a la comunicació en sèrie amb ESP Serial.begin (115200); // Estableix el dispositiu com a estació Wi-Fi WiFi.mode (WIFI_STA); // Inicia el wifi // Inicia ESP-NOW i retorna el seu estat si (esp_now_init ()! = ESP_OK) {Serial.println ("Error inicialitzant ESP -ARA "); tornar; } // truqueu a la funció OnDataSent després d’enviar dades ESPNOW esp_now_register_send_cb (OnDataSent); // Registre peer esp_now_peer_info_t peerInfo; // inicialitzeu i assigneu la informació del parell com a punter a un memcpy addicional (peerInfo.peer_addr, broadcastAddress, 6); // copieu el valor de broadcastAddress amb 6 bytes a peerInfo.peer_addr peerInfo.channel = 0; // canal on es parla l'esp. 0 significa indefinit i s'enviaran dades al canal actual. 1-14 són canals vàlids que és el mateix amb el dispositiu local peerInfo.encrypt = false; // no xifrat // Afegiu el dispositiu a la llista de dispositius aparellats si (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("No s'ha pogut afegir el parell"); tornar; }} void loop () {// Estableix els valors per enviar strcpy (myData.a, "AIX IS ÉS UN CHAR"); // deseu "AIX IS ÉS UN CHAR" a la variable a de les meves "dades" definides anteriorment myData.b = random (1, 20); // desa un valor aleatori myData.c = 1,2; // save a float myData.d = "Hola"; // desa una cadena myData.e = false; // deseu un bool // Envieu dades de 250 bytes inferiors o iguals mitjançant ESP-NOW i retorna el seu estat esp_err_t result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (result == ESP_OK) {Serial.println ("Enviat amb èxit"); } else {Serial.println ("Error en enviar les dades"); } demora (2000); }

L'ESP8266 rep dades de l'ESP32 mitjançant aquest codi.

// Afegiu les biblioteques necessàries

#include // Per afegir funcions Wifi a ESP32 #include // Per accedir a les funcions esp ara / * definiu els tipus de dades de les múltiples variables estructurades i canvieu-les amb el nom de struct_message * / typedef struct struct_message {char a [32]; int b; flotador c; Cadena d; bool e; } missatge_estructura; // Creeu una variable struct_message anomenada myData struct_message myData; // Funció cridada quan es reben les dades i les imprimeix buides OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Bytes rebuts:"); 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 ("Cadena:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// Estableix la velocitat de transmissió per a la comunicació en sèrie amb ESP Serial.begin (115200); // Estableix el dispositiu com a estació Wi-Fi WiFi.mode (WIFI_STA); // Inicia el wifi // Inicia ESP-NOW i retorna el seu estat if (esp_now_init ()! = 0) {Serial.println ("Error inicialitzant ESP-NOW"); tornar; } esp_now_set_self_role (ESP_NOW_ROLE_SLAVE); // Defineix el paper d'aquest esp esp_now_register_recv_cb (OnDataRecv); // trucar a la funció OnDataRecv després de rebre dades ESPNOW} void loop () {}

Pas 6: comunicació unidireccional (ESP8266 com a remitent)

L'ESP8266 envia dades a un ESP32. amb aquest codi. Canvieu broadcastAddress a la vostra adreça mac del receptor corresponent. La meva adreça esp32 és 30: AE: A4: F5: 03: A4. Per a altres funcions per a esp8266, aneu aquí

// Afegiu les biblioteques necessàries

#include // Per afegir funcions Wifi a ESP32 #include // Per accedir a les funcions esp ara // deseu l'adreça MAC en una matriu anomenada broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; / * defineix els tipus de dades de les múltiples variables estructurades i canvia el nom de totes com struct_message * / typedef struct struct_message {char a [32]; int b; flotador c; Cadena d; bool e; } missatge_estructura; // Creeu una variable estructurada anomenada myData struct_message myData; // funció anomenada quan s'envien dades i s'imprimeix el seu estat buit OnDataSent (uint8_t * mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nDarrer estat d'enviament de paquets: / t"); Serial.println (sendStatus == 1? "Delivery Success": "Error de lliurament"); } void setup () {// Estableix la velocitat de transmissió per a la comunicació en sèrie amb ESP Serial.begin (115200); // Estableix el dispositiu com a estació Wi-Fi WiFi.mode (WIFI_STA); // Inicia el wifi // Inicia ESP-NOW i torna el seu estat si (esp_now_init ()) {Serial.println ("Error inicialitzant ESP-NOW"); tornar; } esp_now_register_send_cb (OnDataSent); // truqueu la funció OnDataSent després d'enviar dades ESPNOW // Afegiu el dispositiu a la llista de dispositius aparellats si (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)) {Serial.println ("No s'ha pogut afegir el parell"); tornar; }} void loop () {// Estableix els valors per enviar strcpy (myData.a, "AIX IS ÉS UN CHAR"); // deseu "AIX IS ÉS UN CHAR" a la variable a de les meves "dades" definides anteriorment myData.b = random (1, 20); // desa un valor aleatori myData.c = 1,2; // desa un float myData.d = "SP8266"; // desa una cadena myData.e = false; // deseu un bool // Envieu dades de 250 bytes inferiors o iguals mitjançant ESP-NOW i retorna el seu estat int result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (esp_now_init ()! = 0) {Serial.println ("Enviat amb èxit"); } else {Serial.println ("Error en enviar les dades"); } demora (2000); }

L'ESP32 rep dades d'un ESP8266. amb aquest codi. Per a altres funcions, referiu-vos aquí

// Afegiu les biblioteques necessàries

#include // Per accedir a les funcions esp ara #include // Per afegir funcions de Wifi a ESP32 / * definiu els tipus de dades de les múltiples variables estructurades i canvieu-les amb el nom de struct_message * / typedef struct struct_message {char a [32]; int b; flotador c; Cadena d; bool e; } missatge_estructura; // Creeu una variable struct_message anomenada myData struct_message myData; // funció anomenada quan es reben les dades i les imprimeix buides OnDataRecv (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Bytes rebuts:"); 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 ("Cadena:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// Estableix la velocitat de transmissió per a la comunicació en sèrie amb ESP Serial.begin (115200); // Estableix el dispositiu com a estació Wi-Fi WiFi.mode (WIFI_STA); // Inicia el wifi // Inicia ESP-NOW i retorna el seu estat if (esp_now_init ()! = 0) {Serial.println ("Error inicialitzant ESP-NOW"); tornar; } esp_now_register_recv_cb (OnDataRecv); // trucar a la funció OnDataRecv després de rebre dades ESPNOW} void loop () {}

Pas 7: COMUNICACIÓ DE DOS CAMINS

COMUNICACIÓ DE DOS CAMINS
COMUNICACIÓ DE DOS CAMINS
COMUNICACIÓ DE DOS CAMINS
COMUNICACIÓ DE DOS CAMINS

L'ESP32 envia dades a l'inici a l'ESP8266. L'ESP8266 imprimeix el missatge rebut i, a continuació, les respostes de les quals l'ESP32 imprimeix al seu monitor sèrie.

CODI ESP32

// Afegiu les biblioteques necessàries

#include // Per accedir a les funcions esp ara #include // Per afegir funcions Wifi a ESP32 // deseu l'adreça MAC en una matriu anomenada broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // L'adreça MAC del meu receptor / * defineix els tipus de dades de les múltiples variables estructurades i les renomina totes com struct_message * / typedef struct struct_message {char a [32]; int b; flotador c; Cadena d; bool e; } missatge_estructura; // Crea un missatge struct_message anomenat myData struct_message myData; // funció anomenada quan s’envien dades per imprimir el seu estat buit OnDataSent (const uint8_t * mac_addr, estat esp_now_send_status_t) {Serial.print ("\ r / nDarrer estat d’enviament de paquets: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Delivery Success": "Error de lliurament"); if (status! = ESP_NOW_SEND_SUCCESS) {send_data ();}} void OnDataRecv (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Bytes rebuts:"); 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 ("Cadena:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// Estableix la velocitat de transmissió per a la comunicació en sèrie amb ESP Serial.begin (115200); // Estableix el dispositiu com a estació Wi-Fi WiFi.mode (WIFI_STA); // Inicia el wifi // Inicia ESP-NOW i retorna el seu estat si (esp_now_init ()! = ESP_OK) {Serial.println ("Error inicialitzant ESP -ARA "); tornar; } // truqueu a la funció OnDataSent després d’enviar dades ESPNOW esp_now_register_send_cb (OnDataSent); // Registre peer esp_now_peer_info_t peerInfo; // inicialitzeu i assigneu la informació del parell com a punter a un memcpy addicional (peerInfo.peer_addr, broadcastAddress, 6); // copieu el valor de broadcastAddress amb 6 bytes a peerInfo.peer_addr peerInfo.channel = 0; // canal on es parla l'esp. 0 significa indefinit i s'enviaran dades al canal actual.1-14 són canals vàlids que és el mateix amb el dispositiu local peerInfo.encrypt = false; // no xifrat // Afegiu el dispositiu a la llista de dispositius aparellats si (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("No s'ha pogut afegir el parell"); tornar; } esp_now_register_recv_cb (OnDataRecv); // truqueu a la funció OnDataRecv després de rebre dades ESPNOW send_data (); } void loop () {} void send_data () {Serial.println ("Sending"); // Estableix els valors per enviar strcpy (myData.a, "AIX IS ÉS UN CHAR"); // deseu "AIX IS ÉS UN CHAR" a la variable a de les meves "dades" definides anteriorment myData.b = random (1, 20); // desa un valor aleatori myData.c = 1,2; // desa un float myData.d = "ESP32"; // desa una cadena myData.e = false; // deseu un bool // Envieu dades de 250 bytes inferiors o iguals mitjançant ESP-NOW i retorna el seu estat esp_err_t result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (result == ESP_OK) {Serial.println ("Enviat amb èxit");} else {Serial.println ("Error en enviar les dades"); }}

CODI ESP8266

// Afegiu les biblioteques necessàries

#include // Per afegir funcions Wifi a ESP32 #include // Per accedir a les funcions esp ara // deseu l'adreça MAC en una matriu anomenada broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; / * defineix els tipus de dades de les múltiples variables estructurades i canvia el nom de totes com struct_message * / typedef struct struct_message {char a [32]; int b; flotador c; Cadena d; bool e; } missatge_estructura; // Creeu una variable struct_message anomenada myData struct_message myData; // Funció cridada quan es reben les dades i les imprimeix buides OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Bytes rebuts:"); 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 ("Cadena:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); enviar_dades (); } void OnDataSent (uint8_t * mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nDarrer estat d'enviament de paquets: / t"); Serial.println (sendStatus == 1? "Delivery Success": "Error de lliurament"); if (sendStatus! = 1) {send_data (); }} void send_data () {// Estableix els valors per enviar strcpy (myData.a, "AIX IS ÉS UN CHAR"); // deseu "AIX IS ÉS UN CHAR" a la variable a de les meves "dades" definides anteriorment myData.b = random (1, 20); // desa un valor aleatori myData.c = 1,2; // desa un float myData.d = "ESP8266"; // desa una cadena myData.e = false; // desa un bool esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); } void setup () {// Estableix la velocitat de transmissió per a la comunicació en sèrie amb ESP Serial.begin (115200); // Estableix el dispositiu com a estació Wi-Fi WiFi.mode (WIFI_STA); // Inicia el wifi // Inicia ESP-NOW i retorna el seu estat if (esp_now_init ()! = 0) {Serial.println ("Error inicialitzant ESP-NOW"); tornar; } if (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)) {Serial.println ("No s'ha pogut afegir el parell"); tornar; } esp_now_set_self_role (ESP_NOW_ROLE_COMBO); esp_now_register_send_cb (OnDataSent); esp_now_set_self_role (ESP_NOW_ROLE_COMBO); // Defineix el paper d'aquest esp esp_now_register_recv_cb (OnDataRecv); // trucar a la funció OnDataRecv després de rebre dades ESPNOW} void loop () {}

Pas 8: REFERÈNCIES

ESPNOW_32_Exemple

ESPNOW_8266 Exemple

WIFI.h

ESP8266WiFi.h

esp_now.h per ESP8266

esp_now.h per ESP32

document oficial esp_now (Millor explicació de les funcions)

Guia oficial ESP-NOW

Recomanat: