Sommario:
- Forniture
- Passaggio 1: ottenere l'indirizzo Mac della scheda
- Passaggio 2: come far funzionare ESP-NOW
- Passaggio 3: FUNZIONI ESP-NOW (ESP32)
- Passaggio 4: FUNZIONI ESP-NOW (ESP8266)
- Passaggio 5: comunicazione unidirezionale (ESP32 come mittente)
- Passaggio 6: comunicazione unidirezionale (ESP8266 come mittente)
- Passaggio 7: COMUNICAZIONE BIDIREZIONALE
- Fase 8: RIFERIMENTI
Video: Come effettuare più conversazioni ESP tramite ESP-NOW utilizzando ESP32 ed ESP8266: 8 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
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
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:
- Includi ora esp e librerie wifi
- Salva l'indirizzo mac del destinatario ESP
- Definire la struttura dati del messaggio inviato/ricevuto
- Nella configurazione, imposta il wifi in modalità stazione
- Inizializza esp_now
- effettuare e registrare la funzione di richiamata richiamata dopo l'invio e la ricezione dei dati
- Per Esp8266, definisci il suo ruolo
- registrare il peer o il destinatario esp
- 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
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:
Come effettuare chiamate con Arduino - CoolPhone 1/2: 5 passaggi
Come effettuare chiamate con Arduino - CoolPhone 1/2: Nokia n97 - Probabilmente è stato il mio primo telefono cellulare. L'ho usato per ascoltare musica ea volte scattare foto, ma soprattutto per effettuare chiamate. Ho deciso di creare il mio telefono che sarebbe stato utilizzato solo per effettuare e ricevere chiamate. Sarà un int
La webcam più semplice come videocamera di sicurezza: rilevamento del movimento e immagini inviate tramite e-mail: 4 passaggi
La webcam più semplice come videocamera di sicurezza: rilevamento del movimento e immagini inviate tramite e-mail: non è più necessario scaricare o configurare software per trasferire le immagini rilevate dal movimento dalla webcam alla tua e-mail: è sufficiente utilizzare il browser. Usa un browser Firefox, Chrome, Edge o Opera aggiornato su Windows, Mac o Android per catturare l'immagine
Iniziare con ESP32 CAM - Streaming video utilizzando ESP CAM tramite Wi-Fi - Progetto telecamera di sicurezza ESP32: 8 passaggi
Iniziare con ESP32 CAM | Streaming video utilizzando ESP CAM tramite Wi-Fi | Progetto telecamera di sicurezza ESP32: oggi impareremo come utilizzare questa nuova scheda CAM ESP32 e come possiamo codificarla e usarla come telecamera di sicurezza e ottenere un video in streaming tramite wifi
I modi più semplici per stampare messaggi di testo o conversazioni IMessages da iPhone: 3 passaggi
I modi più semplici per stampare messaggi di testo o conversazioni IMessages da iPhone: Ciao a tutti, in questo Instructable, ti mostrerò i pochi modi più semplici per stampare messaggi di testo dal tuo iPhone. Tanti dei messaggi importanti che riceviamo nella nostra vita ora sono non arrivando per lettera, e nemmeno per e-mail, ma invece tramite tex
Come effettuare chiamate telefoniche gratuite utilizzando Skype: 4 passaggi
Come effettuare chiamate telefoniche gratuite utilizzando Skype.: Non sono sicuro del motivo per cui sto postando questo messaggio, tranne per il fatto che ricordo i bei vecchi tempi del dialpad e altri prima del crollo tecnologico dei primi anni 2000. Un tempo era la cosa più bella del mondo effettuare chiamate interurbane gratuite da qualsiasi co