Sadržaj:

Kako napraviti više ESP razgovora putem ESP-NOW-a pomoću ESP32 i ESP8266: 8 koraka
Kako napraviti više ESP razgovora putem ESP-NOW-a pomoću ESP32 i ESP8266: 8 koraka

Video: Kako napraviti više ESP razgovora putem ESP-NOW-a pomoću ESP32 i ESP8266: 8 koraka

Video: Kako napraviti više ESP razgovora putem ESP-NOW-a pomoću ESP32 i ESP8266: 8 koraka
Video: Kako napraviti 2-kanalni ESP8266 ESP-01 Wi-Fi relej | ESP-01 Kućna automatizacija | RemoteXY 2024, Srpanj
Anonim
Kako napraviti više ESP razgovora putem ESP-NOW pomoću ESP32 i ESP8266
Kako napraviti više ESP razgovora putem ESP-NOW pomoću ESP32 i ESP8266

Na mom tekućem projektu potrebno mi je više ESP -ova za međusobno razgovaranje bez usmjerivača. Da bih to učinio, koristit ću ESP-NOW za bežičnu međusobnu komunikaciju bez usmjerivača na ESP-u.

Pribor

Stvari koje sam koristio:

ESP32 DEV modul

NODEMCU 1.0 (modul ESP12E)

Korak 1: Nabavite Board adresu Maca

Nabavite Board adresu za Mac
Nabavite Board adresu za Mac
Nabavite Board adresu za Mac
Nabavite Board adresu za Mac

Putem ESP-a sada, ESP uređaji međusobno razgovaraju šaljući podatke na njihovu jedinstvenu adresu dok su povezani s unutarnjom mrežom pristupnih točaka napravljenom nakon pokretanja esp-a sada.. Stoga odredite MAC adresu svakog uređaja. U prilogu su moje postavke ESP32 i ESP8266 ploče

ZA ESP32

#include "WiFi.h" // Za pristup ESP32 WIFI mogućnostima

void setup () {Serial.begin (115200); Serial.print ("ESP32 MAC adresa ploče:"); Serial.println (WiFi.macAddress ()); // ispisuje svoju MAC adresu} void loop () {}

ZA ESP8266

#include // Knjižnica koja se koristi za pristup ESP8266 WIFI mogućnostima

void setup () {Serial.begin (115200); Serial.println (); Serial.print ("ESP8266 MAC adresa ploče:"); Serial.println (WiFi.macAddress ()); // ispisuje svoju MAC adresu} void loop () {}

Moja MAC ADRESA je:

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

Korak 2: Kako učiniti da ESP-SADA funkcionira

Evo pregleda kako to učiniti da funkcionira:

  1. Uključite esp sada i wifi knjižnice
  2. Spremite mac adresu primatelja ESP -a
  3. Definirajte strukturu podataka poruke poslane/primljene
  4. Prilikom postavljanja postavite WiFi na način rada stanice
  5. Pokreni esp_now
  6. napraviti i registrirati funkciju povratnog poziva koja se poziva nakon slanja i primanja podataka
  7. Za Esp8266 definirajte njegovu ulogu
  8. registrirati vršnjaka ili primatelja esp
  9. Slanje podataka

Korak 3: ESP-SADA FUNKCIJE (ESP32)

esp_now_init (void)

Povratak:

  • ESP_OK: uspjelo
  • ESP_ERR_ESPNOW_INTERNAL: Interna pogreška

Opis:

Pokrenite funkciju ESPNOW

esp_now_register_send_cb (cb)

Povrat:

  • ESP_OK: uspjelo
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW nije inicijaliziran
  • ESP_ERR_ESPNOW_INTERNAL: unutarnja pogreška

Parametri:

  • cb: naziv funkcije povratnog poziva nakon slanja ESPNOW podataka sa ovim parametrima:

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

      • mac_addr: mac adresa primatelja
      • status:

        • 1 = uspjeh
        • 0 = neuspjeh

Opis:

Pozovite funkciju OnDataSent nakon slanja ESPNOW podataka

esp_now_add_peerconst esp_now_peer_info_t *peer)

Povrat:

  • ESP_OK: uspjelo
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW nije inicijaliziran
  • ESP_ERR_ESPNOW_ARG: nevažeći argument
  • ESP_ERR_ESPNOW_FULL: popis kolega je pun
  • ESP_ERR_ESPNOW_NO_MEM: nema memorije
  • ESP_ERR_ESPNOW_EXIST: ravnopravna mreža postoji

Parametri:

  • peer: peer informacije sa sljedećim podacima:

    • uint8_t

      peer_addr [ESP_NOW_ETH_ALEN]; ESPNOW ravnopravna MAC adresa koja je ujedno i MAC adresa postaje ili programa

    • uint8_t lmk [ESP_NOW_KEY_LEN]

      ESPNOW ravnopravni lokalni ključ koji se koristi za šifriranje podataka

    • uint8_t kanal

      Wi-Fi kanal koji kolega koristi za slanje/primanje podataka ESPNOW. Ako je vrijednost 0, upotrijebite trenutni kanal na kojoj je stanica ili softap. U protivnom se mora postaviti kao kanal na kojem je stanica ili softap

    • wifi_interface_t ifidx

      Wi-Fi sučelje koje kolega koristi za slanje/primanje ESPNOW podataka

    • bool šifriranje

      Podaci ESPNOW -a koje ovaj ravnopravni partner šalje/prima su šifrirani ili ne

    • void *priv

      ESPNOW privatni podaci kolega

Opis:

Dodajte ravnopravni popis ravnopravnih

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

Povrat:

  • ESP_OK: uspjelo
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW nije inicijaliziran
  • ESP_ERR_ESPNOW_ARG: nevažeći argument
  • ESP_ERR_ESPNOW_INTERNAL: unutarnja pogreška
  • ESP_ERR_ESPNOW_NO_MEM: nema memorije
  • ESP_ERR_ESPNOW_NOT_FOUND: kolega nije pronađena
  • ESP_ERR_ESPNOW_IF: trenutno WiFi sučelje ne podudara se s analognim

Parametri:

  • peer_addr: ravnopravna MAC adresa
  • data: podaci za slanje
  • len: duljina podataka

Opis:

Pošaljite ESPNOW podatke. U nekim slučajevima to se događa:

  • Ako peer_addr nije NULL, pošaljite podatke vršnjaku čija MAC adresa odgovara peer_addr
  • Ako je peer_addr NULL, pošaljite podatke svim kolegama koji su dodani na popis ravnopravnih
  • Maksimalna duljina podataka mora biti manja od ESP_NOW_MAX_DATA_LEN
  • Me uspremnik na koji ukazuje argument podataka ne mora biti važeći nakon što se esp_now_send vrati

esp_now_register_recv_cb (cb)

Povrat:

  • ESP_OK: uspjelo
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW nije inicijaliziran
  • ESP_ERR_ESPNOW_INTERNAL: unutarnja pogreška

Parametri:

  • cb: funkcija povratnog poziva za primanje ESPNOW podataka
    • void cb (const uint8_t *mac_addr, const uint8_t *podaci, int data_len)

      • mac_addr:

        mac adresa primatelja

      • *podaci:

        primanje podataka

      • data_len

        duljina bajta podataka

Opis:

Nazovite funkciju cb nakon što primite ESPNOW podatke

Korak 4: ESP-SADA FUNKCIJE (ESP8266)

OPIS FUNKCIJA ESP32 ESP8266

int esp_now_init (void)

Povrat:

  • 1 = uspjeh
  • 0 = neuspjeh

Opis

Pokrenite funkciju ESPNOW

int esp_now_set_self_role (uloga u8)

Parametri:

  • ESP_NOW_ROLE_IDLE: prijenos podataka nije dopušten.
  • ESP_NOW_ROLE_CONTROLLER: prioritet se daje sučelju Sation
  • ESP_NOW_ROLE_SLAVE: prioritet ima SoftAP sučelje
  • ESP_NOW_ROLE_COMBO: prioritet ima SoftAPinterface

Opis

Postavlja ulogu uređaja

int esp_now_register_send_cb (cb)

Povrat:

  • 1 = uspjeh
  • 0 = neuspjeh

Parametri:

  • cb: naziv funkcije povratnog poziva nakon slanja ESPNOW podataka sa ovim parametrima:

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

      • mac_addr: mac adresa primatelja
      • status:

        • 1 = uspjeh
        • 0 = neuspjeh

Opis

Pozovite funkciju OnDataSent nakon slanja ESPNOW podataka

int esp_now_add_peer (u8 *mac_addr, u8 uloga, u8 kanal, u8 *ključ, u8 ključ_len)

Povrat:

  • 1 = uspjeh
  • 0 = neuspjeh

Parametri:

  • mac_addr

    mac adresa vršnjaka

  • uloga
  • kanal

    Ako je vrijednost 0, upotrijebite trenutni kanal na kojoj je stanica ili softap. U protivnom se mora postaviti kao kanal na kojem je stanica ili softap

  • *ključ

    ključ za šifriranje

  • ključ_len

    duljina ključa

Opis:

Dodajte ravnopravni popis ravnopravnih

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

Povrat:

  • 1 = Uspjeh
  • 0 = Neuspjeh

Parametri:

  • peer_addr: ravnopravna MAC adresa
  • data: podaci za slanje
  • len: duljina podataka

Opis:

Pošaljite ESPNOW podatke. U nekim slučajevima to se događa:

  • Ako peer_addr nije NULL, pošaljite podatke vršnjaku čija MAC adresa odgovara peer_addr
  • Ako je peer_addr NULL, pošaljite podatke svim kolegama koji su dodani na popis ravnopravnih
  • Maksimalna duljina podataka mora biti manja od ESP_NOW_MAX_DATA_LEN
  • Međuspremnik na koji ukazuje argument podataka ne mora biti važeći nakon što se vrati esp_now_send

int esp_now_register_recv_cb (cb)

Povrat:

  • 1 = Uspjeh
  • 0 = Neuspjeh

Parametri:

  • cb: funkcija povratnog poziva za primanje ESPNOW podataka
    • void cb (const uint8_t *mac_addr, const uint8_t *podaci, int data_len)

      • mac_addr:

        mac adresa primatelja

      • *podaci:

        primanje podataka

      • data_len

        duljina bajta podataka

Opis:

Nazovite funkciju cb nakon što primite ESPNOW podatke

Korak 5: Jednosmjerna komunikacija (ESP32 kao pošiljatelj)

ESP32 šalje podatke na ESP8266. s ovim kodom. Promijenite broadcastAddress na svoju odgovarajuću mac adresu primatelja. Moj je bio A4: CF: 12: C7: 9C: 77

// Dodavanje potrebnih knjižnica

#include // Za pristup esp funkcijama sada #include // Dodavanje Wifi mogućnosti na ESP32 // spremanje MAC adrese u niz pod imenom broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // MAC adresa mog primatelja/*definirati tipove podataka višestrukih varijabli strukturiranih i preimenovanih u struct_message*/typedef struct struct_message {char a [32]; int b; plovak c; Niz d; bool e; } struct_message; // Stvorite struct_message pod nazivom myData struct_message myData; // funkcija koja se poziva kada se podaci šalju za ispis 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? "Isporuka uspješna": "Isporuka nije uspjela"); } void setup () {// Postavite brzinu prijenosa za serijsku komunikaciju s ESP Serial.begin (115200); // Postavi uređaj kao Wi-Fi postaju WiFi.mode (WIFI_STA); // Pokreće wifi // Init ESP-NOW i vraća njegov status if (esp_now_init ()! = ESP_OK) {Serial.println ("Pogreška pri pokretanju ESP-a -SADA"); povratak; } // pozvati funkciju OnDataSent nakon slanja ESPNOW podataka esp_now_register_send_cb (OnDataSent); // Registrirajte peer esp_now_peer_info_t peerInfo; // inicijaliziramo i dodjeljujemo informacije o vršnjacima kao pokazivač na adresnu memcpy (peerInfo.peer_addr, broadcastAddress, 6); // kopiramo vrijednost broadcastAddress sa 6 bajtova u peerInfo.peer_addr peerInfo.channel = 0; // kanal na kojem esp razgovaraju. 0 znači nedefinirano i podaci će se slati na trenutni kanal. 1-14 su valjani kanali što je isto s lokalnim uređajem peerInfo.encrypt = false; // nije šifrirano // Dodajte uređaj na popis uparenih uređaja if (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Nije uspjelo dodavanje ravnopravnih uređaja"); povratak; }} void loop () {// Postavi vrijednosti za slanje strcpy (myData.a, "OVO JE ČAR"); // spremi "OVO JE ČAR" u varijablu a mojih "podataka" definiranih ranije myData.b = random (1, 20); // spremanje slučajne vrijednosti myData.c = 1.2; // spremi float myData.d = "Pozdrav"; // spremanje niza myData.e = false; // sprema bool // Šalje podatke manje ili jednake 250 bajtova putem ESP-NOW-a i vraća njihov status esp_err_t result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (rezultat == ESP_OK) {Serial.println ("Poslano s uspjehom"); } else {Serial.println ("Pogreška pri slanju podataka"); } kašnjenje (2000); }

ESP8266 prima podatke iz ESP32 pomoću ovog koda.

// Dodavanje potrebnih knjižnica

#include // Dodavanje Wi -Fi mogućnosti na ESP32 #include // Za pristup esp sada funkcijama /*definirajte tipove podataka višestrukih varijabli strukturiranih i preimenujte ih u struct_message* /typedef struct struct_message {char a [32]; int b; plovak c; Niz d; bool e; } struct_message; // Stvaranje varijable struct_message pod nazivom myData struct_message myData; // funkcija koja se poziva kada se podaci zaprime i ispiše. OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Primljeni bajtovi:"); Serijski.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 () {// Postavite brzinu prijenosa za serijsku komunikaciju s ESP Serial.begin (115200); // Postavi uređaj kao Wi-Fi postaju WiFi.mode (WIFI_STA); // Pokreće wifi // Init ESP-NOW i vraća njegov status if (esp_now_init ()! = 0) {Serial.println ("Pogreška pri pokretanju ESP-NOW-a"); povratak; } esp_now_set_self_role (ESP_NOW_ROLE_SLAVE); // Definira ulogu ovog esp esp_now_register_recv_cb (OnDataRecv); // poziva funkciju OnDataRecv nakon primanja podataka ESPNOW} void loop () {}

Korak 6: Jednosmjerna komunikacija (ESP8266 kao pošiljatelj)

ESP8266 šalje podatke na ESP32. s ovim kodom. Promijenite broadcastAddress na svoju odgovarajuću mac adresu primatelja. Moja esp32 adresa je 30: AE: A4: F5: 03: A4. Za ostale funkcije za esp8266 idite ovdje

// Dodavanje potrebnih knjižnica

#include // Za dodavanje Wi -Fi mogućnosti na ESP32 #include // Za pristup esp sada funkcijama // spremanje MAC adrese u niz pod imenom broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*definirajte tipove podataka višestrukih varijabli strukturiranih i preimenujte ih u struct_message*/ typedef struct struct_message {char a [32]; int b; plovak c; Niz d; bool e; } struct_message; // Stvaranje strukturirane varijable pod nazivom myData struct_message myData; // funkcija pozvana prilikom slanja podataka i ispis statusa void OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nLast Packet Send Status: / t"); Serial.println (sendStatus == 1? "Isporuka uspješna": "Dostava nije uspjela"); } void setup () {// Postavite brzinu prijenosa za serijsku komunikaciju s ESP Serial.begin (115200); // Postavi uređaj kao Wi-Fi postaju WiFi.mode (WIFI_STA); // Pokreće wifi // Init ESP-NOW i vraća njegov status if (esp_now_init ()) {Serial.println ("Pogreška pri pokretanju ESP-NOW-a"); povratak; } esp_now_register_send_cb (OnDataSent); // pozvati funkciju OnDataSent nakon slanja podataka ESPNOW // Dodajte uređaj na popis uparenih uređaja if (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)) {Serial.println ("Nije uspjelo dodavanje peer"); povratak; }} void loop () {// Postavi vrijednosti za slanje strcpy (myData.a, "OVO JE ČAR"); // spremi "OVO JE ČAR" u varijablu a mojih "podataka" definiranih ranije myData.b = random (1, 20); // spremanje slučajne vrijednosti myData.c = 1.2; // spremi float myData.d = "SP8266"; // spremanje niza myData.e = false; // sprema bool // Šalje podatke manje ili jednake 250 bajtova putem ESP-NOW-a i vraća njihov status int result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (esp_now_init ()! = 0) {Serial.println ("Poslano s uspjehom"); } else {Serial.println ("Pogreška pri slanju podataka"); } kašnjenje (2000); }

ESP32 prima podatke od ESP8266. s ovim kodom. Za ostale funkcije pogledajte ovdje

// Dodavanje potrebnih knjižnica

#include // Za pristup esp sada funkcijama #include // Za dodavanje Wifi mogućnosti na ESP32 /*definirajte tipove podataka višestrukih varijabli strukturiranih i preimenujte ih sve u struct_message* /typedef struct struct_message {char a [32]; int b; plovak c; Niz d; bool e; } struct_message; // Stvaranje varijable struct_message pod nazivom myData struct_message myData; // funkcija koja se poziva kada se podaci zaprime i ispiše. OnDataRecv (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Primljeni bajtovi:"); Serijski.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 () {// Postavite brzinu prijenosa za serijsku komunikaciju s ESP Serial.begin (115200); // Postavi uređaj kao Wi-Fi postaju WiFi.mode (WIFI_STA); // Pokreće wifi // Init ESP-NOW i vraća njegov status if (esp_now_init ()! = 0) {Serial.println ("Pogreška pri pokretanju ESP-NOW-a"); povratak; } esp_now_register_recv_cb (OnDataRecv); // poziva funkciju OnDataRecv nakon primanja podataka ESPNOW} void loop () {}

Korak 7: DVOSTRUKA KOMUNIKACIJA

DVOSTRUKA KOMUNIKACIJA
DVOSTRUKA KOMUNIKACIJA
DVOSTRUKA KOMUNIKACIJA
DVOSTRUKA KOMUNIKACIJA

ESP32 šalje podatke pri pokretanju na ESP8266. ESP8266 ispisuje primljenu poruku, a zatim odgovore na koje ESP32 ispisuje na svom serijskom monitoru.

KOD ESP32

// Dodavanje potrebnih knjižnica

#include // Za pristup esp funkcijama sada #include // Dodavanje Wifi mogućnosti na ESP32 // spremanje MAC adrese u niz pod imenom broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // MAC adresa mog primatelja/*definirati tipove podataka višestrukih varijabli strukturiranih i preimenovanih u struct_message*/typedef struct struct_message {char a [32]; int b; plovak c; Niz d; bool e; } struct_message; // Stvorite struct_message pod nazivom myData struct_message myData; // funkcija koja se poziva kada se podaci šalju za ispis 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? "Isporuka uspješna": "Isporuka nije uspjela"); 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 ("Primljeni bajtovi:"); Serijski.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 () {// Postavite brzinu prijenosa za serijsku komunikaciju s ESP Serial.begin (115200); // Postavi uređaj kao Wi-Fi postaju WiFi.mode (WIFI_STA); // Pokreće wifi // Init ESP-NOW i vraća njegov status if (esp_now_init ()! = ESP_OK) {Serial.println ("Pogreška pri pokretanju ESP-a -SADA"); povratak; } // pozvati funkciju OnDataSent nakon slanja ESPNOW podataka esp_now_register_send_cb (OnDataSent); // Registrirajte peer esp_now_peer_info_t peerInfo; // inicijaliziramo i dodjeljujemo informacije o vršnjacima kao pokazivač na adresnu memcpy (peerInfo.peer_addr, broadcastAddress, 6); // kopiramo vrijednost broadcastAddress sa 6 bajtova u peerInfo.peer_addr peerInfo.channel = 0; // kanal na kojem esp razgovaraju. 0 znači nedefinirano i podaci će se slati na trenutni kanal.1-14 su valjani kanali što je isto s lokalnim uređajem peerInfo.encrypt = false; // nije šifrirano // Dodajte uređaj na popis uparenih uređaja if (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Nije uspjelo dodavanje ravnopravnih uređaja"); povratak; } esp_now_register_recv_cb (OnDataRecv); // pozvati funkciju OnDataRecv nakon primanja ESPNOW podataka send_data (); } void loop () {} void send_data () {Serial.println ("Slanje"); // Postavljanje vrijednosti za slanje strcpy (myData.a, "OVO JE ČAR"); // spremi "OVO JE ČAR" u varijablu a mojih "podataka" definiranih ranije myData.b = random (1, 20); // spremanje slučajne vrijednosti myData.c = 1.2; // spremi float myData.d = "ESP32"; // spremanje niza myData.e = false; // sprema bool // Šalje podatke manje ili jednake 250 bajtova putem ESP-NOW-a i vraća njihov status esp_err_t result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (rezultat == ESP_OK) {Serial.println ("Poslano s uspjehom");} else {Serial.println ("Pogreška pri slanju podataka"); }}

KOD ESP8266

// Dodavanje potrebnih knjižnica

#include // Za dodavanje Wi -Fi mogućnosti na ESP32 #include // Za pristup esp sada funkcijama // spremanje MAC adrese u niz pod imenom broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*definirajte tipove podataka višestrukih varijabli strukturiranih i preimenujte ih u struct_message*/ typedef struct struct_message {char a [32]; int b; plovak c; Niz d; bool e; } struct_message; // Stvaranje varijable struct_message pod nazivom myData struct_message myData; // funkcija koja se poziva kada se podaci zaprime i ispiše. OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Primljeni bajtovi:"); Serijski.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 / nPosljednji status slanja paketa: / t"); Serial.println (sendStatus == 1? "Isporuka uspješna": "Dostava nije uspjela"); if (sendStatus! = 1) {send_data (); }} void send_data () {// Postavi vrijednosti za slanje strcpy (myData.a, "Ovo je znak"); // spremi "OVO JE ČAR" u varijablu a mojih "podataka" definiranih ranije myData.b = random (1, 20); // spremanje slučajne vrijednosti myData.c = 1.2; // spremi float myData.d = "ESP8266"; // spremanje niza myData.e = false; // spremanje bool esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); } void setup () {// Postavite brzinu prijenosa za serijsku komunikaciju s ESP Serial.begin (115200); // Postavi uređaj kao Wi-Fi postaju WiFi.mode (WIFI_STA); // Pokreće wifi // Init ESP-NOW i vraća njegov status if (esp_now_init ()! = 0) {Serial.println ("Pogreška pri pokretanju ESP-NOW-a"); povratak; } if (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)) {Serial.println ("Nije uspjelo dodavanje vršnjaka"); povratak; } esp_now_set_self_role (ESP_NOW_ROLE_COMBO); esp_now_register_send_cb (OnDataSent); esp_now_set_self_role (ESP_NOW_ROLE_COMBO); // Definira ulogu ovog esp esp_now_register_recv_cb (OnDataRecv); // poziva funkciju OnDataRecv nakon primanja podataka ESPNOW} void loop () {}

Korak 8: LITERATURA

ESPNOW_32_Primjer

ESPNOW_8266 Primjer

WIFI.h

ESP8266WiFi.h

esp_now.h za ESP8266

esp_now.h za ESP32

esp_now službeni dokument (bolje objašnjenje funkcija)

ESP-NOW Službeni vodič

Preporučeni: