Turinys:
- Prekės
- 1 veiksmas: gaukite lentos „Mac“adresą
- 2 veiksmas: kaip priversti ESP-NOW veikti
- 3 veiksmas: ESP-DABAR FUNKCIJOS (ESP32)
- 4 veiksmas: ESP-DABAR FUNKCIJOS (ESP8266)
- 5 veiksmas: vienpusis ryšys (ESP32 kaip siuntėjas)
- 6 veiksmas: vienpusis ryšys (ESP8266 kaip siuntėjas)
- 7 žingsnis: Dviejų krypčių bendravimas
- 8 žingsnis: NUORODOS
2025 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2025-01-23 14:58
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ą
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:
- Įtraukite esp dabar ir „Wi -Fi“bibliotekas
- Išsaugokite gavėjo ESP „Mac“adresą
- Nustatykite išsiųsto/gauto pranešimo duomenų struktūrą
- Sąrankoje nustatykite „Wi -Fi“į stoties režimą
- Inicijuokite esp_now
- atlikti ir užregistruoti atgalinio skambučio funkciją, iškviečiamą išsiuntus ir gavus duomenis
- Esp8266, apibrėžkite jo vaidmenį
- užregistruoti bendraamžį ar gavėją, pvz
- 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
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:
M5STACK Kaip rodyti temperatūrą, drėgmę ir slėgį naudojant „M5StickC ESP32“naudojant „Visuino“- lengva padaryti: 6 žingsniai
„M5STACK“Kaip rodyti temperatūrą, drėgmę ir slėgį „M5StickC ESP32“naudojant „Visuino“- lengva padaryti: šioje pamokoje sužinosime, kaip užprogramuoti „ESP32 M5Stack StickC“su „Arduino IDE“ir „Visuino“rodyti temperatūrą, drėgmę ir slėgį naudojant ENV jutiklį (DHT12, BMP280, BMM150)
Kaip padaryti išmanųjį puodą naudojant „NodeMCU“, valdomą programos: 8 veiksmai
Kaip sukurti išmanųjį puodą naudojant „NodeMCU“, valdomą programos: Šiame vadove mes sukursime išmanųjį puodą, valdomą ESP32 ir programą išmaniesiems telefonams („iOS“ir „Android“). Ryšiui ir „Blynk“bibliotekai naudosime „NodeMCU“(ESP32) debesies daiktų internetui ir programai išmaniajame telefone. Galiausiai mes
Kaip padaryti „WiFi“perjungimą naudojant ESP8266: 5 veiksmai
Kaip padaryti „WiFi“jungiklį naudojant ESP8266: Šioje pamokoje parodysiu, kaip padaryti laidinį jungiklį naudojant ESP8266. komunikacijos priemonė, kurią naudosiu, yra „WiFi“tinklas. Ankstesnėje pamokoje aptariau ESP8266 naudojimą bendraujant naudojant „WiFi“tinklą. Tai galite perskaityti
Kaip įrašyti žaidimus mobiliesiems naudojant balso pokalbių garsą *be šaknų: 4 žingsniai
Kaip įrašyti žaidimus mobiliesiems naudojant balso pokalbių garsą *be šaknų: šiandien dėl didžiulės mobiliųjų žaidimų, tokių kaip PUBG, sėkmės daugelis žmonių nori jį transliuoti, tačiau yra viena didelė problema, nors galite įrašyti ekraną, tačiau „Android“dozė neleidžiama įrašyti savo balso pokalbį. Arba galite įrašyti savo balsą
Kaip sukurti paprastą pokalbių programą „Visual Basic“naudojant „Microsoft Winsock Control“: 7 žingsniai
Kaip sukurti paprastą pokalbių programą naudojant „Visual Basic“naudojant „Microsoft Winsock Control“: šioje nesuderinamoje programoje aš jums parodysiu, kaip sukurti paprastą „Visual Basic“pokalbių programą. Aš peržiūrėsiu, ką daro visas kodas, kad jūs mokytumėtės jį kurdami, o pabaigoje parodysiu, kaip juo naudotis