Turinys:

Kaip padaryti keletą ESP pokalbių per ESP-DABAR naudojant ESP32 ir ESP8266: 8 veiksmai
Kaip padaryti keletą ESP pokalbių per ESP-DABAR naudojant ESP32 ir ESP8266: 8 veiksmai

Video: Kaip padaryti keletą ESP pokalbių per ESP-DABAR naudojant ESP32 ir ESP8266: 8 veiksmai

Video: Kaip padaryti keletą ESP pokalbių per ESP-DABAR naudojant ESP32 ir ESP8266: 8 veiksmai
Video: $5 WiFi Camera Setup | ESP32 Wifi Setup view on Mobile phone 2024, Liepa
Anonim
Kaip padaryti keletą ESP pokalbių per ESP-DABAR naudojant ESP32 ir ESP8266
Kaip padaryti keletą ESP pokalbių per ESP-DABAR naudojant ESP32 ir ESP8266

Vykdant projektą, man reikia kelių ESP, kad galėčiau kalbėtis tarpusavyje be maršrutizatoriaus. Norėdami tai padaryti, naudoju ESP-DABAR, kad belaidis ryšys būtų vykdomas be ESP maršrutizatoriaus.

Prekės

Dalykai, kuriuos naudojau:

ESP32 DEV modulis

NODEMCU 1.0 (ESP12E modulis)

1 veiksmas: gaukite lentos „Mac“adresą

Gaukite valdybos „Mac“adresą
Gaukite valdybos „Mac“adresą
Gaukite valdybos „Mac“adresą
Gaukite valdybos „Mac“adresą

Naudodamiesi ESP-dabar, ESP įrenginiai kalbasi tarpusavyje siųsdami duomenis į savo unikalų adresą, kai yra prijungti prie vidinio prieigos taško tinklo, kuris buvo sukurtas dabar.. Taigi nustatykite kiekvieno įrenginio MAC adresą. Pridedamas mano ESP32 ir ESP8266 plokštės nustatymai

Dėl ESP32

#include "WiFi.h" // Norėdami pasiekti ESP32 WIFI galimybes

void setup () {Serial.begin (115200); Serial.print ("ESP32 plokštės MAC adresas:"); Serial.println (WiFi.macAddress ()); // spausdina savo MAC adresą} void loop () {}

Už ESP8266

#include // Biblioteka naudojama ESP8266 WIFI galimybėms pasiekti

void setup () {Serial.begin (115200); Serial.println (); Serial.print ("ESP8266 plokštės MAC adresas:"); Serial.println (WiFi.macAddress ()); // spausdina savo MAC adresą} void loop () {}

Mano MAC ADRESAS yra:

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

2 veiksmas: kaip priversti ESP-NOW veikti

Štai kaip tai padaryti, apžvalga:

  1. Įtraukite esp dabar ir „Wi -Fi“bibliotekas
  2. Išsaugokite gavėjo ESP „Mac“adresą
  3. Nustatykite išsiųsto/gauto pranešimo duomenų struktūrą
  4. Sąrankoje nustatykite „Wi -Fi“į stoties režimą
  5. Inicijuokite esp_now
  6. atlikti ir užregistruoti atgalinio skambučio funkciją, iškviečiamą išsiuntus ir gavus duomenis
  7. Esp8266, apibrėžkite jo vaidmenį
  8. užregistruoti bendraamžį ar gavėją, pvz
  9. Siųsti duomenis

3 veiksmas: ESP-DABAR FUNKCIJOS (ESP32)

esp_now_init (negalioja)

Grįžti:

  • ESP_OK: pavyks
  • ESP_ERR_ESPNOW_INTERNAL: vidinė klaida

Apibūdinimas:

Inicijuokite ESPNOW funkciją

esp_now_register_send_cb (cb)

Grąžinimai:

  • ESP_OK: pavyks
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW nėra inicijuotas
  • ESP_ERR_ESPNOW_INTERNAL: vidinė klaida

Parametrai:

  • cb: atgalinio ryšio funkcijos pavadinimas išsiuntus ESPNOW duomenis šiais parametrais:

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

      • mac_addr: imtuvo „mac“adresas
      • būsena:

        • 1 = sėkmė
        • 0 = nepavyksta

Apibūdinimas:

Išsiuntę ESPNOW duomenis, iškvieskite funkciją OnDataSent

esp_now_add_peerconst esp_now_peer_info_t *bendraamžis)

Grąžinimai:

  • ESP_OK: pavyks
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW nėra inicijuotas
  • ESP_ERR_ESPNOW_ARG: neteisingas argumentas
  • ESP_ERR_ESPNOW_FULL: bendraamžių sąrašas pilnas
  • ESP_ERR_ESPNOW_NO_MEM: trūksta atminties
  • ESP_ERR_ESPNOW_EXIST: bendraamžis egzistavo

Parametrai:

  • bendraamžis: bendraamžių informacija su šiais duomenimis:

    • uint8_t

      peer_addr [ESP_NOW_ETH_ALEN]; ESPNOW tarpusavio MAC adresas, kuris taip pat yra stoties arba sofos MAC adresas

    • uint8_t lmk [ESP_NOW_KEY_LEN]

      ESPNOW tarpusavio vietinis pagrindinis raktas, naudojamas duomenims šifruoti

    • uint8_t kanalas

      „Wi-Fi“kanalas, kurį bendraamžis naudoja ESPNOW duomenims siųsti/gauti. Jei reikšmė yra 0, naudokite dabartinį kanalą, kuriame yra įjungta stotis ar programinė įranga. Priešingu atveju jis turi būti nustatytas kaip kanalas, kuriame įjungta stotis ar „softap“

    • wifi_interface_t ifidx

      „Wi-Fi“sąsaja, kurią bendraamžis naudoja ESPNOW duomenims siųsti/gauti

    • bool šifruoti

      ESPNOW duomenys, kuriuos siunčia/gauna šis bendraamžis, yra užšifruoti arba ne

    • niekinis *priv

      ESPNOW tarpusavio privatūs duomenys

Apibūdinimas:

Pridėti bendraamžį prie bendraamžių sąrašo

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

Grąžinimai:

  • ESP_OK: pavyks
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW nėra inicijuotas
  • ESP_ERR_ESPNOW_ARG: neteisingas argumentas
  • ESP_ERR_ESPNOW_INTERNAL: vidinė klaida
  • ESP_ERR_ESPNOW_NO_MEM: trūksta atminties
  • ESP_ERR_ESPNOW_NOT_FOUND: bendraamžis nerastas
  • ESP_ERR_ESPNOW_IF: dabartinė „WiFi“sąsaja neatitinka bendraamžių

Parametrai:

  • peer_addr: lygiaverčio MAC adresas
  • duomenys: duomenys, kuriuos reikia siųsti
  • len: duomenų ilgis

Apibūdinimas:

Siųsti ESPNOW duomenis. Kai kuriais atvejais tai atsitinka:

  • Jei peer_addr nėra NULL, siųskite duomenis bendraamžiui, kurio MAC adresas atitinka peer_addr
  • Jei „peer_addr“yra NULL, siųskite duomenis visiems bendraamžiams, įtrauktiems į bendraamžių sąrašą
  • Maksimalus duomenų ilgis turi būti trumpesnis nei ESP_NOW_MAX_DATA_LEN
  • Buferis, nurodytas duomenų argumentu, neturi būti galiojantis, kai grįžta esp_now_send

esp_now_register_recv_cb (cb)

Grąžinimai:

  • ESP_OK: pavyks
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW nėra inicijuotas
  • ESP_ERR_ESPNOW_INTERNAL: vidinė klaida

Parametrai:

  • cb: atgalinio ryšio funkcija ESPNOW duomenims priimti

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

      • mac_addr:

        imtuvo „mac“adresas

      • *duomenys:

        gaunami duomenys

      • data_len

        duomenų baitų ilgio

Apibūdinimas:

Gavę ESPNOW duomenis, iškvieskite funkciją cb

4 veiksmas: ESP-DABAR FUNKCIJOS (ESP8266)

FUNKCIJŲ APRAŠYMAS ESP32 ESP8266

int esp_now_init (negalioja)

Grąžinimai:

  • 1 = sėkmė
  • 0 = nepavyksta

apibūdinimas

Inicijuokite ESPNOW funkciją

int esp_now_set_self_role (U8 vaidmuo)

Parametrai:

  • ESP_NOW_ROLE_IDLE: duomenų perdavimas neleidžiamas.
  • ESP_NOW_ROLE_CONTROLLER: pirmenybė teikiama „Sation“sąsajai
  • ESP_NOW_ROLE_SLAVE: pirmenybė teikiama „SoftAP“sąsajai
  • ESP_NOW_ROLE_COMBO: pirmenybė teikiama „SoftAPinterface“

apibūdinimas

Nustato prietaiso vaidmenį

int esp_now_register_send_cb (cb)

Grąžinimai:

  • 1 = sėkmė
  • 0 = nepavyksta

Parametrai:

  • cb: atgalinio ryšio funkcijos pavadinimas išsiuntus ESPNOW duomenis šiais parametrais:

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

      • mac_addr: imtuvo „mac“adresas
      • būsena:

        • 1 = sėkmė
        • 0 = nepavyksta

apibūdinimas

Išsiuntę ESPNOW duomenis, iškvieskite funkciją OnDataSent

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

Grąžinimai:

  • 1 = sėkmė
  • 0 = nepavyksta

Parametrai:

  • mac_addr

    bendraamžio „mac“adresas

  • vaidmuo
  • kanalą

    Jei reikšmė yra 0, naudokite dabartinį kanalą, kuriame yra įjungta stotis ar programinė įranga. Priešingu atveju jis turi būti nustatytas kaip kanalas, kuriame įjungta stotis ar „softap“

  • *Raktas

    šifravimo raktas

  • key_len

    rakto ilgis

Apibūdinimas:

Pridėti bendraamžį prie bendraamžių sąrašo

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

Grąžinimai:

  • 1 = sėkmė
  • 0 = nepavyko

Parametrai:

  • peer_addr: lygiaverčio MAC adresas
  • duomenys: duomenys, kuriuos reikia siųsti
  • len: duomenų ilgis

Apibūdinimas:

Siųsti ESPNOW duomenis. Kai kuriais atvejais tai atsitinka:

  • Jei peer_addr nėra NULL, siųskite duomenis bendraamžiui, kurio MAC adresas atitinka peer_addr
  • Jei „peer_addr“yra NULL, siųskite duomenis visiems bendraamžiams, įtrauktiems į bendraamžių sąrašą
  • Maksimalus duomenų ilgis turi būti trumpesnis nei ESP_NOW_MAX_DATA_LEN
  • Buferis, nurodytas duomenų argumentu, neturi būti galiojantis, kai grįžta esp_now_send

int esp_now_register_recv_cb (cb)

Grąžinimai:

  • 1 = sėkmė
  • 0 = nepavyko

Parametrai:

  • cb: atgalinio ryšio funkcija ESPNOW duomenims priimti

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

      • mac_addr:

        imtuvo „mac“adresas

      • *duomenys:

        gaunami duomenys

      • data_len

        duomenų baitų ilgio

Apibūdinimas:

Gavę ESPNOW duomenis, iškvieskite funkciją cb

5 veiksmas: vienpusis ryšys (ESP32 kaip siuntėjas)

ESP32 siunčia duomenis į ESP8266. su šiuo kodu. Pakeiskite broadcastAddress į atitinkamą imtuvo „Mac“adresą. Mano buvo A4: CF: 12: C7: 9C: 77

// Pridėti reikiamas bibliotekas

#include // Norėdami pasiekti esp dabar funkcijas #include // Norėdami pridėti „Wifi“galimybes ESP32 // išsaugokite MAC adresą masyve, pavadinimu broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // mano imtuvo MAC adresas/*apibrėžia daugelio kintamųjų duomenų tipus, struktūrizuotus ir pervadintus juos į struktūros_žinutės*/typedef int b; plūdė c; Eilutė d; bool e; } structure_message; // Sukurti struktūros_žinutę, pavadintą myData struktūros_žinutė myData; // funkcija iškviečiama, kai duomenys siunčiami, kad būtų išspausdinta jų būsena void OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t status) {Serial.print ("\ r / nPaskutinio paketo siuntimo būsena: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Pristatymo sėkmė": "Pristatymo klaida"); } void setup () {// Nustatykite duomenų perdavimo spartą serijiniam ryšiui su ESP Serial.begin (115200); // Nustatyti įrenginį kaip „Wi-Fi“stotį „WiFi.mode“(WIFI_STA); // Paleidžia „wifi“// „Init ESP-NOW“ir grąžina būseną, jei (esp_now_init ()! = ESP_OK) {Serial.println ("Klaida inicijuojant ESP -DABAR "); grįžti; } // iškviesti funkciją OnDataSent išsiuntus ESPNOW duomenis esp_now_register_send_cb (OnDataSent); // Registruotis peer esp_now_peer_info_t peerInfo; // inicijuoti ir priskirti bendraamžių informaciją kaip rodyklę adresams memcpy (peerInfo.peer_addr, broadcastAddress, 6); // nukopijuokite broadcastAddress reikšmę su 6 baitais į peerInfo.peer_addr peerInfo.channel = 0; // kanalas, kuriame esp kalba. 0 reiškia neapibrėžtą ir duomenys bus siunčiami dabartiniu kanalu. 1-14 yra galiojantys kanalai, kurie yra tokie patys kaip vietinis įrenginys peerInfo.encrypt = false; // neužšifruotas // Įtraukite įrenginį į suporuotų įrenginių sąrašą, jei (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Nepavyko pridėti bendraamžių"); grįžti; }} void loop () {// Nustatykite reikšmes siųsti strcpy (myData.a, "THIS IS A CHAR"); // išsaugoti "THIS IS CHAR" į kintamąjį a mano "duomenys", apibrėžti anksčiau myData.b = atsitiktinis (1, 20); // išsaugoti atsitiktinę vertę myData.c = 1.2; // išsaugoti plūdę myData.d = "Sveiki"; // išsaugoti eilutę myData.e = false; // išsaugoti boolą // Siųsti duomenis, mažesnius arba lygius 250 baitų per ESP-DABAR ir grąžina būseną esp_err_t result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (rezultatas == ESP_OK) {Serial.println ("Išsiųsta sėkmingai"); } else {Serial.println ("Klaida siunčiant duomenis"); } uždelsimas (2000); }

ESP8266 gauna duomenis iš ESP32 naudodami šį kodą.

// Pridėti reikiamas bibliotekas

#include // Norėdami pridėti „Wifi“galimybes ESP32 #include // Norėdami pasiekti esp dabar funkcijas /*, nustatykite kelių kintamųjų, kurie buvo struktūrizuoti ir pervadinti, tipų tipus į struktūros_žinutę* /typedef struktuuri_žinutę {char a [32]; int b; plūdė c; Eilutė d; bool e; } structure_message; // Sukurkite kintamąjį struktūrą_žinutė, pavadintą myData // funkcija iškviečiama gavus duomenis ir išspausdina juos negaliojančiais OnDataRecv (uint8_t * mac, uint8_t * gaunami duomenys, uint8_t len) {memcpy (& mano duomenys, gaunami duomenys, dydis (mano duomenys)); Serial.print („Gauti baitai:“); Serial.println (len); Serial.print („Char:“); Serial.println (myData.a); Serial.print („Int:“); Serial.println (myData.b); Serial.print („Plūdė:“); Serial.println (myData.c); Serial.print ("Styga:"); Serial.println (myData.d); Serial.print („Bool:“); Serial.println (myData.e); Serial.println (); } void setup () {// Nustatykite duomenų perdavimo spartą serijiniam ryšiui su ESP Serial.begin (115200); // Nustatyti įrenginį kaip „Wi-Fi“stotį „WiFi.mode“(WIFI_STA); // Paleidžia wifi // Init ESP-NOW ir grąžina būseną, jei (esp_now_init ()! = 0) {Serial.println ("Klaida inicijuojant ESP-NOW"); grįžti; } esp_now_set_self_role (ESP_NOW_ROLE_SLAVE); // Apibrėžia šio esp vaidmenį esp_now_register_recv_cb (OnDataRecv); // iškviesti funkciją OnDataRecv gavus ESPNOW duomenis} void loop () {}

6 veiksmas: vienpusis ryšys (ESP8266 kaip siuntėjas)

ESP8266 siunčia duomenis į ESP32. su šiuo kodu. Pakeiskite broadcastAddress į atitinkamą imtuvo „Mac“adresą. Mano esp32 adresas yra 30: AE: A4: F5: 03: A4. Dėl kitų esp8266 funkcijų eikite čia

// Pridėti reikiamas bibliotekas

#include // Norėdami pridėti „Wifi“galimybes ESP32 #include // Norėdami pasiekti esp dabar funkcijas // išsaugokite MAC adresą masyve, pavadintame broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*apibrėžti daugelio kintamųjų duomenų tipus, struktūrizuotus ir pervadintus juos į struktūros_žinutę*/ tipedef struktūros_žinutę {char a [32]; int b; plūdė c; Eilutė d; bool e; } structure_message; // Sukurkite struktūrinį kintamąjį, pavadintą myData structure_message myData; // funkcija iškviečiama, kai duomenys siunčiami, ir išspausdina jų būseną void OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nPaskutinio paketo siuntimo būsena: / t"); Serial.println (sendStatus == 1? "Pristatymo sėkmė": "Pristatymo klaida"); } void setup () {// Nustatykite duomenų perdavimo spartą serijiniam ryšiui su ESP Serial.begin (115200); // Nustatyti įrenginį kaip „Wi-Fi“stotį „WiFi.mode“(WIFI_STA); // Paleidžia „wifi“// „Init ESP-NOW“ir grąžina būseną, jei (esp_now_init ()) {Serial.println („Klaida inicijuojant ESP-NOW“)); grįžti; } esp_now_register_send_cb („OnDataSent“); // iškviesti funkciją OnDataSent išsiuntus ESPNOW duomenis // Įtraukite įrenginį į suporuotų įrenginių sąrašą, jei (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)) {Serial.println ("Nepavyko pridėti bendraamžių"); grįžti; }} void loop () {// Nustatykite reikšmes siųsti strcpy (myData.a, "THIS IS A CHAR"); // išsaugoti "THIS IS CHAR" į kintamąjį a mano "duomenys", apibrėžti anksčiau myData.b = atsitiktinis (1, 20); // išsaugoti atsitiktinę vertę myData.c = 1.2; // išsaugoti plūdę myData.d = "SP8266"; // išsaugoti eilutę myData.e = false; // išsaugoti boolą // Siųsti duomenis, mažesnius arba lygius 250 baitų per ESP-NOW ir grąžina jų būseną int result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (esp_now_init ()! = 0) {Serial.println ("Išsiųsta sėkmingai"); } else {Serial.println ("Klaida siunčiant duomenis"); } uždelsimas (2000); }

ESP32 gauna duomenis iš ESP8266. su šiuo kodu. Dėl kitų funkcijų skaitykite čia

// Pridėti reikiamas bibliotekas

#include // Norėdami pasiekti esp dabar funkcijas #include // Norėdami pridėti „Wifi“galimybes ESP32 /*, apibrėžkite kelių kintamųjų, kurie buvo struktūrizuoti ir pervadinti, tipų tipus į struktūros_žinutę* /typedef struktūros_žinutę {char a [32]; int b; plūdė c; Eilutė d; bool e; } structure_message; // Sukurkite kintamąjį struktūrą_žinutė, pavadintą myData // funkcija iškviečiama gavus duomenis ir išspausdina juos negaliojančiais OnDataRecv (const uint8_t * mac, const uint8_t * gaunami duomenys, int len) {memcpy (& myData, gaunami duomenys, sizeof (myData)); Serial.print („Gauti baitai:“); Serial.println (len); Serial.print („Char:“); Serial.println (myData.a); Serial.print („Int:“); Serial.println (myData.b); Serial.print („Plūdė:“); Serial.println (myData.c); Serial.print ("Styga:"); Serial.println (myData.d); Serial.print („Bool:“); Serial.println (myData.e); Serial.println (); } void setup () {// Nustatykite duomenų perdavimo spartą serijiniam ryšiui su ESP Serial.begin (115200); // Nustatyti įrenginį kaip „Wi-Fi“stotį „WiFi.mode“(WIFI_STA); // Paleidžia wifi // Init ESP-NOW ir grąžina būseną, jei (esp_now_init ()! = 0) {Serial.println ("Klaida inicijuojant ESP-NOW"); grįžti; } esp_now_register_recv_cb („OnDataRecv“); // iškviesti funkciją OnDataRecv gavus ESPNOW duomenis} void loop () {}

7 žingsnis: Dviejų krypčių bendravimas

Dviejų krypčių bendravimas
Dviejų krypčių bendravimas
Dviejų krypčių bendravimas
Dviejų krypčių bendravimas

ESP32 siunčia duomenis apie paleidimą į ESP8266. ESP8266 išspausdina gautą pranešimą, o po to atsako ESP32 ant nuoseklaus monitoriaus.

ESP32 KODAS

// Pridėti reikiamas bibliotekas

#include // Norėdami pasiekti esp dabar funkcijas #include // Norėdami pridėti „Wifi“galimybes ESP32 // išsaugokite MAC adresą masyve, pavadinimu broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // mano imtuvo MAC adresas/*apibrėžia daugelio kintamųjų duomenų tipus, struktūrizuotus ir pervadintus juos į struktūros_žinutės*/typedef int b; plūdė c; Eilutė d; bool e; } structure_message; // Sukurti struktūros_žinutę, pavadintą myData struktūros_žinutė myData; // funkcija iškviečiama, kai duomenys siunčiami, kad būtų išspausdinta jų būsena void OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t status) {Serial.print ("\ r / nPaskutinio paketo siuntimo būsena: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Pristatymo sėkmė": "Pristatymo klaida"); if (status! = ESP_NOW_SEND_SUCCESS) {send_data ();}} void OnDataRecv (const uint8_t * mac, const uint8_t * gaunami duomenys, int len) {memcpy (& mano duomenys, gaunami duomenys, sizeof (mano duomenys)); Serial.print („Gauti baitai:“); Serial.println (len); Serial.print („Char:“); Serial.println (myData.a); Serial.print („Int:“); Serial.println (myData.b); Serial.print („Plūdė:“); Serial.println (myData.c); Serial.print ("Styga:"); Serial.println (myData.d); Serial.print („Bool:“); Serial.println (myData.e); Serial.println (); } void setup () {// Nustatykite duomenų perdavimo spartą serijiniam ryšiui su ESP Serial.begin (115200); // Nustatyti įrenginį kaip „Wi-Fi“stotį „WiFi.mode“(WIFI_STA); // Paleidžia „wifi“// „Init ESP-NOW“ir grąžina būseną, jei (esp_now_init ()! = ESP_OK) {Serial.println ("Klaida inicijuojant ESP -DABAR "); grįžti; } // iškviesti funkciją OnDataSent išsiuntus ESPNOW duomenis esp_now_register_send_cb (OnDataSent); // Registruotis peer esp_now_peer_info_t peerInfo; // inicijuoti ir priskirti bendraamžių informaciją kaip rodyklę adresams memcpy (peerInfo.peer_addr, broadcastAddress, 6); // nukopijuokite broadcastAddress reikšmę su 6 baitais į peerInfo.peer_addr peerInfo.channel = 0; // kanalas, kuriame esp kalba. 0 reiškia neapibrėžtą ir duomenys bus siunčiami dabartiniu kanalu.1-14 yra galiojantys kanalai, kurie yra tokie patys kaip vietinis įrenginys peerInfo.encrypt = false; // neužšifruotas // Įtraukite įrenginį į suporuotų įrenginių sąrašą, jei (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Nepavyko pridėti bendraamžių"); grįžti; } esp_now_register_recv_cb („OnDataRecv“); // iškviesti funkciją OnDataRecv, gavus ESPNOW duomenis send_data (); } void loop () {} void send_data () {Serial.println ("Siunčiama"); // Nustatykite reikšmes siųsti strcpy (myData.a, "THIS IS A CHAR"); // išsaugoti "THIS IS CHAR" į kintamąjį a mano "duomenys", apibrėžti anksčiau myData.b = atsitiktinis (1, 20); // išsaugoti atsitiktinę vertę myData.c = 1.2; // išsaugoti plūdę myData.d = "ESP32"; // išsaugoti eilutę myData.e = false; // išsaugoti boolą // Siųsti duomenis, mažesnius arba lygius 250 baitų per ESP-DABAR ir grąžina būseną esp_err_t result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (result == ESP_OK) {Serial.println ("Siųsti sėkmingai");} else {Serial.println ("Klaida siunčiant duomenis"); }}

ESP8266 KODAS

// Pridėti reikiamas bibliotekas

#include // Norėdami pridėti „Wifi“galimybes ESP32 #include // Norėdami pasiekti esp dabar funkcijas // išsaugokite MAC adresą masyve, pavadintame broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*apibrėžti daugelio kintamųjų duomenų tipus, struktūrizuotus ir pervadintus juos į struktūros_žinutę*/ tipedef struktūros_žinutę {char a [32]; int b; plūdė c; Eilutė d; bool e; } structure_message; // Sukurkite kintamąjį struktūrą_žinutė, pavadintą myData // funkcija iškviečiama gavus duomenis ir išspausdina juos negaliojančiais OnDataRecv (uint8_t * mac, uint8_t * gaunami duomenys, uint8_t len) {memcpy (& mano duomenys, gaunami duomenys, dydis (mano duomenys)); Serial.print („Gauti baitai:“); Serial.println (len); Serial.print („Char:“); Serial.println (myData.a); Serial.print („Int:“); Serial.println (myData.b); Serial.print („Plūdė:“); Serial.println (myData.c); Serial.print ("Styga:"); 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 / nPaskutinio paketo siuntimo būsena: / t"); Serial.println (sendStatus == 1? "Pristatymo sėkmė": "Pristatymo klaida"); if (sendStatus! = 1) {send_data (); }} void send_data () {// Nustatykite reikšmes siųsti strcpy (myData.a, "THIS IS A CHAR"); // išsaugoti "THIS IS CHAR" į kintamąjį a mano "duomenys", apibrėžti anksčiau myData.b = atsitiktinis (1, 20); // išsaugoti atsitiktinę vertę myData.c = 1.2; // išsaugoti plūdę myData.d = "ESP8266"; // išsaugoti eilutę myData.e = false; // išsaugoti boolį esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); } void setup () {// Nustatykite duomenų perdavimo spartą serijiniam ryšiui su ESP Serial.begin (115200); // Nustatyti įrenginį kaip „Wi-Fi“stotį „WiFi.mode“(WIFI_STA); // Paleidžia wifi // Init ESP-NOW ir grąžina būseną, jei (esp_now_init ()! = 0) {Serial.println ("Klaida inicijuojant ESP-NOW"); grįžti; } if (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)) {Serial.println ("Nepavyko pridėti bendraamžių"); grįžti; } esp_now_set_self_role (ESP_NOW_ROLE_COMBO); esp_now_register_send_cb („OnDataSent“); esp_now_set_self_role (ESP_NOW_ROLE_COMBO); // Apibrėžia šio esp vaidmenį esp_now_register_recv_cb (OnDataRecv); // iškviesti funkciją OnDataRecv gavus ESPNOW duomenis} void loop () {}

8 žingsnis: NUORODOS

ESPNOW_32_Pavyzdys

ESPNOW_8266 Pavyzdys

WIFI.h

ESP8266WiFi.h

esp_now.h, skirtas ESP8266

esp_now.h, skirtas ESP32

esp_now oficialus dokumentas (geresnis funkcijų paaiškinimas)

ESP-NOW oficialus vadovas

Rekomenduojamas: