
Satura rādītājs:
- Piegādes
- 1. darbība: iegūstiet Board Mac adresi
- 2. darbība. Kā panākt, lai ESP-NOW darbotos
- 3. darbība: ESP-NOW FUNKCIJAS (ESP32)
- 4. darbība. ESP-NOW FUNKCIJAS (ESP8266)
- 5. darbība: vienvirziena komunikācija (ESP32 kā sūtītājs)
- 6. darbība: vienvirziena komunikācija (ESP8266 kā sūtītājs)
- 7. solis: Divu veidu saziņa
- 8. darbība: ATSAUCES
2025 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2025-01-23 14:59

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


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:
- Iekļaujiet esp tagad un wifi bibliotēkas
- Saglabājiet saņēmēja ESP mac adresi
- Nosakiet nosūtīto/saņemto ziņojumu datu struktūru
- Iestatīšanas laikā iestatiet wifi stacijas režīmā
- Inicializējiet esp_now
- veikt un reģistrēt atzvanīšanas funkciju, kas tiek izsaukta pēc datu nosūtīšanas un saņemšanas
- Esp8266 definējiet tā lomu
- reģistrēt vienādrangu vai saņēmēju, piem
- 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


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:
Kā lasīt vairākas analogās vērtības, izmantojot vienu analogo tapu: 6 soļi (ar attēliem)

Kā lasīt vairākas analogās vērtības, izmantojot vienu analogo tapu: šajā apmācībā es jums parādīšu, kā lasīt vairākas analogās vērtības, izmantojot tikai vienu analogās ievades tapu
Pamācība: Kā Arduino kontrolē vairākas vienas adreses ierīces, izmantojot TCA9548A I2C multipleksoru: 3 soļi

Pamācība: Kā Arduino kontrolē vairākas vienas adreses ierīces, izmantojot TCA9548A I2C multipleksoru: Apraksts: TCA9548A I2C multipleksora modulis ļauj savienot ierīces ar vienu un to pašu I2C adresi (līdz 8 vienādām adresēm I2C), kas savienotas ar vienu mikrokontrolleri. Multiplekseris darbojas kā vārtsargs, pārsūtot komandas uz izvēlēto kopu
Kā izveidot shēmas un izveidot PCB, izmantojot Autodesk EAGLE: 9 soļi

Kā izveidot shēmas un izveidot PCB, izmantojot Autodesk EAGLE. Ir daudz dažādu CAD (datorizēta dizaina) programmatūras veidu, kas var palīdzēt jums izveidot un izgatavot PCB (iespiedshēmas plates), vienīgā problēma ir tā, ka lielākā daļa no tām nav īsti nepaskaidrojiet, kā tos izmantot un ko viņi var darīt. Esmu izmantojis daudzas t
Vienkāršākais veids, kā drukāt īsziņas vai īsziņu sarunas no iPhone: 3 soļi

Vienkāršākie veidi, kā drukāt īsziņas vai īsziņu sarunas no iPhone: Sveiki visiem! Šajā pamācībā es jums parādīšu dažus vienkāršākos veidus, kā drukāt īsziņas no sava iPhone. Tik daudzi svarīgi ziņojumi, ko mēs tagad saņemam savā dzīvē, ir nenāk ar vēstuli vai pat pa e -pastu, bet gan pa tekstu
Kā izveidot autonomu basketbola spēles robotu, izmantojot IRobot, izveidot kā pamatu: 7 soļi (ar attēliem)

Kā izveidot autonomu basketbola spēles robotu, izmantojot IRobot Izveidot kā pamatu: Šis ir mans ieraksts izaicinājumam iRobot Create. Visa šī procesa grūtākā daļa man bija izlemt, ko robots darīs. Es gribēju demonstrēt lieliskās Create funkcijas, vienlaikus pievienojot robo noskaņu. Visas manas