![Ինչպես կատարել բազմաթիվ ESP խոսակցություններ ESP-NOW- ի միջոցով `օգտագործելով ESP32 և ESP8266: 8 քայլ Ինչպես կատարել բազմաթիվ ESP խոսակցություններ ESP-NOW- ի միջոցով `օգտագործելով ESP32 և ESP8266: 8 քայլ](https://i.howwhatproduce.com/images/007/image-19714-j.webp)
Բովանդակություն:
- Պարագաներ
- Քայլ 1: Ստացեք խորհրդի Mac հասցեն
- Քայլ 2. Ինչպես դարձնել ESP-NOW- ի աշխատանքը
- Քայլ 3: ESP-NOW FUNCTIONS (ESP32)
- Քայլ 4: ESP-NOW FUNCTIONS (ESP8266)
- Քայլ 5. Միակողմանի հաղորդակցություն (ESP32 որպես ուղարկող)
- Քայլ 6. Միակողմանի հաղորդակցություն (ESP8266 որպես ուղարկող)
- Քայլ 7: ԵՐԿՈAY ՀԵMMԻՆԱԿՈԹՅՈՆ
- Քայլ 8. Հղումներ
2025 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2025-01-23 14:48
![Ինչպես կատարել բազմաթիվ ESP խոսակցություններ ESP-NOW- ի միջոցով `օգտագործելով ESP32 և ESP8266 Ինչպես կատարել բազմաթիվ ESP խոսակցություններ ESP-NOW- ի միջոցով `օգտագործելով ESP32 և ESP8266](https://i.howwhatproduce.com/images/007/image-19714-1-j.webp)
Իմ ընթացիկ նախագծում ինձ պետք է բազմաթիվ ESP ՝ առանց երթուղիչի միմյանց հետ խոսելու համար: Դա անելու համար ես ESP-NOW- ով կօգտագործեմ անլար հաղորդակցություն միմյանց հետ առանց ESP- ի երթուղղիչի:
Պարագաներ
Իմ օգտագործած բաները.
ESP32 DEV մոդուլ
NODEMCU 1.0 (ESP12E մոդուլ)
Քայլ 1: Ստացեք խորհրդի Mac հասցեն
![Ստացեք խորհրդի Mac հասցեն Ստացեք խորհրդի Mac հասցեն](https://i.howwhatproduce.com/images/007/image-19714-2-j.webp)
![Ստացեք խորհրդի Mac հասցեն Ստացեք խորհրդի Mac հասցեն](https://i.howwhatproduce.com/images/007/image-19714-3-j.webp)
ESP-now- ի միջոցով ESP սարքերը խոսում են միմյանց հետ ՝ տվյալներ ուղարկելով իրենց եզակի հասցեով, մինչդեռ միացված են ներքին մուտքի կետային ցանցին, որը ստեղծվել է esp- ն այժմ ինտիլիզացնելու միջոցով:. Այսպիսով, որոշեք յուրաքանչյուր սարքի MAC հասցեն: Կից ներկայացված են իմ ESP32 և ESP8266 խորհրդի կարգավորումները
ESP32- ի համար
#ներառել «WiFi.h» // ESP32 WIFI հնարավորություններին մուտք գործելու համար
void setup () {Serial.begin (115200); Serial.print ("ESP32 Board MAC հասցե` "); Serial.println (WiFi.macAddress ()); // տպում է իր MAC հասցեն} void loop () {}
ESP8266 համար
#include // Գրադարան, որն օգտագործվում է ESP8266 WIFI հնարավորություններին մուտք գործելու համար
void setup () {Serial.begin (115200); Serial.println (); Serial.print ("ESP8266 Board MAC Address:"); Serial.println (WiFi.macAddress ()); // տպում է իր MAC հասցեն} void loop () {}
Իմ MAC ՀԱՍRԵՆ են.
- ESP32 - 30: AE: A4: F5: 03: A4
- ESP8266: A4: CF: 12: C7: 9C: 77
Քայլ 2. Ինչպես դարձնել ESP-NOW- ի աշխատանքը
Ահա ակնարկ, թե ինչպես այն դարձնել աշխատելու.
- Ներառեք esp այժմ և wifi գրադարաններ
- Պահպանեք ստացողի ESP- ի mac հասցեն
- Սահմանեք ուղարկված/ստացված հաղորդագրության տվյալների կառուցվածքը
- Կարգավորման ընթացքում Wi -Fi- ը միացրեք կայանի ռեժիմին
- Նախնականացնել esp_now- ը
- կատարել և գրանցել տվյալների ուղարկումից և ստանալուց հետո կանչված հետադարձ գործառույթը
- Esp8266- ի համար սահմանեք դրա դերը
- գրանցել հասակակիցը կամ ստացողը esp
- Տվյալներ ուղարկեք
Քայլ 3: ESP-NOW FUNCTIONS (ESP32)
esp_now_init (անվավեր)
Վերադարձ:
- ESP_OK: հաջողության հասնել
- ESP_ERR_ESPNOW_INTERNAL. Ներքին սխալ
Նկարագրություն:
Նախաստորագրեք ESPNOW գործառույթը
esp_now_register_send_cb (cb)
Վերադարձնում է `
- ESP_OK: հաջողության հասնել
- ESP_ERR_ESPNOW_NOT_INIT. ESPNOW- ը նախաստորագրված չէ
- ESP_ERR_ESPNOW_INTERNAL. Ներքին սխալ
Պարամետրեր:
-
cb: ESPNOW- ի տվյալներն այս պարամետրերով ուղարկելուց հետո հետ կանչելու գործառույթի անունը.
-
անվավեր cb (const uint8_t *mac_addr, esp_now_send_status_t կարգավիճակ)
- mac_addr: ստացողի մակ հասցե
-
կարգավիճակ:
- 1 = հաջողություն
- 0 = ձախողում
-
Նկարագրություն:
ESPNOW- ի տվյալները ուղարկելուց հետո զանգահարեք OnDataSent գործառույթը
esp_now_add_peerconst esp_now_peer_info_t *հասակակից)
Վերադարձնում է `
- ESP_OK: հաջողության հասնել
- ESP_ERR_ESPNOW_NOT_INIT. ESPNOW- ը նախաստորագրված չէ
- ESP_ERR_ESPNOW_ARG. Անվավեր փաստարկ
- ESP_ERR_ESPNOW_FULL. Հասակակիցների ցուցակը լիքն է
- ESP_ERR_ESPNOW_NO_MEM. Հիշողությունից դուրս է
- ESP_ERR_ESPNOW_EXIST. Գոյություն ունի հասակակից
Պարամետրեր:
-
հասակակիցներ ՝ հասակակիցների տեղեկատվություն հետևյալ տվյալներով.
-
uint8_t
peer_addr [ESP_NOW_ETH_ALEN]; ESPNOW հասակակից MAC հասցե, որը նաև կայանի կամ ծրագրակազմի MAC հասցեն է
-
uint8_t lmk [ESP_NOW_KEY_LEN]
ESPNOW հասակակից տեղական հիմնական բանալին, որն օգտագործվում է տվյալների կոդավորման համար
-
uint8_t ալիք
Wi-Fi ալիք, որն օգտագործում է հասակակիցը ESPNOW տվյալներ ուղարկելու/ստանալու համար: Եթե արժեքը 0 է, օգտագործեք ընթացիկ ալիքը, որի կայանը կամ ծրագրակազմը միացված է: Հակառակ դեպքում, այն պետք է սահմանվի որպես ալիք, որի վրա միացված է կայանը կամ ծրագրակազմը:
-
wifi_interface_t ifidx
Wi-Fi ինտերֆեյս, որը հասակակիցն օգտագործում է ESPNOW տվյալներ ուղարկելու/ստանալու համար
-
bool կոդավորումը
ESPNOW- ի տվյալները, որոնք այս հասակակիցն ուղարկում/ստանում է, գաղտնագրված են, թե ոչ
-
դատարկ *մասնավոր
ESPNOW հասակակիցների անձնական տվյալները
-
Նկարագրություն:
Ավելացրեք հավասարը հավասարի ցուցակին
esp_now_send (const uint8_t *peer_addr, const uint8_t *տվյալներ, size_t len)
Վերադարձնում է `
- ESP_OK: հաջողության հասնել
- ESP_ERR_ESPNOW_NOT_INIT. ESPNOW- ը նախաստորագրված չէ
- ESP_ERR_ESPNOW_ARG. Անվավեր փաստարկ
- ESP_ERR_ESPNOW_INTERNAL. Ներքին սխալ
- ESP_ERR_ESPNOW_NO_MEM. Հիշողությունից դուրս է
- ESP_ERR_ESPNOW_NOT_FOUND. Հասակակիցը չի գտնվել
- ESP_ERR_ESPNOW_IF. Ընթացիկ WiFi ինտերֆեյսը չի համընկնում իր հասակակիցների հետ
Պարամետրեր:
- peer_addr: հասակակից MAC հասցե
- տվյալներ. ուղարկվող տվյալներ
- len: տվյալների երկարությունը
Նկարագրություն:
Ուղարկեք ESPNOW տվյալները: Որոշ դեպքերում դա տեղի է ունենում.
- Եթե peer_addr- ը NULL չէ, ուղարկեք տվյալներ այն հասակակիցին, ում MAC հասցեն համընկնում է peer_addr- ի հետ
- Եթե peer_addr- ը NULL է, ուղարկեք տվյալներ բոլոր այն հասակակիցներին, որոնք ավելացված են հավասարի ցուցակում
- Տվյալների առավելագույն երկարությունը պետք է լինի ESP_NOW_MAX_DATA_LEN- ից պակաս
- Տվյալների փաստարկով մատնանշված բուֆերը պետք չէ վավեր լինել esp_now_send վերադարձից հետո
esp_now_register_recv_cb (cb)
Վերադարձնում է `
- ESP_OK: հաջողության հասնել
- ESP_ERR_ESPNOW_NOT_INIT. ESPNOW- ը նախաստորագրված չէ
- ESP_ERR_ESPNOW_INTERNAL. Ներքին սխալ
Պարամետրեր:
-
cb: ESPNOW տվյալներ ստանալու համար հետ կանչելու գործառույթ
-
անվավեր cb (const uint8_t *mac_addr, const uint8_t *տվյալներ, int data_len)
-
mac_addr:
ստացողի mac հասցեն
-
*տվյալներ:
տվյալների ստացում
-
data_len
տվյալների բայթ երկարությունը
-
-
Նկարագրություն:
ESPNOW տվյալները ստանալուց հետո զանգահարեք cb գործառույթը
Քայլ 4: ESP-NOW FUNCTIONS (ESP8266)
Ֆունկցիաներ Նկարագրություն ESP32 ESP8266
int esp_now_init (անվավեր)
Վերադարձնում է `
- 1 = հաջողություն
- 0 = ձախողում
Նկարագրություն
Նախաստորագրեք ESPNOW գործառույթը
int esp_now_set_self_role (u8 դեր)
Պարամետրեր:
- ESP_NOW_ROLE_IDLE. Տվյալների փոխանցումն անթույլատրելի է:
- ESP_NOW_ROLE_CONTROLLER. Առաջնահերթությունը տրվում է Sation ինտերֆեյսին
- ESP_NOW_ROLE_SLAVE. Առաջնահերթությունը տրվում է SoftAP ինտերֆեյսին
- ESP_NOW_ROLE_COMBO. Առաջնահերթությունը տրվում է SoftAPinterface- ին
Նկարագրություն
Սահմանում է սարքի դերը
int esp_now_register_send_cb (cb)
Վերադարձնում է `
- 1 = հաջողություն
- 0 = ձախողում
Պարամետրեր:
-
cb: ESPNOW- ի տվյալներն այս պարամետրերով ուղարկելուց հետո հետ կանչելու գործառույթի անունը.
-
անվավեր cb (const uint8_t *mac_addr, esp_now_send_status_t կարգավիճակ)
- mac_addr: ստացողի մակ հասցե
-
կարգավիճակ:
- 1 = հաջողություն
- 0 = ձախողում
-
Նկարագրություն
ESPNOW- ի տվյալները ուղարկելուց հետո զանգահարեք OnDataSent գործառույթը
int esp_now_add_peer (u8 *mac_addr, u8 դեր, u8 ալիք, u8 *ստեղն, u8 key_len)
Վերադարձնում է `
- 1 = հաջողություն
- 0 = ձախողում
Պարամետրեր:
-
mac_addr
հասակակիցի մակ հասցե
- դերը
-
ալիք
Եթե արժեքը 0 է, օգտագործեք ընթացիկ ալիքը, որի կայանը կամ ծրագրակազմը միացված է: Հակառակ դեպքում, այն պետք է սահմանվի որպես ալիք, որի վրա միացված է կայանը կամ ծրագրակազմը
-
*բանալի
գաղտնագրման բանալին
-
բանալին_լեն
բանալու երկարությունը
Նկարագրություն:
Ավելացրեք հավասարը հավասարի ցուցակին
int esp_now_send (const uint8_t *peer_addr, const uint8_t *տվյալներ, size_t len)
Վերադարձնում է `
- 1 = Հաջողություն
- 0 = Չհաջողվեց
Պարամետրեր:
- peer_addr: հասակակից MAC հասցե
- տվյալներ. ուղարկվող տվյալներ
- len: տվյալների երկարությունը
Նկարագրություն:
Ուղարկեք ESPNOW տվյալները: Որոշ դեպքերում դա տեղի է ունենում.
- Եթե peer_addr- ը NULL չէ, ուղարկեք տվյալներ այն հասակակիցին, ում MAC հասցեն համընկնում է peer_addr- ի հետ
- Եթե peer_addr- ը NULL է, ուղարկեք տվյալներ բոլոր այն հասակակիցներին, որոնք ավելացված են հավասարի ցուցակում
- Տվյալների առավելագույն երկարությունը պետք է լինի ESP_NOW_MAX_DATA_LEN- ից պակաս
- Տվյալների փաստարկով մատնանշված բուֆերը պետք չէ վավեր լինել esp_now_send վերադարձից հետո
int esp_now_register_recv_cb (cb)
Վերադարձնում է `
- 1 = Հաջողություն
- 0 = Չհաջողվեց
Պարամետրեր:
-
cb: ESPNOW տվյալներ ստանալու համար հետ կանչելու գործառույթ
-
անվավեր cb (const uint8_t *mac_addr, const uint8_t *տվյալներ, int data_len)
-
mac_addr:
ստացողի mac հասցեն
-
*տվյալներ:
տվյալների ստացում
-
data_len
տվյալների բայթ երկարությունը
-
-
Նկարագրություն:
ESPNOW տվյալները ստանալուց հետո զանգահարեք cb գործառույթը
Քայլ 5. Միակողմանի հաղորդակցություն (ESP32 որպես ուղարկող)
ESP32- ը տվյալներ է ուղարկում ESP8266- ին: այս ծածկագրով: Փոխեք broadcastAddress - ը ձեր համապատասխան ստացողի Mac հասցեին: Իմը A4 էր: CF: 12: C7: 9C: 77
// Ավելացնել անհրաժեշտ գրադարաններ
#include // esp այժմ գործառույթները #include // Ավելացնելու WIFI հնարավորություններ ESP32- ում // պահելու համար MAC հասցեն մի հեռարձակման անունը, որը կրում է broadcastAddress; uint8_t հեռարձակումՀասցե = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // Իմ ստացողի MAC հասցեն/*սահմանում է կառուցված և փոփոխված բազմաթիվ փոփոխականների տվյալների տեսակները `դրանք կառուցված_փոստով*/typedef struct struct_message {char a [32]; int բ; բոց c; Լարային դ; bool e; } struct_message; // Ստեղծել struct_message կոչվող myData struct_message myData; // գործառույթը, որը կոչվում է, երբ տվյալները ուղարկվում են ՝ տպելու համար իր անվավեր OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t կարգավիճակ) {Serial.print ("\ r / n Վերջին փաթեթի ուղարկման կարգավիճակը ՝ / t"); Serial.println (կարգավիճակ == ESP_NOW_SEND_SUCCESS? "Առաքման հաջողություն". "Առաքումը ձախողվեց"); } void setup () {// Սահմանեք baud փոխարժեքը սերիական հաղորդակցության համար ESP Serial.begin (115200); // Սարքը սահմանել որպես Wi-Fi Station WiFi.mode (WIFI_STA); // Գործարկում է wifi // Init ESP-NOW և վերադարձնում է իր կարգավիճակը, եթե (esp_now_init ()! = ESP_OK) {Serial.println ("ESP- ի սկզբնական սխալ -ՀԻՄԱ »); վերադարձ; } // զանգահարեք OnDataSent գործառույթին ESPNOW տվյալներ ուղարկելուց հետո esp_now_register_send_cb (OnDataSent); // գրանցել peer esp_now_peer_info_t peerInfo; // նախաստորագրել և գործընկերների մասին տեղեկությունները որպես ցուցիչ նշանակել հասցեատերերի հիշատակին (peerInfo.peer_addr, broadcastAddress, 6); // պատճենել transmetAddress- ի արժեքը 6 բայթով peerInfo.peer_addr peerInfo.channel = 0; // ալիք, որտեղ esp- ը խոսում է: 0 նշանակում է չսահմանված, և տվյալները կուղարկվեն ընթացիկ ալիքով: 1-14-ը վավեր ալիքներ են, ինչը նույնն է տեղական սարքի հետ peerInfo.encrypt = false; // կոդավորված չէ // Ավելացրեք սարքը զուգված սարքերի ցանկին, եթե (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Չհաջողվեց ավելացնել հասակակիցը"); վերադարձ; }} void loop () {// Սահմանել արժեքներ strcpy ուղարկելու համար (myData.a, "THIS IS A CHAR"); // պահպանել «THIS IS A CHAR» - ը փոփոխել իմ myData.b- ի ավելի վաղ սահմանված «տվյալները»: b = պատահական (1, 20); // փրկել պատահական արժեքը myData.c = 1.2; // պահպանել float myData.d = "Բարև"; // պահպանել տող myData.e = false; // պահպանել bool // ESP-NOW- ի միջոցով 250 բայթից պակաս կամ հավասար տվյալներ ուղարկել և վերադարձնել իր կարգավիճակը esp_err_t result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (արդյունք == ESP_OK) {Serial.println ("Ուղարկված է հաջողությամբ"); } else {Serial.println ("Տվյալների ուղարկման սխալ"); } ուշացում (2000); }
ESP8266- ը տվյալներ է ստանում ESP32- ից `օգտագործելով այս ծածկագիրը:
// Ավելացնել անհրաժեշտ գրադարաններ
#include // ESP32- ում Wifi հնարավորություններ ավելացնելու համար #ներառել // esp- ի այժմ մուտք գործելու համար գործառույթները**սահմանում են կառուցված և վերանվանված բազմաթիվ փոփոխականների տվյալների տեսակները `դրանք կառուցված_հաղորդագրություն* /typedef struct struct_message {char a [32]; int բ; բոց c; Լարային դ; bool e; } struct_message; // Ստեղծել փոփոխական struct_message կոչվող myData struct_message myData; // գործառույթը կոչվում է, երբ տվյալները ստացվում են և տպում դրանք անվավեր OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print («Ստացված բայթերը»); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Լող."); Serial.println (myData.c); Serial.print ("Լար."); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// Սահմանել baud փոխարժեքը սերիական հաղորդակցության համար ESP Serial.begin (115200); // Սարքը սահմանել որպես Wi-Fi Station WiFi.mode (WIFI_STA); // Սկսում է wifi- ն // Init ESP-NOW և վերադարձնում է իր կարգավիճակը, եթե (esp_now_init ()! = 0) {Serial.println ("Սխալ ESP-NOW նախաստորագրման սխալ"); վերադարձ; } esp_now_set_self_role (ESP_NOW_ROLE_SLAVE); // Սահմանում է այս esp_now_register_recv_cb- ի դերը (OnDataRecv); // զանգահարեք OnDataRecv գործառույթին ESPNOW տվյալների ստացումից հետո} void loop () {}
Քայլ 6. Միակողմանի հաղորդակցություն (ESP8266 որպես ուղարկող)
ESP8266- ը տվյալներ է ուղարկում ESP32- ին: այս ծածկագրով: Փոխեք broadcastAddress - ը ձեր համապատասխան ստացողի Mac հասցեին: Իմ esp32 հասցեն 30 է ՝ AE: A4: F5: 03: A4: Esp8266- ի այլ գործառույթների համար անցեք այստեղ
// Ավելացնել անհրաժեշտ գրադարաններ
#ներառել // ESP32- ում Wifi հնարավորություններ ավելացնելու համար #ներառել // esp այժմ գործառույթներին մուտք գործելու համար // պահել MAC հասցեն broadcastAddress անունով զանգվածում; uint8_t հեռարձակման հասցե = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*սահմանել համակարգված և փոփոխված բազմաթիվ փոփոխականների տվյալների տեսակները ՝ դրանք կառուցված_հաղորդագրություն*/ typedef struct struct_message {char a [32]; int բ; բոց c; Լարային դ; bool e; } struct_message; // Ստեղծել կառուցվածքային փոփոխական, որը կոչվում է myData struct_message myData; // գործառույթը կանչվում է, երբ տվյալները ուղարկվում են և տպում նրա կարգավիճակը անվավեր OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / n Վերջին փաթեթի ուղարկման կարգավիճակը ՝ / t"); Serial.println (sendStatus == 1? "Առաքման հաջողություն". "Առաքումը ձախողվել է"); } void setup () {// Սահմանեք baud փոխարժեքը սերիական հաղորդակցության համար ESP Serial.begin (115200); // Սարքը սահմանել որպես Wi-Fi Station WiFi.mode (WIFI_STA); // Գործարկում է wifi // Init ESP-NOW և վերադարձնում է իր կարգավիճակը, եթե (esp_now_init ()) {Serial.println ("ESP-NOW"); վերադարձ; } esp_now_register_send_cb (OnDataSent); // զանգահարեք OnDataSent գործառույթը ESPNOW տվյալներ ուղարկելուց հետո // Սարքը ավելացրեք զույգացված սարքերի ցանկին, եթե (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)) {Serial.println ("Չհաջողվեց ավելացնել հասակակիցը"); վերադարձ; }} void loop () {// Սահմանել արժեքներ strcpy ուղարկելու համար (myData.a, "THIS IS A CHAR"); // պահպանել «THIS IS A CHAR» - ը `իմ« տվյալների »ավելի վաղ սահմանված myData.b = պատահական (1, 20); // փրկել պատահական արժեք myData.c = 1.2; // պահպանել float myData.d = "SP8266"; // պահպանել տող myData.e = false; // պահպանել bool // ESP-NOW- ի միջոցով 250 բայթից պակաս կամ հավասար տվյալներ ուղարկել և վերադարձնել իր կարգավիճակը int result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (esp_now_init ()! = 0) {Serial.println («Ուղարկված է հաջողությամբ»); } else {Serial.println ("Տվյալների ուղարկման սխալ"); } ուշացում (2000); }
ESP32- ը տվյալներ է ստանում ESP8266- ից: այս ծածկագրով: Այլ գործառույթների համար հղում կատարեք այստեղ
// Ավելացնել անհրաժեշտ գրադարաններ
#include // ESP32 գործառույթներ մուտք գործելու համար #ներառել // ESP32- ում Wifi հնարավորություններ ավելացնելու համար**սահմանել համակարգված և փոփոխված բազմաթիվ փոփոխականների տվյալների տեսակները ՝ դրանք կառուցված_փոստով* /typedef struct struct_message {char a [32]; int բ; բոց c; Լարային դ; bool e; } struct_message; // Ստեղծել փոփոխական struct_message կոչվող myData struct_message myData; // գործառույթը կոչվում է, երբ տվյալները ստացվում են և տպում դրանք անվավեր OnDataRecv (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData))); Serial.print («Ստացված բայթերը»); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Լող."); Serial.println (myData.c); Serial.print ("Լար:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// Սահմանել baud փոխարժեքը սերիական հաղորդակցության համար ESP Serial.begin (115200); // Սարքը սահմանել որպես Wi-Fi Station WiFi.mode (WIFI_STA); // Գործարկում է wifi- ն // Init ESP-NOW և վերադարձնում է իր կարգավիճակը, եթե (esp_now_init ()! = 0) {Serial.println ("ESP-NOW սկզբնական սխալ"); վերադարձ; } esp_now_register_recv_cb (OnDataRecv); // զանգահարեք OnDataRecv գործառույթին ESPNOW տվյալների ստացումից հետո} void loop () {}
Քայլ 7: ԵՐԿՈAY ՀԵMMԻՆԱԿՈԹՅՈՆ
![ԵՐԿՈAY ԱՆԱՊԱՐՀՈԹՅՈՆ ԵՐԿՈAY ԱՆԱՊԱՐՀՈԹՅՈՆ](https://i.howwhatproduce.com/images/007/image-19714-4-j.webp)
![ԵՐԿՈAY ԱՆԱՊԱՐՀՈԹՅՈՆ ԵՐԿՈAY ԱՆԱՊԱՐՀՈԹՅՈՆ](https://i.howwhatproduce.com/images/007/image-19714-5-j.webp)
ESP32- ը գործարկման մասին տվյալներ է ուղարկում ESP8266- ին: ESP8266- ը տպում է ստացված հաղորդագրությունը, այնուհետև դրա պատասխանները ESP32- ը տպում է իր սերիական մոնիտորի վրա:
ESP32 ԿՈԴ
// Ավելացնել անհրաժեշտ գրադարաններ
#include // esp- ի գործառույթները մուտք գործելու համար #include // ESP32- ում Wifi հնարավորություններ ավելացնելու համար // պահեք MAC հասցեն broadcastAddress անունով զանգվածում; uint8_t հեռարձակումՀասցե = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // Իմ ստացողի MAC հասցեն/*սահմանում է կառուցված և փոփոխված բազմաթիվ փոփոխականների տվյալների տեսակները `դրանք կառուցված_փոստով*/typedef struct struct_message {char a [32]; int բ; բոց c; Լարային դ; bool e; } struct_message; // Ստեղծել struct_message կոչվող myData struct_message myData; // գործառույթը, որը կոչվում է, երբ տվյալները ուղարկվում են ՝ տպելու համար իր անվավեր OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t կարգավիճակ) {Serial.print ("\ r / n Վերջին փաթեթի ուղարկման կարգավիճակը ՝ / t"); Serial.println (կարգավիճակ == ESP_NOW_SEND_SUCCESS? "Առաքման հաջողություն". "Առաքումը ձախողվեց"); if (կարգավիճակ! = ESP_NOW_SEND_SUCCESS) {send_data ();}} անվավեր OnDataRecv (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData))); Serial.print («Ստացված բայթերը»); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Լող."); Serial.println (myData.c); Serial.print ("Լար:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// Սահմանել baud փոխարժեքը սերիական հաղորդակցության համար ESP Serial.begin (115200); // Սարքը սահմանել որպես Wi-Fi Station WiFi.mode (WIFI_STA); // Գործարկում է wifi // Init ESP-NOW և վերադարձնում է իր կարգավիճակը, եթե (esp_now_init ()! = ESP_OK) {Serial.println ("ESP- ի սկզբնական սխալ -ՀԻՄԱ »); վերադարձ; } // զանգահարեք OnDataSent գործառույթին ESPNOW տվյալներ ուղարկելուց հետո esp_now_register_send_cb (OnDataSent); // գրանցել peer esp_now_peer_info_t peerInfo; // նախաստորագրել և գործընկերների մասին տեղեկությունները որպես ցուցիչ նշանակել հասցեատերերի հիշատակին (peerInfo.peer_addr, broadcastAddress, 6); // պատճենել transmetAddress- ի արժեքը 6 բայթով peerInfo.peer_addr peerInfo.channel = 0; // ալիք, որտեղ esp- ը խոսում է: 0 նշանակում է չսահմանված, և տվյալները կուղարկվեն ընթացիկ ալիքով:1-14-ը վավեր ալիքներ են, ինչը նույնն է տեղական սարքի հետ peerInfo.encrypt = false; // կոդավորված չէ // Ավելացրեք սարքը զուգված սարքերի ցանկին, եթե (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Չհաջողվեց ավելացնել հասակակիցը"); վերադարձ; } esp_now_register_recv_cb (OnDataRecv); // զանգահարեք OnDataRecv գործառույթին ESPNOW տվյալների ուղարկվելուց հետո send_data (); } void loop () {} void send_data () {Serial.println («Ուղարկում»); // Սահմանեք արժեքներ strcpy ուղարկելու համար (myData.a, "THIS IS A CHAR"); // պահպանել «THIS IS A CHAR» - ը `իմ« տվյալների »ավելի վաղ սահմանված myData.b = պատահական (1, 20); // փրկել պատահական արժեք myData.c = 1.2; // պահպանել float myData.d = "ESP32"; // պահպանել տող myData.e = false; // պահպանել bool // ESP-NOW- ի միջոցով 250 բայթից պակաս կամ հավասար տվյալներ ուղարկել և վերադարձնել իր կարգավիճակը esp_err_t result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (արդյունք == ESP_OK) {Serial.println ("Ուղարկված է հաջողությամբ");} else {Serial.println ("Տվյալների ուղարկման սխալ"); }}
ESP8266 ԿՈԴ
// Ավելացնել անհրաժեշտ գրադարաններ
#ներառել // ESP32- ում Wifi հնարավորություններ ավելացնելու համար #ներառել // esp այժմ գործառույթներին մուտք գործելու համար // պահել MAC հասցեն broadcastAddress անունով զանգվածում; uint8_t հեռարձակման հասցե = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*սահմանել համակարգված և փոփոխված բազմաթիվ փոփոխականների տվյալների տեսակները ՝ դրանք կառուցված_հաղորդագրություն*/ typedef struct struct_message {char a [32]; int բ; բոց c; Լարային դ; bool e; } struct_message; // Ստեղծել փոփոխական struct_message կոչվող myData struct_message myData; // գործառույթը կոչվում է, երբ տվյալները ստացվում են և տպում դրանք անվավեր OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print («Ստացված բայթերը»); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Լող."); Serial.println (myData.c); Serial.print ("Լար:"); 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 / n Վերջին փաթեթի ուղարկման կարգավիճակը ՝ / t"); Serial.println (sendStatus == 1? "Առաքման հաջողություն". "Առաքումը ձախողվել է"); եթե (sendStatus! = 1) {send_data (); }} void send_data () {// Սահմանել արժեքներ strcpy ուղարկելու համար (myData.a, "THIS IS CHAR"); // պահպանել «THIS IS A CHAR» - ը `իմ« տվյալների »ավելի վաղ սահմանված myData.b = պատահական (1, 20); // փրկել պատահական արժեք myData.c = 1.2; // պահպանել float myData.d = "ESP8266"; // պահպանել տող myData.e = false; // պահպանել bool esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); } void setup () {// Սահմանել baud փոխարժեքը սերիական հաղորդակցության համար ESP Serial.begin (115200); // Սարքը սահմանել որպես Wi-Fi Station WiFi.mode (WIFI_STA); // Գործարկում է wifi- ն // Init ESP-NOW և վերադարձնում է իր կարգավիճակը, եթե (esp_now_init ()! = 0) {Serial.println ("ESP-NOW սկզբնական սխալ"); վերադարձ; } if (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)) {Serial.println ("Չհաջողվեց ավելացնել հավասարը"); վերադարձ; } esp_now_set_self_role (ESP_NOW_ROLE_COMBO); esp_now_register_send_cb (OnDataSent); esp_now_set_self_role (ESP_NOW_ROLE_COMBO); // Սահմանում է այս esp_now_register_recv_cb- ի դերը (OnDataRecv); // զանգահարեք OnDataRecv գործառույթին ESPNOW տվյալների ստացումից հետո} void loop () {}
Քայլ 8. Հղումներ
ESPNOW_32_ Օրինակ
ESPNOW_8266 Օրինակ
WIFI.h
ESP8266WiFi.h
esp_now.h ESP8266- ի համար
esp_now.h ESP32- ի համար
esp_now պաշտոնական փաստաթուղթ (գործառույթների ավելի լավ բացատրություն)
ESP-NOW Պաշտոնական ուղեցույց
Խորհուրդ ենք տալիս:
Ինչպես կարդալ բազմաթիվ անալոգային արժեքներ ՝ օգտագործելով մեկ անալոգային քորոց. 6 քայլ (նկարներով)
![Ինչպես կարդալ բազմաթիվ անալոգային արժեքներ ՝ օգտագործելով մեկ անալոգային քորոց. 6 քայլ (նկարներով) Ինչպես կարդալ բազմաթիվ անալոգային արժեքներ ՝ օգտագործելով մեկ անալոգային քորոց. 6 քայլ (նկարներով)](https://i.howwhatproduce.com/images/002/image-3465-5-j.webp)
Ինչպես կարդալ բազմաթիվ անալոգային արժեքներ ՝ օգտագործելով մեկ անալոգային քորոց: Այս ձեռնարկում ես ձեզ ցույց կտամ, թե ինչպես կարդալ բազմաթիվ անալոգային արժեքներ ՝ օգտագործելով միայն մեկ անալոգային մուտքի քորոց:
Ինչպես կատարել WiFi անջատիչ ՝ օգտագործելով ESP8266: 5 քայլ
![Ինչպես կատարել WiFi անջատիչ ՝ օգտագործելով ESP8266: 5 քայլ Ինչպես կատարել WiFi անջատիչ ՝ օգտագործելով ESP8266: 5 քայլ](https://i.howwhatproduce.com/images/009/image-25276-j.webp)
Ինչպես կատարել WiFi անջատիչ ESP8266- ի միջոցով. Այս ձեռնարկում ես ձեզ ցույց կտամ, թե ինչպես կատարել լարերի անջատիչ ESP8266- ի միջոցով: կապի միջոցները, որոնք ես կօգտագործեմ, WiFi ցանց է: Նախորդ ձեռնարկում ես քննարկեցի WiFi ցանցի միջոցով ESP8266- ի օգտագործման համար օգտագործելու մասին: Դուք կարող եք կարդալ սա
Ինչպես կատարել IoT սարք ՝ վերահսկելու տեխնիկան և վերահսկելու եղանակը ՝ օգտագործելով Esp8266: 5 քայլ
![Ինչպես կատարել IoT սարք ՝ վերահսկելու տեխնիկան և վերահսկելու եղանակը ՝ օգտագործելով Esp8266: 5 քայլ Ինչպես կատարել IoT սարք ՝ վերահսկելու տեխնիկան և վերահսկելու եղանակը ՝ օգտագործելով Esp8266: 5 քայլ](https://i.howwhatproduce.com/images/003/image-6806-12-j.webp)
Ինչպես պատրաստել IoT սարք ՝ սարքերը վերահսկելու և եղանակը վերահսկելու համար ՝ օգտագործելով Esp8266- ը: Իրերի ինտերնետը (IoT) ֆիզիկական սարքերի (ինչպես նաև «միացված սարքեր» և «խելացի սարքեր») շենքերի փոխկապակցումն է: և այլ իրեր և mdash; ներկառուցված էլեկտրոնիկայի, ծրագրակազմի, տվիչների, գործարկիչների և
Քայլ Servo շարժիչը սերիական հսկողության միջոցով Arduino- ի միջոցով օգտագործելով 3D տպիչ - Pt4: 8 քայլ
![Քայլ Servo շարժիչը սերիական հսկողության միջոցով Arduino- ի միջոցով օգտագործելով 3D տպիչ - Pt4: 8 քայլ Քայլ Servo շարժիչը սերիական հսկողության միջոցով Arduino- ի միջոցով օգտագործելով 3D տպիչ - Pt4: 8 քայլ](https://i.howwhatproduce.com/images/002/image-3317-43-j.webp)
Arduino- ի միջոցով եռաչափ տպիչի միջոցով Step Servo Motor- ի սերիական կառավարում - Pt4. Motor Step շարքի այս չորրորդ տեսանյութում մենք կօգտագործենք այն, ինչ սովորել էինք նախկինում սերիական հաղորդակցության և իրական վերահսկողության միջոցով stepper servo շարժիչ կառուցելու համար: դիրքի հետադարձ կապ ՝ օգտագործելով դիմադրիչ կոդավորիչ, որը վերահսկվում է Arduino- ի կողմից:
IPhone- ից տեքստային հաղորդագրություններ կամ IMessages խոսակցություններ տպելու ամենահեշտ եղանակները ՝ 3 քայլ
![IPhone- ից տեքստային հաղորդագրություններ կամ IMessages խոսակցություններ տպելու ամենահեշտ եղանակները ՝ 3 քայլ IPhone- ից տեքստային հաղորդագրություններ կամ IMessages խոսակցություններ տպելու ամենահեշտ եղանակները ՝ 3 քայլ](https://i.howwhatproduce.com/images/001/image-2113-56-j.webp)
IPhone- ից տեքստային հաղորդագրություններ կամ IMessages խոսակցություններ տպելու ամենահեշտ եղանակները. Բարև բոլորին, այս հրահանգով ես ձեզ ցույց կտամ ձեր iPhone- ից տեքստային հաղորդագրություններ տպելու մի քանի ամենահեշտ եղանակները: Այսպիսով, մեր կյանքում այժմ ստացվող կարևոր հաղորդագրություններից շատերը ոչ թե նամակով, կամ նույնիսկ էլփոստով, այլ փոխարենը տեքստով