Satura rādītājs:

Kā izveidot vairākas ESP sarunas, izmantojot ESP-NOW, izmantojot ESP32 un ESP8266: 8 soļi
Kā izveidot vairākas ESP sarunas, izmantojot ESP-NOW, izmantojot ESP32 un ESP8266: 8 soļi

Video: Kā izveidot vairākas ESP sarunas, izmantojot ESP-NOW, izmantojot ESP32 un ESP8266: 8 soļi

Video: Kā izveidot vairākas ESP sarunas, izmantojot ESP-NOW, izmantojot ESP32 un ESP8266: 8 soļi
Video: Getting Kids Back to School, Sports & Life 2024, Jūlijs
Anonim
Kā izveidot vairākas ESP sarunas, izmantojot ESP-NOW, izmantojot ESP32 un ESP8266
Kā izveidot vairākas ESP sarunas, izmantojot ESP-NOW, izmantojot ESP32 un ESP8266

Manā pašreizējā projektā man ir nepieciešami vairāki ESP, lai sarunātos viens ar otru bez maršrutētāja. Lai to izdarītu, es izmantošu ESP-NOW, lai bezvadu sazinātos savā starpā bez ESP maršrutētāja.

Piegādes

Lietas, ko izmantoju:

ESP32 DEV modulis

NODEMCU 1.0 (ESP12E modulis)

1. darbība: iegūstiet Board Mac adresi

Iegūstiet Board Mac adresi
Iegūstiet Board Mac adresi
Iegūstiet Board Mac adresi
Iegūstiet Board Mac adresi

Izmantojot ESP-tagad, ESP ierīces sarunājas savā starpā, nosūtot datus uz savu unikālo adresi, kamēr tās ir savienotas ar iekšējo piekļuves punktu tīklu, kas izveidots, veicot ESP tūlītēju ievadīšanu.. Tādējādi nosakiet katras ierīces MAC adresi. Pievienots ir mans ESP32 un ESP8266 plates iestatījumi

ESP32

#include "WiFi.h" // Lai piekļūtu ESP32 WIFI iespējām

void setup () {Serial.begin (115200); Serial.print ("ESP32 plates MAC adrese:"); Serial.println (WiFi.macAddress ()); // izdrukā savu MAC adresi} void loop () {}

PAR ESP8266

#include // Bibliotēka, ko izmanto, lai piekļūtu ESP8266 WIFI iespējām

void setup () {Serial.begin (115200); Sērijas.println (); Serial.print ("ESP8266 Board MAC Address:"); Serial.println (WiFi.macAddress ()); // izdrukā savu MAC adresi} void loop () {}

Mana MAC ADRESE ir:

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

2. darbība. Kā panākt, lai ESP-NOW darbotos

Šeit ir pārskats par to, kā panākt, lai tas darbotos:

  1. Iekļaujiet esp tagad un wifi bibliotēkas
  2. Saglabājiet saņēmēja ESP mac adresi
  3. Nosakiet nosūtīto/saņemto ziņojumu datu struktūru
  4. Iestatīšanas laikā iestatiet wifi stacijas režīmā
  5. Inicializējiet esp_now
  6. veikt un reģistrēt atzvanīšanas funkciju, kas tiek izsaukta pēc datu nosūtīšanas un saņemšanas
  7. Esp8266 definējiet tā lomu
  8. reģistrēt vienādrangu vai saņēmēju, piem
  9. Sūtīt datus

3. darbība: ESP-NOW FUNKCIJAS (ESP32)

esp_now_init (anulēts)

Atgriešanās:

  • ESP_OK: izdodas
  • ESP_ERR_ESPNOW_INTERNAL: iekšēja kļūda

Apraksts:

Inicializējiet ESPNOW funkciju

esp_now_register_send_cb (cb)

Atgriež:

  • ESP_OK: izdodas
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW nav inicializēts
  • ESP_ERR_ESPNOW_INTERNAL: iekšēja kļūda

Parametri:

  • cb: atzvanīšanas funkcijas nosaukums pēc ESPNOW datu nosūtīšanas ar šādiem parametriem:

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

      • mac_addr: uztvērēja mac adrese
      • statuss:

        • 1 = panākumi
        • 0 = neizdoties

Apraksts:

Pēc ESPNOW datu nosūtīšanas izsauciet funkciju OnDataSent

esp_now_add_peerconst esp_now_peer_info_t *vienaudži)

Atgriež:

  • ESP_OK: izdodas
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW nav inicializēts
  • ESP_ERR_ESPNOW_ARG: nederīgs arguments
  • ESP_ERR_ESPNOW_FULL: vienaudžu saraksts ir pilns
  • ESP_ERR_ESPNOW_NO_MEM: atmiņā nav vietas
  • ESP_ERR_ESPNOW_EXIST: līdzinieks ir eksistējis

Parametri:

  • vienādranga: vienaudžu informācija ar šādiem datiem:

    • uint8_t

      peer_addr [ESP_NOW_ETH_ALEN]; ESPNOW vienaudžu MAC adrese, kas ir arī stacijas vai softap MAC adrese

    • uint8_t lmk [ESP_NOW_KEY_LEN]

      ESPNOW līdzvērtīga vietējā galvenā atslēga, ko izmanto datu šifrēšanai

    • kanāls uint8_t

      Wi-Fi kanāls, ko vienaudži izmanto ESPNOW datu nosūtīšanai/saņemšanai. Ja vērtība ir 0, izmantojiet pašreizējo kanālu, kurā ir ieslēgta stacija vai dīvāns. Pretējā gadījumā tas ir jāiestata kā kanāls, kurā ir ieslēgta stacija vai dīvāns

    • wifi_interface_t ifidx

      Wi-Fi saskarne, ko vienaudži izmanto ESPNOW datu nosūtīšanai/saņemšanai

    • bool šifrēt

      ESPNOW dati, ko šis vienaudzis sūta/saņem, ir šifrēti vai nav

    • tukšs *priv

      ESPNOW vienādranga privātie dati

Apraksts:

Pievienot līdzvērtīgu lietotāju sarakstam

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

Atgriež:

  • ESP_OK: izdodas
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW nav inicializēts
  • ESP_ERR_ESPNOW_ARG: nederīgs arguments
  • ESP_ERR_ESPNOW_INTERNAL: iekšēja kļūda
  • ESP_ERR_ESPNOW_NO_MEM: atmiņā nav vietas
  • ESP_ERR_ESPNOW_NOT_FOUND: līdzīgais nav atrasts
  • ESP_ERR_ESPNOW_IF: pašreizējais WiFi interfeiss neatbilst vienaudžu interfeisam

Parametri:

  • peer_addr: vienādranga MAC adrese
  • dati: nosūtāmie dati
  • len: datu garums

Apraksts:

Sūtīt ESPNOW datus. Dažos gadījumos tas notiek:

  • Ja peer_addr nav NULL, sūtiet datus vienādrangam, kura MAC adrese atbilst peer_addr
  • Ja vienums peer_addr ir NULL, nosūtiet datus visiem līdzcilvēku sarakstam pievienotajiem vienaudžiem
  • Maksimālajam datu garumam jābūt mazākam par ESP_NOW_MAX_DATA_LEN
  • Buferim, uz kuru norāda datu arguments, nav jābūt derīgam pēc esp_now_send atgriešanās

esp_now_register_recv_cb (cb)

Atgriež:

  • ESP_OK: izdodas
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW nav inicializēts
  • ESP_ERR_ESPNOW_INTERNAL: iekšēja kļūda

Parametri:

  • cb: atzvanīšanas funkcija ESPNOW datu saņemšanai

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

      • mac_addr:

        uztvērēja mac adrese

      • *dati:

        saņem datus

      • data_len

        datu baitu garums

Apraksts:

Pēc ESPNOW datu saņemšanas izsauciet funkciju cb

4. darbība. ESP-NOW FUNKCIJAS (ESP8266)

FUNKCIJU APRAKSTS ESP32 ESP8266

int esp_now_init (anulēts)

Atgriež:

  • 1 = panākumi
  • 0 = neizdoties

Apraksts

Inicializējiet ESPNOW funkciju

int esp_now_set_self_role (u8 loma)

Parametri:

  • ESP_NOW_ROLE_IDLE: datu pārraide nav atļauta.
  • ESP_NOW_ROLE_CONTROLLER: prioritāte tiek piešķirta Sation interfeisam
  • ESP_NOW_ROLE_SLAVE: prioritāte tiek dota SoftAP interfeisam
  • ESP_NOW_ROLE_COMBO: prioritāte tiek piešķirta SoftAPinterface

Apraksts

Iestata ierīces lomu

int esp_now_register_send_cb (cb)

Atgriež:

  • 1 = panākumi
  • 0 = neizdoties

Parametri:

  • cb: atzvanīšanas funkcijas nosaukums pēc ESPNOW datu nosūtīšanas ar šādiem parametriem:

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

      • mac_addr: uztvērēja mac adrese
      • statuss:

        • 1 = panākumi
        • 0 = neizdoties

Apraksts

Pēc ESPNOW datu nosūtīšanas izsauciet funkciju OnDataSent

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

Atgriež:

  • 1 = panākumi
  • 0 = neizdoties

Parametri:

  • mac_addr

    vienaudžu mac adrese

  • lomu
  • kanāls

    Ja vērtība ir 0, izmantojiet pašreizējo kanālu, kurā ir ieslēgta stacija vai dīvāns. Pretējā gadījumā tas ir jāiestata kā kanāls, kurā ir ieslēgta stacija vai dīvāns

  • *atslēga

    atslēga šifrēšanai

  • key_len

    atslēgas garums

Apraksts:

Pievienot līdzvērtīgu lietotāju sarakstam

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

Atgriež:

  • 1 = panākumi
  • 0 = Neizdevās

Parametri:

  • peer_addr: vienādranga MAC adrese
  • dati: nosūtāmie dati
  • len: datu garums

Apraksts:

Sūtīt ESPNOW datus. Dažos gadījumos tas notiek:

  • Ja peer_addr nav NULL, sūtiet datus vienādrangam, kura MAC adrese atbilst peer_addr
  • Ja vienums peer_addr ir NULL, nosūtiet datus visiem līdzcilvēku sarakstam pievienotajiem vienaudžiem
  • Maksimālajam datu garumam jābūt mazākam par ESP_NOW_MAX_DATA_LEN
  • Buferim, uz kuru norāda datu arguments, nav jābūt derīgam pēc esp_now_send atgriešanās

int esp_now_register_recv_cb (cb)

Atgriež:

  • 1 = panākumi
  • 0 = Neizdevās

Parametri:

  • cb: atzvanīšanas funkcija ESPNOW datu saņemšanai

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

      • mac_addr:

        uztvērēja mac adrese

      • *dati:

        saņem datus

      • data_len

        datu baitu garums

Apraksts:

Pēc ESPNOW datu saņemšanas izsauciet funkciju cb

5. darbība: vienvirziena komunikācija (ESP32 kā sūtītājs)

ESP32 nosūta datus uz ESP8266. ar šo kodu. Mainiet broadcastAdress uz savu atbilstošo uztvērēja mac adresi. Manējais bija A4: CF: 12: C7: 9C: 77

// Pievienojiet nepieciešamās bibliotēkas

#include // Lai piekļūtu esp tūlīt funkcijām #include // Lai pievienotu Wifi iespējas ESP32 // saglabājiet MAC adresi masīvā ar nosaukumu broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // mana uztvērēja MAC adrese/*definē vairāku mainīgo datu tipus, kas ir strukturēti un pārdēvēti par strukturālo_ziņojumu*/typedef strukturas_ziņojums {char a [32]; int b; pludiņš c; Virkne d; bool e; } structure_message; // Izveidojiet strukturālo_ziņu ar nosaukumu myData struk_message myData; // funkcija, kas tiek izsaukta, kad dati tiek nosūtīti, lai izdrukātu to statusu void OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t status) {Serial.print ("\ r / nPēdējās pakešu sūtīšanas statuss: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Piegādes panākumi": "Piegādes kļūme"); } void setup () {// Iestatiet pārraides ātrumu sērijas sakariem ar ESP Serial.begin (115200); // Iestatīt ierīci kā Wi-Fi staciju WiFi.mode (WIFI_STA); // Startē wifi // Init ESP-NOW un atgriež savu statusu, ja (esp_now_init ()! = ESP_OK) {Serial.println ("Kļūda, inicializējot ESP -TAGAD "); atgriešanās; } // pēc ESPNOW datu nosūtīšanas izsaukt funkciju OnDataSent esp_now_register_send_cb (OnDataSent); // Reģistrēties vienādrangam esp_now_peer_info_t peerInfo; // inicializēt un piešķirt vienaudžu informāciju kā rādītāju adresēm memcpy (peerInfo.peer_addr, broadcastAddress, 6); // kopējiet broadcastAddress vērtību ar 6 baitiem uz peerInfo.peer_addr peerInfo.channel = 0; // kanāls, kurā esp runā. 0 nozīmē nenoteiktu, un dati tiks nosūtīti uz pašreizējo kanālu. 1-14 ir derīgi kanāli, kas ir vienādi ar vietējo ierīci peerInfo.encrypt = false; // nav šifrēts // Pievienojiet ierīci pārī savienoto ierīču sarakstam, ja (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Neizdevās pievienot vienādrangu"); atgriešanās; }} void loop () {// Iestatiet vērtības nosūtīt strcpy (myData.a, "THIS IS A CHAR"); // saglabāt "THIS IS CHAR" mainīgajam a maniem "datiem", kas iepriekš definēti myData.b = random (1, 20); // saglabāt nejaušu vērtību myData.c = 1.2; // saglabāt pludiņu myData.d = "Labdien"; // saglabāt virkni myData.e = false; // saglabāt boolu // Nosūtīt datus, kas ir mazāki vai vienādi ar 250 baitiem, izmantojot ESP-NOW, un atgriež tā statusu esp_err_t result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); ja (rezultāts == ESP_OK) {Serial.println ("Nosūtīts ar panākumiem"); } else {Serial.println ("Kļūda nosūtot datus"); } kavēšanās (2000); }

ESP8266 saņem datus no ESP32, izmantojot šo kodu.

// Pievienojiet nepieciešamās bibliotēkas

#include // Lai pievienotu Wifi iespējas ESP32 #include // Lai piekļūtu esp tagad funkcijām /*, definējiet vairāku mainīgo datu tipus, kas strukturēti un pārdēvēti par visiem strukturētajiem ziņojumiem* /typedef struktur_ziņojums {char a [32]; int b; pludiņš c; Virkne d; bool e; } structure_message; // Izveidot mainīgu strukturālo_ziņojumu, ko sauc par myData // funkcija tiek izsaukta, kad dati tiek saņemti, un izdrukā tos par spēkā neesošiem OnDataRecv (uint8_t * mac, uint8_t * ienākošie dati, uint8_t len) {memcpy (& myData, ienākošie dati, sizeof (myData)); Serial.print ("Saņemti baiti:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Pludiņš:"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Sērijas.println (); } void setup () {// Iestatiet pārraides ātrumu sērijas sakariem ar ESP Serial.begin (115200); // Iestatīt ierīci kā Wi-Fi staciju WiFi.mode (WIFI_STA); // Startē wifi // Init ESP-NOW un atgriež savu statusu, ja (esp_now_init ()! = 0) {Serial.println ("Kļūda, inicializējot ESP-NOW"); atgriešanās; } esp_now_set_self_role (ESP_NOW_ROLE_SLAVE); // Nosaka šī esp lomu esp_now_register_recv_cb (OnDataRecv); // pēc ESPNOW datu saņemšanas izsauciet funkciju OnDataRecv} void loop () {}

6. darbība: vienvirziena komunikācija (ESP8266 kā sūtītājs)

ESP8266 nosūta datus uz ESP32. ar šo kodu. Mainiet broadcastAdress uz savu atbilstošo uztvērēja mac adresi. Mana esp32 adrese ir 30: AE: A4: F5: 03: A4. Par citām esp8266 funkcijām dodieties šeit

// Pievienojiet nepieciešamās bibliotēkas

#include // Lai pievienotu Wifi iespējas ESP32 #include // Lai piekļūtu esp tagad funkcijām // saglabājiet MAC adresi masīvā ar nosaukumu broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*definēt daudzu mainīgo datu tipus, kas strukturēti un pārdēvēti par strukturālo_ziņojumu*/ typedef struktuuri_ziņojumu {char a [32]; int b; pludiņš c; Virkne d; bool e; } structure_message; // Izveidot strukturētu mainīgo ar nosaukumu myData structure_message myData; // funkcija tiek izsaukta, kad dati tiek nosūtīti, un izdrukā to statusu void OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nPēdējās pakešu sūtīšanas statuss: / t"); Serial.println (sendStatus == 1? "Piegādes panākumi": "Piegādes kļūme"); } void setup () {// Iestatiet pārraides ātrumu sērijas sakariem ar ESP Serial.begin (115200); // Iestatīt ierīci kā Wi-Fi staciju WiFi.mode (WIFI_STA); // Startē wifi // Init ESP-NOW un atgriež savu statusu, ja (esp_now_init ()) {Serial.println ("Kļūda, inicializējot ESP-NOW"); atgriešanās; } esp_now_register_send_cb (OnDataSent); // pēc ESPNOW datu nosūtīšanas izsauciet funkciju OnDataSent // Pievienojiet ierīci pārī savienoto ierīču sarakstam, ja (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)) {Serial.println ("Neizdevās pievienot līdzinieku"); atgriešanās; }} void loop () {// Iestatiet vērtības nosūtīt strcpy (myData.a, "THIS IS A CHAR"); // saglabāt "THIS IS CHAR" mainīgajam a maniem "datiem", kas iepriekš definēti myData.b = random (1, 20); // saglabāt nejaušu vērtību myData.c = 1.2; // saglabāt pludiņu myData.d = "SP8266"; // saglabāt virkni myData.e = false; // saglabāt boolu // Nosūtīt datus, kas ir mazāki vai vienādi ar 250 baitiem, izmantojot ESP-NOW, un atgriež to statusu int result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); ja (esp_now_init ()! = 0) {Serial.println ("Nosūtīts ar panākumiem"); } else {Serial.println ("Kļūda nosūtot datus"); } kavēšanās (2000); }

ESP32 saņem datus no ESP8266. ar šo kodu. Par citām funkcijām skatiet šeit

// Pievienojiet nepieciešamās bibliotēkas

#include // Lai piekļūtu esp tagad funkcijām #include // Lai pievienotu Wifi iespējas ESP32 /*, definējiet vairāku mainīgo datu tipus, kas ir strukturēti un pārdēvēti par visiem strukturētajiem ziņojumiem* /typedef strukturālie_ziņojumi {char a [32]; int b; pludiņš c; Virkne d; bool e; } structure_message; // Izveidot mainīgo struktu_ziņojumu, ko sauc par myData struktu_ziņa myData; // funkcija tiek izsaukta, kad dati tiek saņemti, un izdrukā tos par spēkā neesošiem OnDataRecv (const uint8_t * mac, const uint8_t * ieejošie dati, int len) {memcpy (& myData, inputingData, sizeof (myData)); Serial.print ("Saņemti baiti:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Pludiņš:"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Sērijas.println (); } void setup () {// Iestatiet pārraides ātrumu sērijas sakariem ar ESP Serial.begin (115200); // Iestatīt ierīci kā Wi-Fi staciju WiFi.mode (WIFI_STA); // Startē wifi // Init ESP-NOW un atgriež savu statusu, ja (esp_now_init ()! = 0) {Serial.println ("Kļūda, inicializējot ESP-NOW"); atgriešanās; } esp_now_register_recv_cb (OnDataRecv); // pēc ESPNOW datu saņemšanas izsauciet funkciju OnDataRecv} void loop () {}

7. solis: Divu veidu saziņa

DIVU VEIDU KOMUNIKĀCIJA
DIVU VEIDU KOMUNIKĀCIJA
DIVU VEIDU KOMUNIKĀCIJA
DIVU VEIDU KOMUNIKĀCIJA

ESP32 nosūta datus par palaišanu uz ESP8266. ESP8266 izdrukā saņemto ziņojumu un pēc tam atbildes, uz kuru ESP32 izdrukā sērijas monitorā.

ESP32 KODS

// Pievienojiet nepieciešamās bibliotēkas

#include // Lai piekļūtu esp tūlīt funkcijām #include // Lai pievienotu Wifi iespējas ESP32 // saglabājiet MAC adresi masīvā ar nosaukumu broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // mana uztvērēja MAC adrese/*definē vairāku mainīgo datu tipus, kas ir strukturēti un pārdēvēti par strukturālo_ziņojumu*/typedef strukturas_ziņojums {char a [32]; int b; pludiņš c; Virkne d; bool e; } structure_message; // Izveidojiet strukturālo_ziņu ar nosaukumu myData struk_message myData; // funkcija, kas tiek izsaukta, kad dati tiek nosūtīti, lai izdrukātu to statusu void OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t status) {Serial.print ("\ r / nPēdējās pakešu sūtīšanas statuss: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Piegādes panākumi": "Piegādes kļūme"); if (statuss! = ESP_NOW_SEND_SUCCESS) {send_data ();}} void OnDataRecv (const uint8_t * mac, const uint8_t * inputData, int len) {memcpy (& myData, inputingData, sizeof (myData)); Serial.print ("Saņemti baiti:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Pludiņš:"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Sērijas.println (); } void setup () {// Iestatiet pārraides ātrumu sērijas sakariem ar ESP Serial.begin (115200); // Iestatīt ierīci kā Wi-Fi staciju WiFi.mode (WIFI_STA); // Startē wifi // Init ESP-NOW un atgriež savu statusu, ja (esp_now_init ()! = ESP_OK) {Serial.println ("Kļūda, inicializējot ESP -TAGAD "); atgriešanās; } // izsaukt funkciju OnDataSent pēc ESPNOW datu nosūtīšanas esp_now_register_send_cb (OnDataSent); // Reģistrēt vienādranga esp_now_peer_info_t peerInfo; // inicializēt un piešķirt vienaudžu informāciju kā rādītāju adresēm memcpy (peerInfo.peer_addr, broadcastAddress, 6); // kopējiet broadcastAddress vērtību ar 6 baitiem uz peerInfo.peer_addr peerInfo.channel = 0; // kanāls, kurā esp runā. 0 nozīmē nenoteiktu, un dati tiks nosūtīti uz pašreizējo kanālu.1-14 ir derīgi kanāli, kas ir vienādi ar vietējo ierīci peerInfo.encrypt = false; // nav šifrēts // Pievienojiet ierīci pārī savienoto ierīču sarakstam, ja (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Neizdevās pievienot vienādrangu"); atgriešanās; } esp_now_register_recv_cb (OnDataRecv); // izsaukt funkciju OnDataRecv pēc ESPNOW datu saņemšanas send_data (); } void loop () {} void send_data () {Serial.println ("Sūta"); // Iestatiet vērtības nosūtīt strcpy (myData.a, "THIS IS A CHAR"); // saglabāt "THIS IS CHAR" mainīgajam a maniem "datiem", kas iepriekš definēti myData.b = random (1, 20); // saglabāt nejaušu vērtību myData.c = 1.2; // saglabāt pludiņu myData.d = "ESP32"; // saglabāt virkni myData.e = false; // saglabāt boolu // Nosūtīt datus, kas ir mazāki vai vienādi ar 250 baitiem, izmantojot ESP-NOW, un atgriež tā statusu esp_err_t result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (rezultāts == ESP_OK) {Serial.println ("Nosūtīts ar panākumiem");} else {Serial.println ("Kļūda nosūtot datus"); }}

ESP8266 KODS

// Pievienojiet nepieciešamās bibliotēkas

#include // Lai pievienotu Wifi iespējas ESP32 #include // Lai piekļūtu esp tagad funkcijām // saglabājiet MAC adresi masīvā ar nosaukumu broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*definēt daudzu mainīgo datu tipus, kas strukturēti un pārdēvēti par strukturālo_ziņojumu*/ typedef struktuuri_ziņojumu {char a [32]; int b; pludiņš c; Virkne d; bool e; } structure_message; // Izveidot mainīgo struktu_ziņojumu, ko sauc par myData struktu_ziņa myData; // funkcija tiek izsaukta, kad dati tiek saņemti, un izdrukā tos par spēkā neesošiem OnDataRecv (uint8_t * mac, uint8_t * ienākošie dati, uint8_t len) {memcpy (& myData, ienākošie dati, sizeof (myData)); Serial.print ("Saņemti baiti:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Pludiņš:"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Sērijas.println (); send_data (); } void OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nPēdējās pakešu sūtīšanas statuss: / t"); Serial.println (sendStatus == 1? "Piegādes panākumi": "Piegādes kļūme"); ja (sendStatus! = 1) {send_data (); }} void send_data () {// Iestatiet vērtības nosūtīt strcpy (myData.a, "THIS IS A CHAR"); // saglabāt "THIS IS CHAR" mainīgajam a maniem "datiem", kas iepriekš definēti myData.b = random (1, 20); // saglabāt nejaušu vērtību myData.c = 1.2; // saglabāt pludiņu myData.d = "ESP8266"; // saglabāt virkni myData.e = false; // saglabāt boolu esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); } void setup () {// Iestatiet pārraides ātrumu sērijas sakariem ar ESP Serial.begin (115200); // Iestatīt ierīci kā Wi-Fi staciju WiFi.mode (WIFI_STA); // Startē wifi // Init ESP-NOW un atgriež savu statusu, ja (esp_now_init ()! = 0) {Serial.println ("Kļūda, inicializējot ESP-NOW"); atgriešanās; } if (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)) {Serial.println ("Neizdevās pievienot līdzinieku"); atgriešanās; } esp_now_set_self_role (ESP_NOW_ROLE_COMBO); esp_now_register_send_cb (OnDataSent); esp_now_set_self_role (ESP_NOW_ROLE_COMBO); // Nosaka šī esp lomu esp_now_register_recv_cb (OnDataRecv); // pēc ESPNOW datu saņemšanas izsauciet funkciju OnDataRecv} void loop () {}

8. darbība: ATSAUCES

ESPNOW_32_Piemērs

ESPNOW_8266 Piemērs

WIFI.h

ESP8266WiFi.h

esp_now.h par ESP8266

esp_now.h ESP32

esp_now oficiālais dokuments (labāks funkciju skaidrojums)

ESP-NOW oficiālā rokasgrāmata

Ieteicams: