Sommario:

Come effettuare più conversazioni ESP tramite ESP-NOW utilizzando ESP32 ed ESP8266: 8 passaggi
Come effettuare più conversazioni ESP tramite ESP-NOW utilizzando ESP32 ed ESP8266: 8 passaggi

Video: Come effettuare più conversazioni ESP tramite ESP-NOW utilizzando ESP32 ed ESP8266: 8 passaggi

Video: Come effettuare più conversazioni ESP tramite ESP-NOW utilizzando ESP32 ed ESP8266: 8 passaggi
Video: Corso per programmare ESP32 2024, Luglio
Anonim
Come fare più discorsi ESP tramite ESP-NOW usando ESP32 ed ESP8266
Come fare più discorsi ESP tramite ESP-NOW usando ESP32 ed ESP8266

Nel mio progetto in corso, ho bisogno di più ESP per parlare tra loro senza un router. Per fare ciò, utilizzerò ESP-NOW per far comunicare il wireless tra loro senza un router sull'ESP.

Forniture

Cose che ho usato:

Modulo DEV ESP32

NODEMCU 1.0 (modulo ESP12E)

Passaggio 1: ottenere l'indirizzo Mac della scheda

Ottieni l'indirizzo Mac della lavagna
Ottieni l'indirizzo Mac della lavagna
Ottieni l'indirizzo Mac della lavagna
Ottieni l'indirizzo Mac della lavagna

Attraverso ESP-now, i dispositivi ESP comunicano tra loro inviando dati al loro indirizzo univoco mentre sono connessi a una rete di punti di accesso interna creata dopo aver intilalizzato l'esp now.. Quindi, determina l'indirizzo MAC di ciascun dispositivo. In allegato sono le mie impostazioni della scheda ESP32 e ESP8266

PER ESP32

#include "WiFi.h" //Per accedere alle funzionalità WIFI di ESP32

void setup(){ Serial.begin(115200); Serial.print("Indirizzo MAC scheda ESP32: "); Serial.println(WiFi.macAddress()); //stampa il suo indirizzo MAC } void loop(){}

PER ESP8266

#include //Libreria utilizzata per accedere alle funzionalità WIFI di ESP8266

void setup(){ Serial.begin(115200); Serial.println(); Serial.print("Indirizzo MAC scheda ESP8266: "); Serial.println(WiFi.macAddress()); //stampa il suo indirizzo MAC } void loop(){}

I miei MAC ADDRESS sono:

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

Passaggio 2: come far funzionare ESP-NOW

Ecco una panoramica su come farlo funzionare:

  1. Includi ora esp e librerie wifi
  2. Salva l'indirizzo mac del destinatario ESP
  3. Definire la struttura dati del messaggio inviato/ricevuto
  4. Nella configurazione, imposta il wifi in modalità stazione
  5. Inizializza esp_now
  6. effettuare e registrare la funzione di richiamata richiamata dopo l'invio e la ricezione dei dati
  7. Per Esp8266, definisci il suo ruolo
  8. registrare il peer o il destinatario esp
  9. Invia i dati

Passaggio 3: FUNZIONI ESP-NOW (ESP32)

esp_now_init(void)

Ritorno:

  • ESP_OK: successo
  • ESP_ERR_ESPNOW_INTERNAL: errore interno

Descrizione:

Inizializza la funzione ESPNOW

esp_now_register_send_cb(cb)

Ritorna:

  • ESP_OK: successo
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW non è inizializzato
  • ESP_ERR_ESPNOW_INTERNAL: errore interno

Parametri:

  • cb: nome della funzione di callback dopo aver inviato i dati ESPNOW con questi parametri:

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

      • mac_addr: indirizzo mac del destinatario
      • stato:

        • 1 = successo
        • 0 = fallire

Descrizione:

Chiama la funzione OnDataSent dopo aver inviato i dati ESPNOW

esp_now_add_peerconst esp_now_peer_info_t *peer)

Ritorna:

  • ESP_OK: successo
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW non è inizializzato
  • ESP_ERR_ESPNOW_ARG: argomento non valido
  • ESP_ERR_ESPNOW_FULL: l'elenco dei peer è pieno
  • ESP_ERR_ESPNOW_NO_MEM: memoria esaurita
  • ESP_ERR_ESPNOW_EXIST: il peer è esistito

Parametri:

  • peer:informazioni peer con i seguenti dati:

    • uint8_t

      peer_addr[ESP_NOW_ETH_ALEN]; Indirizzo MAC peer ESPNOW che è anche l'indirizzo MAC della stazione o del softap

    • uint8_t lmk[ESP_NOW_KEY_LEN]

      Chiave master locale peer ESPNOW utilizzata per crittografare i dati

    • uint8_t canale

      Canale Wi-Fi utilizzato dal peer per inviare/ricevere dati ESPNOW. Se il valore è 0, utilizzare il canale corrente su cui si trova la stazione o il softap. In caso contrario, deve essere impostato come canale su cui si trova la stazione o il softap

    • wifi_interface_t ifidx

      Interfaccia Wi-Fi utilizzata dal peer per inviare/ricevere dati ESPNOW

    • cifratura bool

      I dati ESPNOW che questo peer invia/riceve sono crittografati o meno

    • vuoto *priv

      Dati privati peer ESPNOW

Descrizione:

Aggiungi un elenco peer to peer

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

Ritorna:

  • ESP_OK: successo
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW non è inizializzato
  • ESP_ERR_ESPNOW_ARG: argomento non valido
  • ESP_ERR_ESPNOW_INTERNAL: errore interno
  • ESP_ERR_ESPNOW_NO_MEM: memoria esaurita
  • ESP_ERR_ESPNOW_NOT_FOUND: peer non trovato
  • ESP_ERR_ESPNOW_IF: l'attuale interfaccia WiFi non corrisponde a quella del peer

Parametri:

  • peer_addr: indirizzo MAC peer
  • dati: dati da inviare
  • len: lunghezza dei dati

Descrizione:

Invia dati ESPNOW. Per alcuni casi, questo accade:

  • Se peer_addr non è NULL, invia i dati al peer il cui indirizzo MAC corrisponde a peer_addr
  • Se peer_addr è NULL, invia i dati a tutti i peer aggiunti all'elenco dei peer
  • La lunghezza massima dei dati deve essere inferiore a ESP_NOW_MAX_DATA_LEN
  • Il buffer a cui punta l'argomento dati non deve essere valido dopo i ritorni esp_now_send

esp_now_register_recv_cb(cb)

Ritorna:

  • ESP_OK: successo
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW non è inizializzato
  • ESP_ERR_ESPNOW_INTERNAL: errore interno

Parametri:

  • cb: funzione di callback per la ricezione di dati ESPNOW

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

      • mac_addr:

        indirizzo mac del destinatario

      • *dati:

        ricezione dati

      • data_len

        lunghezza in byte di dati

Descrizione:

Chiama la funzione cb dopo aver ricevuto i dati ESPNOW

Passaggio 4: FUNZIONI ESP-NOW (ESP8266)

FUNZIONI DESCRIZIONE ESP32 ESP8266

int esp_now_init(void)

Ritorna:

  • 1 = successo
  • 0=fallire

Descrizione

Inizializza la funzione ESPNOW

int esp_now_set_self_role(ruolo u8)

Parametri:

  • ESP_NOW_ROLE_IDLE: trasmissione dati non consentita.
  • ESP_NOW_ROLE_CONTROLLER: la priorità è data all'interfaccia Sation
  • ESP_NOW_ROLE_SLAVE: viene data priorità all'interfaccia SoftAP
  • ESP_NOW_ROLE_COMBO: la priorità è data a SoftAPinterface

Descrizione

Imposta il ruolo del dispositivo

int esp_now_register_send_cb(cb)

Ritorna:

  • 1 = successo
  • 0 = fallire

Parametri:

  • cb: nome della funzione di callback dopo aver inviato i dati ESPNOW con questi parametri:

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

      • mac_addr: indirizzo mac del destinatario
      • stato:

        • 1 = successo
        • 0 = fallire

Descrizione

Chiama la funzione OnDataSent dopo aver inviato i dati ESPNOW

int esp_now_add_peer(u8 *mac_addr, u8 role, u8 channel, u8 *key, u8 key_len)

Ritorna:

  • 1 = successo
  • 0 = fallire

Parametri:

  • mac_addr

    indirizzo mac del peer

  • ruolo
  • canale

    Se il valore è 0, utilizzare il canale corrente su cui si trova la stazione o il softap. Altrimenti, deve essere impostato come canale su quella stazione o softap

  • *chiave

    chiave per la crittografia

  • chiave_len

    lunghezza della chiave

Descrizione:

Aggiungi un elenco peer to peer

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

Ritorna:

  • 1 = Successo
  • 0 = Fallito

Parametri:

  • peer_addr: indirizzo MAC peer
  • dati: dati da inviare
  • len: lunghezza dei dati

Descrizione:

Invia dati ESPNOW. Per alcuni casi, questo accade:

  • Se peer_addr non è NULL, invia i dati al peer il cui indirizzo MAC corrisponde a peer_addr
  • Se peer_addr è NULL, invia i dati a tutti i peer aggiunti all'elenco dei peer
  • La lunghezza massima dei dati deve essere inferiore a ESP_NOW_MAX_DATA_LEN
  • Il buffer a cui punta l'argomento dati non deve essere valido dopo che esp_now_send restituisce

int esp_now_register_recv_cb(cb)

Ritorna:

  • 1 = Successo
  • 0 = Fallito

Parametri:

  • cb: funzione di callback per la ricezione di dati ESPNOW

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

      • mac_addr:

        indirizzo mac del destinatario

      • *dati:

        ricezione dati

      • data_len

        lunghezza in byte di dati

Descrizione:

Chiama la funzione cb dopo aver ricevuto i dati ESPNOW

Passaggio 5: comunicazione unidirezionale (ESP32 come mittente)

L'ESP32 invia i dati a un ESP8266. con questo codice. Cambia il broadcastAddress con il tuo indirizzo mac del ricevitore corrispondente. Il mio era A4:CF:12:C7:9C:77

//Aggiungi le librerie necessarie

#include //Per accedere alle funzioni esp now #include //Per aggiungere funzionalità Wi-Fi su ESP32 //salvare l'indirizzo MAC in un array denominato broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; //indirizzo MAC del mio ricevitore /*definire i tipi di dati delle variabili multiple strutturate e rinominate tutte come struct_message*/ typedef struct struct_message { char a[32]; int b; galleggiante c; Stringa d; bollo e; } struct_message; // Crea uno struct_message chiamato myData struct_message myData; // funzione chiamata quando i dati vengono inviati per stamparne lo stato 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 ? "Consegna riuscita": "Consegna non riuscita"); } void setup() { //Imposta il baud rate per la comunicazione seriale con ESP Serial.begin(115200); // Imposta il dispositivo come Wi-Fi Station WiFi.mode(WIFI_STA);//Avvia il wifi // Init ESP-NOW e restituisce il suo stato if (esp_now_init() != ESP_OK) { Serial.println("Errore initializing ESP -ORA"); Restituzione; } //chiama la funzione OnDataSent dopo aver inviato i dati ESPNOW esp_now_register_send_cb(OnDataSent); // Registra il peer esp_now_peer_info_t peerInfo; //inizializza e assegna le informazioni del peer come puntatore a un indirizzo memcpy(peerInfo.peer_addr, broadcastAddress, 6); //copia il valore di broadcastAddress con 6 byte in peerInfo.peer_addr peerInfo.channel = 0; //canale in cui parla l'esp. 0 significa non definito e i dati verranno inviati sul canale corrente. 1-14 sono canali validi che è lo stesso con il dispositivo locale peerInfo.encrypt = false; //non crittografato //Aggiungi il dispositivo all'elenco dei dispositivi associati if (esp_now_add_peer(&peerInfo) != ESP_OK){ Serial.println("Failed to add peer"); Restituzione; } } void loop() { // Imposta i valori da inviare strcpy(myData.a, "THIS IS A CHAR"); //salva "QUESTO È UN CARATTERE" nella variabile a dei miei "dati" definiti in precedenza myData.b = random(1, 20); //salva un valore casuale myData.c = 1.2; //salva un float myData.d = "Ciao"; //salva una stringa myData.e = false; //salva un bool //Invia dati inferiori o uguali a 250 byte tramite ESP-NOW e restituisce il suo stato esp_err_t risultato = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); if (risultato == ESP_OK) { Serial.println("Inviato con successo"); } else { Serial.println("Errore nell'invio dei dati"); } ritardo (2000); }

L'ESP8266 riceve i dati dall'ESP32 utilizzando questo codice.

//Aggiungi le librerie necessarie

#include //Per aggiungere funzionalità Wifi su ESP32 #include //Per accedere alle funzioni esp now /*definire i tipi di dati delle variabili multiple strutturate e rinominate tutte come struct_message*/ typedef struct struct_message { char a[32]; int b; galleggiante c; Stringa d; bollo e; } struct_message; // Crea una variabile struct_message chiamata myData struct_message myData; // funzione chiamata quando i dati vengono ricevuti e stampati void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len) { memcpy(&myData, incomingData, sizeof(myData)); Serial.print("Byte ricevuti: "); Serial.println(len); Serial.print("Carattere: "); Serial.println(myData.a); Serial.print("Int: "); Serial.println(myData.b); Serial.print("Float: "); Serial.println(myData.c); Serial.print("Stringa: "); Serial.println(myData.d); Serial.print("Bool: "); Serial.println(myData.e); Serial.println(); } void setup() { //Imposta la velocità di trasmissione per la comunicazione seriale con ESP Serial.begin(115200); // Imposta il dispositivo come Wi-Fi Station WiFi.mode(WIFI_STA); //Avvia il wifi // Init ESP-NOW e restituisce il suo stato if (esp_now_init() != 0) { Serial.println("Errore durante l'inizializzazione di ESP-NOW"); Restituzione; } esp_now_set_self_role(ESP_NOW_ROLE_SLAVE); //Definisce il ruolo di questo esp esp_now_register_recv_cb(OnDataRecv); //chiama la funzione OnDataRecv dopo aver ricevuto i dati ESPNOW } void loop() {}

Passaggio 6: comunicazione unidirezionale (ESP8266 come mittente)

L'ESP8266 invia i dati a un ESP32. con questo codice. Cambia il broadcastAddress con il tuo indirizzo mac del ricevitore corrispondente. Il mio indirizzo esp32 è 30:AE:A4:F5:03:A4. Per altre funzioni per esp8266 vai qui

//Aggiungi le librerie necessarie

#include //Per aggiungere funzionalità Wi-Fi su ESP32 #include //Per accedere alle funzioni esp now //salva l'indirizzo MAC in un array denominato broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*definisce i tipi di dati delle variabili multiple strutturate e rinominate tutte come struct_message*/ typedef struct struct_message { char a[32]; int b; galleggiante c; Stringa d; bollo e; } struct_message; // Crea una variabile strutturata chiamata myData struct_message myData; // funzione chiamata quando i dati vengono inviati e stampa il suo stato void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) { Serial.print("\r\nLast Packet Send Status:\t"); Serial.println(sendStatus == 1 ? "Consegna riuscita": "Consegna non riuscita"); } void setup() { //Imposta il baud rate per la comunicazione seriale con ESP Serial.begin(115200); // Imposta il dispositivo come Wi-Fi Station WiFi.mode(WIFI_STA);//Avvia il wifi // Init ESP-NOW e restituisce il suo stato if (esp_now_init()) { Serial.println("Error initializing ESP-NOW"); Restituzione; } esp_now_register_send_cb(OnDataSent); //chiama la funzione OnDataSent dopo aver inviato i dati ESPNOW //Aggiungi il dispositivo all'elenco dei dispositivi associati if (esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)){ Serial.println("Failed to add peer"); Restituzione; } } void loop() { // Imposta i valori da inviare strcpy(myData.a, "THIS IS A CHAR"); //salva "QUESTO È UN CARATTERE" nella variabile a dei miei "dati" definiti in precedenza myData.b = random(1, 20); //salva un valore casuale myData.c = 1.2; //salva un float myData.d = "SP8266"; //salva una stringa myData.e = false; //salva un bool //Invia dati inferiori o uguali a 250 byte tramite ESP-NOW e restituisce il suo stato int risultato = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); if (esp_now_init() != 0) { Serial.println("Inviato con successo"); } else { Serial.println("Errore nell'invio dei dati"); } ritardo (2000); }

L'ESP32 riceve i dati da un ESP8266. con questo codice. Per altre funzioni fare riferimento qui

//Aggiungi le librerie necessarie

#include //Per accedere alle funzioni esp now #include //Per aggiungere funzionalità Wifi su ESP32 /*definire i tipi di dati delle variabili multiple strutturate e rinominarle tutte come struct_message*/ typedef struct struct_message { char a[32]; int b; galleggiante c; Stringa d; bollo e; } struct_message; // Crea una variabile struct_message chiamata myData struct_message myData; // funzione richiamata quando i dati vengono ricevuti e stampati void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) { memcpy(&myData, incomingData, sizeof(myData)); Serial.print("Byte ricevuti: "); Serial.println(len); Serial.print("Carattere: "); Serial.println(myData.a); Serial.print("Int: "); Serial.println(myData.b); Serial.print("Float: "); Serial.println(myData.c); Serial.print("Stringa: "); Serial.println(myData.d); Serial.print("Bool: "); Serial.println(myData.e); Serial.println(); } void setup() { //Imposta il baud rate per la comunicazione seriale con ESP Serial.begin(115200); // Imposta il dispositivo come Wi-Fi Station WiFi.mode(WIFI_STA); //Avvia il wifi // Init ESP-NOW e restituisce il suo stato if (esp_now_init() != 0) { Serial.println("Errore durante l'inizializzazione di ESP-NOW"); Restituzione; } esp_now_register_recv_cb(OnDataRecv); //chiama la funzione OnDataRecv dopo aver ricevuto i dati ESPNOW } void loop() {}

Passaggio 7: COMUNICAZIONE BIDIREZIONALE

COMUNICAZIONE A DUE VIE
COMUNICAZIONE A DUE VIE
COMUNICAZIONE A DUE VIE
COMUNICAZIONE A DUE VIE

L'ESP32 invia i dati all'avvio all'ESP8266. L'ESP8266 stampa il messaggio ricevuto e quindi le risposte di cui l'ESP32 stampa sul suo monitor seriale.

CODICE ESP32

//Aggiungi le librerie necessarie

#include //Per accedere alle funzioni esp now #include //Per aggiungere funzionalità Wi-Fi su ESP32 //salvare l'indirizzo MAC in un array denominato broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; //indirizzo MAC del mio ricevitore /*definire i tipi di dati delle variabili multiple strutturate e rinominate tutte come struct_message*/ typedef struct struct_message { char a[32]; int b; galleggiante c; Stringa d; bollo e; } struct_message; // Crea uno struct_message chiamato myData struct_message myData; // funzione chiamata quando i dati vengono inviati per stamparne lo stato 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 ? "Consegna riuscita": "Consegna non riuscita"); 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("Byte ricevuti: "); Serial.println(len); Serial.print("Carattere: "); Serial.println(myData.a); Serial.print("Int: "); Serial.println(myData.b); Serial.print("Float: "); Serial.println(myData.c); Serial.print("Stringa: "); Serial.println(myData.d); Serial.print("Bool: "); Serial.println(myData.e); Serial.println(); } void setup() { //Imposta il baud rate per la comunicazione seriale con ESP Serial.begin(115200); // Imposta il dispositivo come Wi-Fi Station WiFi.mode(WIFI_STA);//Avvia il wifi // Init ESP-NOW e restituisce il suo stato if (esp_now_init() != ESP_OK) { Serial.println("Errore initializing ESP -ORA"); Restituzione; } //chiama la funzione OnDataSent dopo aver inviato i dati ESPNOW esp_now_register_send_cb(OnDataSent); // Registra il peer esp_now_peer_info_t peerInfo; //inizializza e assegna le informazioni del peer come puntatore a un indirizzo memcpy(peerInfo.peer_addr, broadcastAddress, 6); //copia il valore di broadcastAddress con 6 byte in peerInfo.peer_addr peerInfo.channel = 0; //canale in cui parla l'esp. 0 significa non definito e i dati verranno inviati sul canale corrente.1-14 sono canali validi che è lo stesso con il dispositivo locale peerInfo.encrypt = false; //non crittografato //Aggiungi il dispositivo all'elenco dei dispositivi associati if (esp_now_add_peer(&peerInfo) != ESP_OK){ Serial.println("Failed to add peer"); Restituzione; } esp_now_register_recv_cb(OnDataRecv); //chiama la funzione OnDataRecv dopo aver ricevuto i dati ESPNOW send_data(); } void loop() {} void send_data(){ Serial.println("Invio"); // Imposta i valori da inviare strcpy(myData.a, "THIS IS A CHAR"); //salva "QUESTO È UN CARATTERE" nella variabile a dei miei "dati" definiti in precedenza myData.b = random(1, 20); //salva un valore casuale myData.c = 1.2; //salva un float myData.d = "ESP32"; //salva una stringa myData.e = false; //salva un bool //Invia dati inferiori o uguali a 250 byte tramite ESP-NOW e restituisce il suo stato esp_err_t risultato = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); if (risultato == ESP_OK) { Serial.println("Inviato con successo");} else { Serial.println("Errore nell'invio dei dati"); } }

CODICE ESP8266

//Aggiungi le librerie necessarie

#include //Per aggiungere funzionalità Wi-Fi su ESP32 #include //Per accedere alle funzioni esp now //salva l'indirizzo MAC in un array denominato broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*definisce i tipi di dati delle variabili multiple strutturate e rinominate tutte come struct_message*/ typedef struct struct_message { char a[32]; int b; galleggiante c; Stringa d; bollo e; } struct_message; // Crea una variabile struct_message chiamata myData struct_message myData; // funzione chiamata quando i dati vengono ricevuti e stampati void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len) { memcpy(&myData, incomingData, sizeof(myData)); Serial.print("Byte ricevuti: "); Serial.println(len); Serial.print("Carattere: "); Serial.println(myData.a); Serial.print("Int: "); Serial.println(myData.b); Serial.print("Float: "); Serial.println(myData.c); Serial.print("Stringa: "); Serial.println(myData.d); Serial.print("Bool: "); Serial.println(myData.e); Serial.println(); invia i dati(); } void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) { Serial.print("\r\nStato invio ultimo pacchetto:\t"); Serial.println(sendStatus == 1 ? "Consegna riuscita": "Consegna non riuscita"); if(sendStatus !=1){ send_data(); } } void send_data(){ // Imposta i valori da inviare strcpy(myData.a, "THIS IS A CHAR"); //salva "QUESTO È UN CARATTERE" nella variabile a dei miei "dati" definiti in precedenza myData.b = random(1, 20); //salva un valore casuale myData.c = 1.2; //salva un float myData.d = "ESP8266"; //salva una stringa myData.e = false; //salva un bool esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData)); } void setup() { //Imposta il baud rate per la comunicazione seriale con ESP Serial.begin(115200); // Imposta il dispositivo come Wi-Fi Station WiFi.mode(WIFI_STA); //Avvia il wifi // Init ESP-NOW e restituisce il suo stato if (esp_now_init() != 0) { Serial.println("Errore durante l'inizializzazione di ESP-NOW"); Restituzione; } if (esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)){ Serial.println("Impossibile aggiungere il peer"); Restituzione; } esp_now_set_self_role(ESP_NOW_ROLE_COMBO); esp_now_register_send_cb(OnDataSent); esp_now_set_self_role(ESP_NOW_ROLE_COMBO); //Definisce il ruolo di questo esp esp_now_register_recv_cb(OnDataRecv); //chiama la funzione OnDataRecv dopo aver ricevuto i dati ESPNOW } void loop() {}

Fase 8: RIFERIMENTI

ESPNOW_32_Esempio

ESPNOW_8266 Esempio

WIFI.h

ESP8266WiFi.h

esp_now.h per ESP8266

esp_now.h per ESP32

esp_now documento ufficiale (migliore spiegazione delle funzioni)

ESP-NOW Guida Ufficiale

Consigliato: