Kazalo:
- Zaloge
- 1. korak: Pridobite naslov Mac za Board
- 2. korak: Kako narediti ESP-NOW delujočim
- Korak: ESP-ZDAJ FUNKCIJE (ESP32)
- 4. korak: FUNKCIJE ESP-ZDAJ (ESP8266)
- 5. korak: enosmerna komunikacija (ESP32 kot pošiljatelj)
- 6. korak: enosmerna komunikacija (ESP8266 kot pošiljatelj)
- 7. korak: DVOSTRANSKA KOMUNIKACIJA
- 8. korak: REFERENCE
Video: Kako narediti več pogovorov ESP prek ESP-NOW z uporabo ESP32 in ESP8266: 8 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:03
Pri svojem tekočem projektu potrebujem več ESP -jev, da se pogovarjamo brez usmerjevalnika. V ta namen bom uporabil ESP-NOW za brezžično komunikacijo brez usmerjevalnika na ESP.
Zaloge
Stvari, ki sem jih uporabil:
Modul ESP32 DEV
NODEMCU 1.0 (modul ESP12E)
1. korak: Pridobite naslov Mac za Board
Prek sistema ESP-now se naprave ESP med seboj pogovarjajo tako, da pošiljajo podatke na svoj edinstven naslov, medtem ko so povezane z notranjim omrežjem dostopnih točk, vzpostavljenim ob vklopu esp.. Tako določite naslov MAC vsake naprave. Priložene so moje nastavitve plošče ESP32 in ESP8266
ZA ESP32
#include "WiFi.h" // Za dostop do zmogljivosti ESP32 WIFI
void setup () {Serial.begin (115200); Serial.print ("Naslov MAC plošče ESP32:"); Serial.println (WiFi.macAddress ()); // natisne svoj naslov MAC} void loop () {}
ZA ESP8266
#include // Knjižnica za dostop do zmogljivosti WIFI ESP8266
void setup () {Serial.begin (115200); Serial.println (); Serial.print ("Naslov MAC za ploščo ESP8266:"); Serial.println (WiFi.macAddress ()); // natisne svoj naslov MAC} void loop () {}
Moji naslovi MAC so:
- ESP32 - 30: AE: A4: F5: 03: A4
- ESP8266: A4: CF: 12: C7: 9C: 77
2. korak: Kako narediti ESP-NOW delujočim
Tukaj je pregled, kako to narediti:
- Vključi esp zdaj in knjižnice wifi
- Shranite mac naslov prejemnika ESP
- Določite podatkovno strukturo poslanega/prejetega sporočila
- V nastavitvah nastavite wifi na način postaje
- Inicializirajte esp_now
- opravite in registrirajte funkcijo povratnega klica, ki se pokliče po pošiljanju in prejemu podatkov
- Za Esp8266 določite njegovo vlogo
- registrirati vrstnika ali prejemnika esp
- Pošlji podatke
Korak: ESP-ZDAJ FUNKCIJE (ESP32)
esp_now_init (nično)
Vrnitev:
- ESP_OK: uspelo
- ESP_ERR_ESPNOW_INTERNAL: Notranja napaka
Opis:
Inicializirajte funkcijo ESPNOW
esp_now_register_send_cb (cb)
Vračila:
- ESP_OK: uspelo
- ESP_ERR_ESPNOW_NOT_INIT: ESPNOW ni inicializiran
- ESP_ERR_ESPNOW_INTERNAL: notranja napaka
Parametri:
-
cb: ime funkcije povratnega klica po pošiljanju podatkov ESPNOW s temi parametri:
-
void cb (const uint8_t *mac_addr, stanje esp_now_send_status_t)
- mac_addr: mac naslov sprejemnika
-
stanje:
- 1 = uspeh
- 0 = napaka
-
Opis:
Po pošiljanju podatkov ESPNOW pokličite funkcijo OnDataSent
esp_now_add_peerconst esp_now_peer_info_t *peer)
Vračila:
- ESP_OK: uspelo
- ESP_ERR_ESPNOW_NOT_INIT: ESPNOW ni inicializiran
- ESP_ERR_ESPNOW_ARG: neveljaven argument
- ESP_ERR_ESPNOW_FULL: seznam vrstnikov je poln
- ESP_ERR_ESPNOW_NO_MEM: zmanjka pomnilnika
- ESP_ERR_ESPNOW_EXIST: enakovreden je obstajal
Parametri:
-
peer: enakovredne informacije z naslednjimi podatki:
-
uint8_t
peer_addr [ESP_NOW_ETH_ALEN]; ESPNOW enakovredni naslov MAC, ki je hkrati tudi naslov MAC postaje ali omejevalnika
-
uint8_t lmk [ESP_NOW_KEY_LEN]
ESPNOW enakovredni lokalni ključ, ki se uporablja za šifriranje podatkov
-
uint8_t kanal
Kanal Wi-Fi, ki ga vrstnik uporablja za pošiljanje/sprejemanje podatkov ESPNOW. Če je vrednost 0, uporabite trenutni kanal, na kateri je postaja ali omejevalnik. V nasprotnem primeru ga morate nastaviti kot kanal, na katerem je postaja ali programska oprema
-
wifi_interface_t ifidx
Wi-Fi vmesnik, ki ga vrstnik uporablja za pošiljanje/sprejemanje podatkov ESPNOW
-
bool šifriranje
Podatki ESPNOW, ki jih ta vrstnik pošilja/prejema, so šifrirani ali ne
-
void *priv
ESPNOW zasebni podatki vrstnikov
-
Opis:
Dodajte enakovreden seznam enakovrednih
esp_now_send (const uint8_t *peer_addr, const uint8_t *podatki, size_t len)
Vračila:
- ESP_OK: uspelo
- ESP_ERR_ESPNOW_NOT_INIT: ESPNOW ni inicializiran
- ESP_ERR_ESPNOW_ARG: neveljaven argument
- ESP_ERR_ESPNOW_INTERNAL: notranja napaka
- ESP_ERR_ESPNOW_NO_MEM: zmanjka pomnilnika
- ESP_ERR_ESPNOW_NOT_FOUND: enakovrednega ni mogoče najti
- ESP_ERR_ESPNOW_IF: trenutni vmesnik WiFi se ne ujema z enakovrednim
Parametri:
- peer_addr: enakovredni naslov MAC
- data: podatki za pošiljanje
- len: dolžina podatkov
Opis:
Pošljite podatke ESPNOW. V nekaterih primerih se to zgodi:
- Če peer_addr ni NULL, pošljite podatke vrstniku, katerega naslov MAC se ujema s peer_addr
- Če je peer_addr NULL, pošljite podatke vsem vrstnikom, ki so dodani na seznam enakovrednih
- Največja dolžina podatkov mora biti manjša od ESP_NOW_MAX_DATA_LEN
- Medpomnilnika, na katerega kaže argument podatkov, ni treba veljati po vrnitvi esp_now_send
esp_now_register_recv_cb (cb)
Vračila:
- ESP_OK: uspelo
- ESP_ERR_ESPNOW_NOT_INIT: ESPNOW ni inicializiran
- ESP_ERR_ESPNOW_INTERNAL: notranja napaka
Parametri:
-
cb: funkcija povratnega klica za sprejem podatkov ESPNOW
-
void cb (const uint8_t *mac_addr, const uint8_t *podatki, int data_len)
-
mac_addr:
mac naslov sprejemnika
-
*podatki:
prejemanje podatkov
-
data_len
dolžina podatkovnega bajta
-
-
Opis:
Po prejemu podatkov ESPNOW pokličite funkcijo cb
4. korak: FUNKCIJE ESP-ZDAJ (ESP8266)
OPIS FUNKCIJ ESP32 ESP8266
int esp_now_init (void)
Vračila:
- 1 = uspeh
- 0 = napaka
Opis
Inicializirajte funkcijo ESPNOW
int esp_now_set_self_role (uloga u8)
Parametri:
- ESP_NOW_ROLE_IDLE: prenos podatkov ni dovoljen.
- ESP_NOW_ROLE_CONTROLLER: prednost ima vmesnik Sation
- ESP_NOW_ROLE_SLAVE: prednost ima vmesnik SoftAP
- ESP_NOW_ROLE_COMBO: prednost ima vmesnik SoftAP
Opis
Nastavi vlogo naprave
int esp_now_register_send_cb (cb)
Vračila:
- 1 = uspeh
- 0 = napaka
Parametri:
-
cb: ime funkcije povratnega klica po pošiljanju podatkov ESPNOW s temi parametri:
-
void cb (const uint8_t *mac_addr, stanje esp_now_send_status_t)
- mac_addr: mac naslov sprejemnika
-
stanje:
- 1 = uspeh
- 0 = napaka
-
Opis
Po pošiljanju podatkov ESPNOW pokličite funkcijo OnDataSent
int esp_now_add_peer (u8 *mac_addr, u8 vloga, u8 kanal, u8 *ključ, u8 key_len)
Vračila:
- 1 = uspeh
- 0 = napaka
Parametri:
-
mac_addr
mac naslov vrstnika
- vlogo
-
kanal
Če je vrednost 0, uporabite trenutni kanal, na kateri je postaja ali omejevalnik. V nasprotnem primeru ga morate nastaviti kot kanal, na katerem je postaja ali programska oprema
-
*ključ
ključ za šifriranje
-
key_len
dolžina ključa
Opis:
Dodajte enakovreden seznam enakovrednih
int esp_now_send (const uint8_t *peer_addr, const uint8_t *podatki, size_t len)
Vračila:
- 1 = Uspeh
- 0 = Napaka
Parametri:
- peer_addr: enakovredni naslov MAC
- data: podatki za pošiljanje
- len: dolžina podatkov
Opis:
Pošljite podatke ESPNOW. V nekaterih primerih se to zgodi:
- Če peer_addr ni NULL, pošljite podatke vrstniku, katerega naslov MAC se ujema s peer_addr
- Če je peer_addr NULL, pošljite podatke vsem vrstnikom, ki so dodani na seznam enakovrednih
- Največja dolžina podatkov mora biti manjša od ESP_NOW_MAX_DATA_LEN
- Medpomnilnika, na katerega kaže argument podatkov, ni treba veljati po vrnitvi esp_now_send
int esp_now_register_recv_cb (cb)
Vračila:
- 1 = Uspeh
- 0 = Napaka
Parametri:
-
cb: funkcija povratnega klica za sprejem podatkov ESPNOW
-
void cb (const uint8_t *mac_addr, const uint8_t *podatki, int data_len)
-
mac_addr:
mac naslov sprejemnika
-
*podatki:
prejemanje podatkov
-
data_len
dolžina podatkovnega bajta
-
-
Opis:
Po prejemu podatkov ESPNOW pokličite funkcijo cb
5. korak: enosmerna komunikacija (ESP32 kot pošiljatelj)
ESP32 pošilja podatke na ESP8266. s to kodo. Spremenite broadcastAddress v ustrezni mac naslov sprejemnika. Moj je bil A4: CF: 12: C7: 9C: 77
// Dodajte potrebne knjižnice
#include // Za dostop do funkcij esp zdaj #include // Dodajanje zmogljivosti Wi -Fi na ESP32 // shranite naslov MAC v matriko z imenom broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // naslov MAC mojega sprejemnika/*definira podatkovne tipe več spremenljivk, strukturiranih in vse preimenovane v struct_message*/typedef struct struct_message {char a [32]; int b; float c; Niz d; bool e; } struct_message; // Ustvarite struct_message z imenom myData struct_message myData; // funkcija, poklicana, ko so podatki poslani za tiskanje statusa 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? "Dostava uspešna": "Dostava ni uspela"); } void setup () {// Nastavite hitrost prenosa za serijsko komunikacijo z ESP Serial.begin (115200); // Nastavi napravo kot Wi-Fi postajo WiFi.mode (WIFI_STA); // Zažene wifi // Init ESP-NOW in vrne njeno stanje, če (esp_now_init ()! = ESP_OK) {Serial.println ("Napaka pri inicializaciji ESP -ZDAJ "); vrnitev; } // pokličete funkcijo OnDataSent po pošiljanju podatkov ESPNOW esp_now_register_send_cb (OnDataSent); // Registracija peer esp_now_peer_info_t peerInfo; // inicializiramo in dodelimo informacije vrstnikov kot kazalec na naslov memcpy (peerInfo.peer_addr, broadcastAddress, 6); // kopiramo vrednost broadcastAddress s 6 bajti v peerInfo.peer_addr peerInfo.channel = 0; // kanal, na katerem govorijo esp. 0 pomeni nedefinirano in podatki bodo poslani na trenutnem kanalu. 1-14 veljavnih kanalov, kar je enako pri lokalni napravi peerInfo.encrypt = false; // ni šifrirano // Dodajte napravo na seznam seznanjenih naprav if (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Dodajanje vrstnika ni uspelo"); vrnitev; }} void loop () {// Nastavite vrednosti za pošiljanje strcpy (myData.a, "THIS IS A CHAR"); // shranim "TO JE ČAR" v spremenljivko a mojih "podatkov", opredeljenih prej myData.b = random (1, 20); // shranimo naključno vrednost myData.c = 1.2; // shranimo float myData.d = "Pozdravljeni"; // shranimo niz myData.e = false; // shranite bool // Pošljite podatke, manjše ali enake 250 bajtov prek ESP-NOW in vrne njihov status esp_err_t result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (result == ESP_OK) {Serial.println ("Poslano z uspehom"); } else {Serial.println ("Napaka pri pošiljanju podatkov"); } zamuda (2000); }
ESP8266 s to kodo sprejema podatke iz ESP32.
// Dodajte potrebne knjižnice
#include // Dodajanje zmožnosti Wifi na ESP32 #include // Za dostop do funkcij esp now /*definirajte podatkovne vrste več spremenljivk, ki so strukturirane, in vse skupaj preimenujete v struct_message* /typedef struct struct_message {char a [32]; int b; float c; Niz d; bool e; } struct_message; // Ustvarite spremenljivko struct_message z imenom myData struct_message myData; // funkcija poklicana, ko so podatki sprejeti in jih natisne void OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Prejeti bajti:"); 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 ("Niz:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// Nastavite hitrost prenosa za serijsko komunikacijo z ESP Serial.begin (115200); // Nastavi napravo kot Wi-Fi postajo WiFi.mode (WIFI_STA); // Zažene wifi // Init ESP-NOW in vrne njegov status if (esp_now_init ()! = 0) {Serial.println ("Napaka pri inicializaciji ESP-NOW"); vrnitev; } esp_now_set_self_role (ESP_NOW_ROLE_SLAVE); // Določa vlogo tega esp enow_register_recv_cb (OnDataRecv); // po prejemu podatkov ESPNOW pokličite funkcijo OnDataRecv} void loop () {}
6. korak: enosmerna komunikacija (ESP8266 kot pošiljatelj)
ESP8266 pošilja podatke na ESP32. s to kodo. Spremenite broadcastAddress v ustrezni mac naslov sprejemnika. Moj naslov esp32 je 30: AE: A4: F5: 03: A4. Za ostale funkcije za esp8266 pojdite sem
// Dodajte potrebne knjižnice
#include // Dodajanje zmožnosti Wi -Fi na ESP32 #include // Za dostop do funkcij esp now // shranite naslov MAC v matriko, imenovano broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*opredelite podatkovne tipe strukturiranih več spremenljivk in vse preimenujete v struct_message*/ typedef struct struct_message {char a [32]; int b; float c; Niz d; bool e; } struct_message; // Ustvarjanje strukturirane spremenljivke z imenom myData struct_message myData; // funkcija, poklicana, ko so podatki poslani, in natisne status void OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nLast Packet Send Status: / t"); Serial.println (sendStatus == 1? "Dostava uspešna": "Dostava ni uspela"); } void setup () {// Nastavite hitrost prenosa za serijsko komunikacijo z ESP Serial.begin (115200); // Nastavi napravo kot Wi-Fi postajo WiFi.mode (WIFI_STA); // Zažene wifi // Init ESP-NOW in vrne njeno stanje, če (esp_now_init ()) {Serial.println ("Napaka pri inicializaciji ESP-NOW"); vrnitev; } esp_now_register_send_cb (OnDataSent); // po pošiljanju podatkov ESPNOW pokličite funkcijo OnDataSent // Dodajte napravo na seznam seznanjenih naprav if (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)) {Serial.println ("Ni uspelo dodati vrstnika"); vrnitev; }} void loop () {// Nastavite vrednosti za pošiljanje strcpy (myData.a, "THIS IS A CHAR"); // shranim "TO JE ČAR" v spremenljivko a mojih "podatkov", opredeljenih prej myData.b = random (1, 20); // shranimo naključno vrednost myData.c = 1.2; // shranimo float myData.d = "SP8266"; // shranimo niz myData.e = false; // shranite bool // Pošljite podatke, manjše ali enake 250 bajtov prek ESP-NOW in vrne njihovo stanje int result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (esp_now_init ()! = 0) {Serial.println ("Poslano z uspehom"); } else {Serial.println ("Napaka pri pošiljanju podatkov"); } zamuda (2000); }
ESP32 sprejema podatke iz ESP8266. s to kodo. Za ostale funkcije tukaj
// Dodajte potrebne knjižnice
#include // Za dostop do funkcij esp zdaj #include // Za dodajanje zmogljivosti Wi -Fi na ESP32 /*določite podatkovne tipe več spremenljivk, strukturiranih, in vse preimenujte v struct_message* /typedef struct struct_message {char a [32]; int b; float c; Niz d; bool e; } struct_message; // Ustvarite spremenljivko struct_message z imenom myData struct_message myData; // funkcija, ki se pokliče, ko so podatki sprejeti in jih natisne void OnDataRecv (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Prejeti bajti:"); 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 ("Niz:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// Nastavite hitrost prenosa za serijsko komunikacijo z ESP Serial.begin (115200); // Nastavi napravo kot Wi-Fi postajo WiFi.mode (WIFI_STA); // Zažene wifi // Init ESP-NOW in vrne njegov status if (esp_now_init ()! = 0) {Serial.println ("Napaka pri inicializaciji ESP-NOW"); vrnitev; } esp_now_register_recv_cb (OnDataRecv); // po prejemu podatkov ESPNOW pokličite funkcijo OnDataRecv} void loop () {}
7. korak: DVOSTRANSKA KOMUNIKACIJA
ESP32 pošlje podatke ob zagonu na ESP8266. ESP8266 natisne prejeto sporočilo in nato odgovore, ki jih ESP32 natisne na svoj serijski monitor.
KODA ESP32
// Dodajte potrebne knjižnice
#include // Za dostop do funkcij esp zdaj #include // Dodajanje zmožnosti Wi -Fi na ESP32 // shranite naslov MAC v matriko z imenom broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // naslov MAC mojega sprejemnika/*definira podatkovne tipe več spremenljivk, strukturiranih in vse preimenovane v struct_message*/typedef struct struct_message {char a [32]; int b; float c; Niz d; bool e; } struct_message; // Ustvarite struct_message z imenom myData struct_message myData; // funkcija, poklicana, ko so podatki poslani za tiskanje statusa 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? "Dostava uspešna": "Dostava ni uspela"); 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 ("Prejeti bajti:"); 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 ("Niz:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// Nastavite hitrost prenosa za serijsko komunikacijo z ESP Serial.begin (115200); // Nastavi napravo kot Wi-Fi postajo WiFi.mode (WIFI_STA); // Zažene wifi // Init ESP-NOW in vrne njeno stanje, če (esp_now_init ()! = ESP_OK) {Serial.println ("Napaka pri inicializaciji ESP -ZDAJ "); vrnitev; } // pokličete funkcijo OnDataSent po pošiljanju podatkov ESPNOW esp_now_register_send_cb (OnDataSent); // Registracija peer esp_now_peer_info_t peerInfo; // inicializiramo in dodelimo informacije vrstnikov kot kazalec na naslov memcpy (peerInfo.peer_addr, broadcastAddress, 6); // kopiramo vrednost broadcastAddress s 6 bajti v peerInfo.peer_addr peerInfo.channel = 0; // kanal, na katerem govorijo esp. 0 pomeni nedefinirano in podatki bodo poslani na trenutnem kanalu.1-14 veljavnih kanalov, kar je enako pri lokalni napravi peerInfo.encrypt = false; // ni šifrirano // Dodajte napravo na seznam seznanjenih naprav if (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Dodajanje vrstnika ni uspelo"); vrnitev; } esp_now_register_recv_cb (OnDataRecv); // po prejemu podatkov ESPNOW pokličemo funkcijo OnDataRecv send_data (); } void loop () {} void send_data () {Serial.println ("Pošiljanje"); // Nastavimo vrednosti za pošiljanje strcpy (myData.a, "THIS IS A CHAR"); // shranim "TO JE ČAR" v spremenljivko a mojih "podatkov", opredeljenih prej myData.b = random (1, 20); // shranimo naključno vrednost myData.c = 1.2; // shranimo float myData.d = "ESP32"; // shranimo niz myData.e = false; // shranite bool // Pošljite podatke, manjše ali enake 250 bajtov prek ESP-NOW in vrne njihov status esp_err_t result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (result == ESP_OK) {Serial.println ("Poslano z uspehom");} else {Serial.println ("Napaka pri pošiljanju podatkov"); }}
KODA ESP8266
// Dodajte potrebne knjižnice
#include // Dodajanje zmožnosti Wi -Fi na ESP32 #include // Za dostop do funkcij esp now // shranite naslov MAC v matriko, imenovano broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*opredelite podatkovne tipe strukturiranih več spremenljivk in vse preimenujete v struct_message*/ typedef struct struct_message {char a [32]; int b; float c; Niz d; bool e; } struct_message; // Ustvarite spremenljivko struct_message z imenom myData struct_message myData; // funkcija poklicana, ko so podatki sprejeti in jih natisne void OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Prejeti bajti:"); 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 ("Niz:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); send_data (); } void OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nZadnji status pošiljanja paketov: / t"); Serial.println (sendStatus == 1? "Dostava uspešna": "Dostava ni uspela"); if (sendStatus! = 1) {send_data (); }} void send_data () {// Nastavite vrednosti za pošiljanje strcpy (myData.a, "TO JE ZNAK"); // shranim "TO JE ČAR" v spremenljivko a mojih "podatkov", opredeljenih prej myData.b = random (1, 20); // shranimo naključno vrednost myData.c = 1.2; // shranimo float myData.d = "ESP8266"; // shranimo niz myData.e = false; // shranimo bool esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); } void setup () {// Nastavite hitrost prenosa za serijsko komunikacijo z ESP Serial.begin (115200); // Nastavi napravo kot Wi-Fi postajo WiFi.mode (WIFI_STA); // Zažene wifi // Init ESP-NOW in vrne njegov status if (esp_now_init ()! = 0) {Serial.println ("Napaka pri inicializaciji ESP-NOW"); vrnitev; } if (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)) {Serial.println ("Dodajanje vrstnika ni uspelo"); vrnitev; } esp_now_set_self_role (ESP_NOW_ROLE_COMBO); esp_now_register_send_cb (OnDataSent); esp_now_set_self_role (ESP_NOW_ROLE_COMBO); // Določa vlogo tega esp enow_register_recv_cb (OnDataRecv); // po prejemu podatkov ESPNOW pokličite funkcijo OnDataRecv} void loop () {}
8. korak: REFERENCE
ESPNOW_32_Primer
ESPNOW_8266 Primer
WIFI.h
ESP8266WiFi.h
esp_now.h za ESP8266
esp_now.h za ESP32
esp_now uradni dokument (boljša razlaga funkcij)
Uradni vodnik ESP-NOW
Priporočena:
Več senzorjev BMP280 v Arduino Uno prek SPI: 6 korakov
Več senzorjev BMP280 v Arduino Uno prek SPI: V tej vadnici bomo povezali tri BMP280 na Arduino Uno prek SPI, vendar lahko povežete do osem BMP280 na Uno z uporabo digitalnih vrat D3 do D10 kot nSS (Slave Select) za vsak senzor. vzorcev atmosferskega tlaka, merjenih z B
Kako začeti z ESP32 CAM - Pretakanje videa z uporabo ESP CAM prek Wi -Fi - Projekt varnostne kamere ESP32: 8 korakov
Kako začeti z ESP32 CAM | Pretakanje videa z uporabo ESP CAM prek Wi -Fi | Projekt varnostne kamere ESP32: Danes se bomo naučili, kako uporabljati to novo ploščo ESP32 CAM in kako jo lahko kodiramo ter uporabimo kot varnostno kamero in dobimo pretočni video prek WiFi
Nadzorujte naprave prek interneta prek brskalnika. (IoT): 6 korakov
Nadzorujte naprave prek interneta prek brskalnika. (IoT): V tem navodilu vam bom pokazal, kako lahko prek spletnega brskalnika nadzirate naprave, kot so LED, releji, motorji itd. Do kontrol lahko varno dostopate prek katere koli naprave. Spletna platforma, ki sem jo uporabil tukaj, je RemoteMe.org obiščite
Kako narediti lasten avtomobilski polnilnik USB za kateri koli IPod ali druge naprave, ki se polnijo prek USB -ja: 10 korakov (s slikami)
Kako narediti lasten avtomobilski polnilnik USB za kateri koli IPod ali druge naprave, ki se polnijo prek USB -ja: Ustvarite avtomobilski polnilnik USB za kateri koli iPod ali drugo napravo, ki se polni prek USB -ja, tako da avtomobilski adapter priključite na izhod 5V in ženski vtič USB. Najpomembnejši del tega projekta je zagotoviti, da je stava na izbrani avtomobilski adapter
Prenos datotek prek vašega LAN -a prek BitTorrenta: 6 korakov
Prenos datotek prek vašega LAN -a prek BitTorrenta: Včasih boste morda morali prenesti datoteke po omrežju na več računalnikov. Čeprav bi ga lahko postavili na bliskovni pogon ali CD/DVD, bi morali v vsak računalnik kopirati datoteke, zato lahko traja nekaj časa, da vse datoteke kopirate (zlasti z