Kazalo:

Kako narediti več pogovorov ESP prek ESP-NOW z uporabo ESP32 in ESP8266: 8 korakov
Kako narediti več pogovorov ESP prek ESP-NOW z uporabo ESP32 in ESP8266: 8 korakov

Video: Kako narediti več pogovorov ESP prek ESP-NOW z uporabo ESP32 in ESP8266: 8 korakov

Video: Kako narediti več pogovorov ESP prek ESP-NOW z uporabo ESP32 in ESP8266: 8 korakov
Video: Управление 32 серводвигателями с PCA9685 и ESP32 - V4 2024, Julij
Anonim
Kako narediti več pogovorov ESP prek ESP-NOW z uporabo ESP32 in ESP8266
Kako narediti več pogovorov ESP prek ESP-NOW z uporabo ESP32 in ESP8266

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

Pridobite naslov Mac za Board
Pridobite naslov Mac za Board
Pridobite naslov Mac za Board
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:

  1. Vključi esp zdaj in knjižnice wifi
  2. Shranite mac naslov prejemnika ESP
  3. Določite podatkovno strukturo poslanega/prejetega sporočila
  4. V nastavitvah nastavite wifi na način postaje
  5. Inicializirajte esp_now
  6. opravite in registrirajte funkcijo povratnega klica, ki se pokliče po pošiljanju in prejemu podatkov
  7. Za Esp8266 določite njegovo vlogo
  8. registrirati vrstnika ali prejemnika esp
  9. 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

DVOSTRANSKA KOMUNIKACIJA
DVOSTRANSKA KOMUNIKACIJA
DVOSTRANSKA KOMUNIKACIJA
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: