Բովանդակություն:

Ինչպես կատարել բազմաթիվ ESP խոսակցություններ ESP-NOW- ի միջոցով `օգտագործելով ESP32 և ESP8266: 8 քայլ
Ինչպես կատարել բազմաթիվ ESP խոսակցություններ ESP-NOW- ի միջոցով `օգտագործելով ESP32 և ESP8266: 8 քայլ

Video: Ինչպես կատարել բազմաթիվ ESP խոսակցություններ ESP-NOW- ի միջոցով `օգտագործելով ESP32 և ESP8266: 8 քայլ

Video: Ինչպես կատարել բազմաթիվ ESP խոսակցություններ ESP-NOW- ի միջոցով `օգտագործելով ESP32 և ESP8266: 8 քայլ
Video: ESP32 Tutorial 4 - Data types Define Variable Int, bool, char, Serial Monitor-ESP32 IoT Learnig kit 2024, Հուլիսի
Anonim
Ինչպես կատարել բազմաթիվ ESP խոսակցություններ ESP-NOW- ի միջոցով `օգտագործելով ESP32 և ESP8266
Ինչպես կատարել բազմաթիվ ESP խոսակցություններ ESP-NOW- ի միջոցով `օգտագործելով ESP32 և ESP8266

Իմ ընթացիկ նախագծում ինձ պետք է բազմաթիվ ESP ՝ առանց երթուղիչի միմյանց հետ խոսելու համար: Դա անելու համար ես ESP-NOW- ով կօգտագործեմ անլար հաղորդակցություն միմյանց հետ առանց ESP- ի երթուղղիչի:

Պարագաներ

Իմ օգտագործած բաները.

ESP32 DEV մոդուլ

NODEMCU 1.0 (ESP12E մոդուլ)

Քայլ 1: Ստացեք խորհրդի Mac հասցեն

Ստացեք խորհրդի Mac հասցեն
Ստացեք խորհրդի Mac հասցեն
Ստացեք խորհրդի Mac հասցեն
Ստացեք խորհրդի Mac հասցեն

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- ի աշխատանքը

Ահա ակնարկ, թե ինչպես այն դարձնել աշխատելու.

  1. Ներառեք esp այժմ և wifi գրադարաններ
  2. Պահպանեք ստացողի ESP- ի mac հասցեն
  3. Սահմանեք ուղարկված/ստացված հաղորդագրության տվյալների կառուցվածքը
  4. Կարգավորման ընթացքում Wi -Fi- ը միացրեք կայանի ռեժիմին
  5. Նախնականացնել esp_now- ը
  6. կատարել և գրանցել տվյալների ուղարկումից և ստանալուց հետո կանչված հետադարձ գործառույթը
  7. Esp8266- ի համար սահմանեք դրա դերը
  8. գրանցել հասակակիցը կամ ստացողը esp
  9. Տվյալներ ուղարկեք

Քայլ 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 ԱՆԱՊԱՐՀՈԹՅՈՆ
ԵՐԿՈAY ԱՆԱՊԱՐՀՈԹՅՈՆ
ԵՐԿՈAY ԱՆԱՊԱՐՀՈԹՅՈՆ

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 Պաշտոնական ուղեցույց

Խորհուրդ ենք տալիս: