Mündəricat:

ESP32 və ESP8266 istifadə edərək ESP-NOW vasitəsilə birdən çox ESP Söhbəti necə aparılır: 8 addım
ESP32 və ESP8266 istifadə edərək ESP-NOW vasitəsilə birdən çox ESP Söhbəti necə aparılır: 8 addım

Video: ESP32 və ESP8266 istifadə edərək ESP-NOW vasitəsilə birdən çox ESP Söhbəti necə aparılır: 8 addım

Video: ESP32 və ESP8266 istifadə edərək ESP-NOW vasitəsilə birdən çox ESP Söhbəti necə aparılır: 8 addım
Video: ESP32, WLED mikroproqramında ünvanlanan LED-lərə nəzarət edirik, Home Assistant-da istifadə edirik 2024, Iyul
Anonim
ESP32 və ESP8266 istifadə edərək ESP-NOW vasitəsilə birdən çox ESP Söhbətini Necə Etmək olar
ESP32 və ESP8266 istifadə edərək ESP-NOW vasitəsilə birdən çox ESP Söhbətini Necə Etmək olar

Davam edən layihəmdə, router olmadan bir -birimizlə danışmaq üçün birdən çox ESP lazımdır. Bunu etmək üçün, ESP-də bir router olmadan bir-birimizlə simsiz əlaqə qurmaq üçün ESP-NOW istifadə edəcəyəm.

Təchizat

İstifadə etdiyim şeylər:

ESP32 DEV modulu

NODEMCU 1.0 (ESP12E Modulu)

Addım 1: Board Mac ünvanını əldə edin

Board Mac ünvanını əldə edin
Board Mac ünvanını əldə edin
Board Mac ünvanını əldə edin
Board Mac ünvanını əldə edin

ESP-now vasitəsi ilə, ESP cihazları, özəl ünvanına məlumat göndərməklə bir-biriylə danışır və eyni zamanda esp-in intilizasiyasına əsaslanan daxili giriş nöqtəsi şəbəkəsinə qoşulur.. Beləliklə, hər cihazın MAC ünvanını təyin edin. ESP32 və ESP8266 lövhə parametrlərimə əlavə olunur

ESP32 üçün

#"WiFi.h" daxil edin // ESP32 WIFI imkanlarına daxil olmaq üçün

void setup () {Serial.begin (115200); Serial.print ("ESP32 Board MAC Ünvanı:"); Serial.println (WiFi.macAddress ()); // öz MAC ünvanını yazır} void loop () {}

ESP8266 üçün

#include // ESP8266 WIFI imkanlarına daxil olmaq üçün istifadə olunan kitabxana

void setup () {Serial.begin (115200); Serial.println (); Serial.print ("ESP8266 Board MAC Ünvanı:"); Serial.println (WiFi.macAddress ()); // öz MAC ünvanını yazır} void loop () {}

MAC adresim bunlardır:

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

Addım 2: ESP-NOW-u necə işə salmaq olar

İşin necə aparılacağına dair ümumi bir fikir:

  1. İndi esp və wifi kitabxanalarını daxil edin
  2. Alıcının ESP -nin mac ünvanını qeyd edin
  3. Göndərilən/alınan mesajın məlumat quruluşunu təyin edin
  4. Quraşdırmada wifi stansiya rejiminə qoyun
  5. Esp_now -u işə salın
  6. məlumatları göndərdikdən və aldıqdan sonra çağırılan geri çağırma funksiyasını qeyd edin
  7. Esp8266 üçün rolunu təyin edin
  8. həmyaşıdını və ya alıcısını qeyd edin esp
  9. Məlumat göndərin

Addım 3: ESP-NOW FUNKSİYALARI (ESP32)

esp_now_init (etibarsız)

Qayıdış:

  • ESP_OK: uğur qazanın
  • ESP_ERR_ESPNOW_INTERNAL: Daxili xəta

Təsvir:

ESPNOW funksiyasını işə salın

esp_now_register_send_cb (cb)

Qayıdışlar:

  • ESP_OK: uğur qazanın
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW işə salınmır
  • ESP_ERR_ESPNOW_INTERNAL: daxili səhv

Parametrlər:

  • cb: bu parametrlərlə ESPNOW məlumatlarını göndərdikdən sonra geri çağırma funksiyası adı:

    • boş cb (const uint8_t *mac_addr, esp_now_send_status_t statusu)

      • mac_addr: alıcının mac ünvanı
      • status:

        • 1 = uğur
        • 0 = uğursuz

Təsvir:

ESPNOW məlumatlarını göndərdikdən sonra OnDataSent funksiyasına zəng edin

esp_now_add_peerconst esp_now_peer_info_t *peer)

Qayıdışlar:

  • ESP_OK: uğur qazanın
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW işə salınmır
  • ESP_ERR_ESPNOW_ARG: etibarsız arqument
  • ESP_ERR_ESPNOW_FULL: həmyaşıdların siyahısı doludur
  • ESP_ERR_ESPNOW_NO_MEM: yaddaş bitib
  • ESP_ERR_ESPNOW_EXIST: peer mövcuddur

Parametrlər:

  • peer: peer məlumatları aşağıdakı məlumatlarla:

    • uint8_t

      peer_addr [ESP_NOW_ETH_ALEN]; ESPNOW peer MAC ünvanı, eyni zamanda stansiyanın və ya proqramın MAC ünvanıdır

    • uint8_t lmk [ESP_NOW_KEY_LEN]

      ESPNOW, məlumatları şifrələmək üçün istifadə olunan yerli master açarıdır

    • uint8_t kanalı

      ESPNOW məlumatlarını göndərmək/almaq üçün həmyaşıdlarının istifadə etdiyi Wi-Fi kanalı. Dəyər 0 olarsa, stansiyanın və ya proqramın işlədiyi kanaldan istifadə edin. Əks təqdirdə, stansiyanın və ya proqramın işlədiyi kanal olaraq təyin olunmalıdır

    • wifi_interface_t ifidx

      ESPNOW məlumatlarını göndərmək/almaq üçün həmyaşıdlarının istifadə etdiyi Wi-Fi interfeysi

    • bool şifrələyin

      Bu həmyaşıdının göndərdiyi/aldığı ESPNOW məlumatları şifrələnir və ya şifrələnmir

    • void *şəxsi

      Şəxsi məlumatları nəzərdən keçirin

Təsvir:

Həmyaşıdlar siyahısına həmyaşıd əlavə edin

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

Qayıdışlar:

  • ESP_OK: uğur qazanın
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW işə salınmır
  • ESP_ERR_ESPNOW_ARG: etibarsız arqument
  • ESP_ERR_ESPNOW_INTERNAL: daxili səhv
  • ESP_ERR_ESPNOW_NO_MEM: yaddaş bitib
  • ESP_ERR_ESPNOW_NOT_FOUND: peer tapılmadı
  • ESP_ERR_ESPNOW_IF: mövcud WiFi interfeysi həmyaşıdları ilə uyğun gəlmir

Parametrlər:

  • peer_addr: peer MAC ünvanı
  • məlumat: göndəriləcək məlumatlar
  • len: məlumatların uzunluğu

Təsvir:

ESPNOW məlumatlarını göndərin. Bəzi hallarda bu baş verir:

  • Peer_addr NULL deyilsə, MAC ünvanı peer_addr ilə uyğun olan həmyaşıdına məlumat göndərin
  • Peer_addr NULL olarsa, məlumatları siyahıya əlavə olunan bütün həmyaşıdlarına göndərin
  • Maksimum məlumat uzunluğu ESP_NOW_MAX_DATA_LEN -dən az olmalıdır
  • Məlumat arqumentinin göstərdiyi tamponun esp_now_send qaytarılmasından sonra etibarlı olmasına ehtiyac yoxdur

esp_now_register_recv_cb (cb)

Qayıdışlar:

  • ESP_OK: uğur qazanın
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW işə salınmır
  • ESP_ERR_ESPNOW_INTERNAL: daxili xəta

Parametrlər:

  • cb: ESPNOW məlumatlarını qəbul etmək üçün geri çağırma funksiyası

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

      • mac_addr:

        alıcının mac ünvanı

      • *məlumat:

        məlumatların qəbulu

      • data_len

        məlumat bayt uzunluğu

Təsvir:

ESPNOW məlumatlarını aldıqdan sonra cb funksiyasına zəng edin

Addım 4: ESP-NOW FUNKSİYALARI (ESP8266)

FUNKSİYALARIN TƏSVİRİ ESP32 ESP8266

int esp_now_init (boş)

Qayıdışlar:

  • 1 = uğur
  • 0 = uğursuz

Təsvir

ESPNOW funksiyasını işə salın

int esp_now_set_self_role (u8 rolu)

Parametrlər:

  • ESP_NOW_ROLE_IDLE: məlumat ötürülməsinə icazə verilmir.
  • ESP_NOW_ROLE_CONTROLLER: Sation interfeysinə üstünlük verilir
  • ESP_NOW_ROLE_SLAVE: prioritet SoftAP interfeysinə verilir
  • ESP_NOW_ROLE_COMBO: SoftAPinterface -ə üstünlük verilir

Təsvir

Cihazın Rolunu təyin edir

int esp_now_register_send_cb (cb)

Qayıdışlar:

  • 1 = uğur
  • 0 = uğursuz

Parametrlər:

  • cb: bu parametrlərlə ESPNOW məlumatlarını göndərdikdən sonra geri çağırma funksiyası adı:

    • boş cb (const uint8_t *mac_addr, esp_now_send_status_t statusu)

      • mac_addr: alıcının mac ünvanı
      • status:

        • 1 = uğur
        • 0 = uğursuz

Təsvir

ESPNOW məlumatlarını göndərdikdən sonra OnDataSent funksiyasına zəng edin

int esp_now_add_peer (u8 *mac_addr, u8 rolu, u8 kanalı, u8 *düyməsi, u8 key_len)

Qayıdışlar:

  • 1 = uğur
  • 0 = uğursuz

Parametrlər:

  • mac_addr

    həmyaşıdının mac ünvanı

  • rolu
  • kanal

    Dəyər 0 olarsa, stansiyanın və ya proqramın işlədiyi kanaldan istifadə edin. Əks təqdirdə, stansiyanın və ya proqramın işlədiyi kanal olaraq təyin olunmalıdır

  • *açar

    şifrələmə üçün açar

  • key_len

    açarın uzunluğu

Təsvir:

Həmyaşıdlar siyahısına həmyaşıd əlavə edin

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

Qayıdışlar:

  • 1 = Uğur
  • 0 = Uğursuz

Parametrlər:

  • peer_addr: peer MAC ünvanı
  • məlumat: göndəriləcək məlumatlar
  • len: məlumatların uzunluğu

Təsvir:

ESPNOW məlumatlarını göndərin. Bəzi hallarda bu baş verir:

  • Peer_addr NULL deyilsə, MAC ünvanı peer_addr ilə uyğun olan həmyaşıdına məlumat göndərin
  • Peer_addr NULL olarsa, məlumatları siyahıya əlavə olunan bütün həmyaşıdlarına göndərin
  • Maksimum məlumat uzunluğu ESP_NOW_MAX_DATA_LEN -dən az olmalıdır
  • Məlumat arqumentinin göstərdiyi tamponun esp_now_send qaytarılmasından sonra etibarlı olmasına ehtiyac yoxdur

int esp_now_register_recv_cb (cb)

Qayıdışlar:

  • 1 = Uğur
  • 0 = Uğursuz

Parametrlər:

  • cb: ESPNOW məlumatlarını qəbul etmək üçün geri çağırma funksiyası

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

      • mac_addr:

        alıcının mac ünvanı

      • *məlumat:

        məlumatların qəbulu

      • data_len

        məlumat bayt uzunluğu

Təsvir:

ESPNOW məlumatlarını aldıqdan sonra cb funksiyasına zəng edin

Addım 5: Bir Yönlü Əlaqə (Göndərən ESP32)

ESP32 məlumatları bir ESP8266 -ya göndərir. bu kodla. Yayım ünvanını düzəldici qəbuledicinizin mac ünvanına dəyişin. Mənimki A4: CF: 12: C7: 9C: 77 idi

// Lazımi kitabxanaları əlavə edin

#include // esp funksiyalarına daxil olmaq üçün #include // ESP32 -də Wifi İmkanları əlavə etmək üçün // MAC ünvanını yayınAddress adlı bir massivdə qeyd edin; uint8_t yayımAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // Alıcımın MAC ünvanı/*çoxsaylı dəyişənlərin məlumat növlərini qurdu və hamısını struct_message*/typedef struct struct_message {char a [32] olaraq dəyişdirdi; int b; üzmək c; String d; bool e; } struktur_message; // myData adlı bir struct_message yaradın struct_message myData; // statusu boş olan OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t status) çap etmək üçün məlumatlar göndərildikdə // funksiyası çağırılır {Serial.print ("\ r / nSon Paket Göndərmə Vəziyyəti: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Çatdırılma Müvəffəqiyyəti": "Çatdırılmadı"); } void setup () {// ESP Serial.begin (115200) ilə serial ünsiyyət üçün baud sürətini təyin edin; // Cihazı Wi-Fi Station WiFi.mode (WIFI_STA) olaraq təyin edin; // wifi-ni işə salır // ESP-NOW-ı işə salın və (esp_now_init ()! = ESP_OK) {Serial.println ("ESP-ni işə salmaqda səhv -İNDİ"); qayıtmaq; } // ESPNOW məlumatlarını esp_now_register_send_cb (OnDataSent) göndərdikdən sonra OnDataSent funksiyasına zəng edin; // peer esp_now_peer_info_t peerInfo -da qeydiyyatdan keçin; // həmyaşıd məlumatlarını bir addres memcpy üçün göstərici olaraq işə salın və təyin edin (peerInfo.peer_addr, yayımAddress, 6); // 6 baytlıq yayımAddress dəyərini peerInfo.peer_addr peerInfo.channel = 0 -a kopyalayın; // espin danışdığı kanal. 0, təyin olunmamış deməkdir və məlumatlar cari kanalda göndəriləcək. 1-14 yerli peerInfo.encrypt = false ilə eyni olan etibarlı kanallardır; // şifrələnməyib // Cihazı cütləşdirilmiş cihaz siyahısına əlavə edin, əgər (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Peer əlavə olunmadı"); qayıtmaq; }} void loop () {// Strcpy göndərmək üçün dəyərləri təyin edin (myData.a, "BU BİR CHARDIR"); // "THIS IS A CHAR" ı əvvəllər təyin etdiyim "data" dəyişəninə saxlamaq myData.b = təsadüfi (1, 20); // təsadüfi bir dəyər saxla myData.c = 1.2; // bir float saxlamaq myData.d = "Salam"; // bir sətir saxla myData.e = false; // bool saxlamaq // ESP-NOW vasitəsilə 250 baytdan az və ya bərabər məlumat göndərin və statusunu qaytarır esp_err_t result = esp_now_send (yayımAddress, (uint8_t *) & myData, sizeof (myData)); if (nəticə == ESP_OK) {Serial.println ("Uğurla göndərildi"); } başqa {Serial.println ("Məlumat göndərərkən xəta"); } gecikmə (2000); }

ESP8266 bu kodu istifadə edərək ESP32 -dən məlumat alır.

// Lazımi kitabxanaları əlavə edin

#include // ESP32 -də Wifi İmkanları Əlavə etmək üçün #include // esp -ə daxil olmaq üçün artıq funksiyaları yerinə yetirmək üçün**strukturlaşdırılmış və hamısını struct_message* /typedef struct struct_message {char a [32] olaraq adlandırmaqla çoxlu dəyişənlərin məlumat növlərini təyin etmək; int b; üzmək c; String d; bool e; } struktur_message; // myData adlı bir dəyişən struct_message yaradın struct_message myData; // məlumat alındıqda və onu çap edəndə çağırılan funksiya OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Baytlar alındı:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Üzmək:"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// ESP Serial.begin (115200) ilə ardıcıl ünsiyyət üçün baud sürətini təyin edin; // Cihazı Wi-Fi Station WiFi.mode (WIFI_STA) olaraq təyin edin; // wifi-ni işə salır // ESP-NOW-ı işə salın və əgər vəziyyətini qaytararsa (esp_now_init ()! = 0) {Serial.println ("ESP-NOW başlatma xətası"); qayıtmaq; } esp_now_set_self_role (ESP_NOW_ROLE_SLAVE); // Bu esp esp_now_register_recv_cb (OnDataRecv) rolunu müəyyən edir; // ESPNOW məlumatlarını aldıqdan sonra OnDataRecv funksiyasına zəng edin} void loop () {}

Addım 6: Bir Yönlü Əlaqə (ESP8266 Göndərən Olaraq)

ESP8266 məlumatları bir ESP32 -ə göndərir. bu kodla. Yayım ünvanını düzəldici qəbuledicinizin mac ünvanına dəyişin. Mənim esp32 ünvanım 30: AE: A4: F5: 03: A4. Esp8266 üçün digər funksiyalar üçün bura daxil olun

// Lazımi kitabxanaları əlavə edin

#include // ESP32 -də Wifi İmkanlarını Əlavə etmək üçün #include // esp -in indi funksiyalarına daxil olmaq üçün // MAC ünvanını yayınAddress adlı bir massivdə qeyd edin; uint8_t yayımAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*çoxsaylı dəyişənlərin məlumat növlərini qurmaq və hamısını struct_message adlandırmaq*/ typedef struct struct_message {char a [32]; int b; üzmək c; String d; bool e; } struktur_message; // myData adlı strukturlaşdırılmış bir dəyişən yaradın struct_message myData; // məlumat göndərildikdə və statusunun boş olduğu OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) çap edildikdə // funksiyası çağırılır {Serial.print ("\ r / nSon Paket Göndərmə Vəziyyəti: / t"); Serial.println (sendStatus == 1? "Çatdırılma Müvəffəqiyyəti": "Çatdırılmadı"); } void setup () {// ESP Serial.begin (115200) ilə ardıcıl ünsiyyət üçün baud sürətini təyin edin; // Cihazı Wi-Fi Stansiyası WiFi.mode (WIFI_STA) olaraq təyin edin; // wifi-ni işə salır // ESP-NOW-ı işə salın və (esp_now_init ()) {Serial.println ("ESP-NOW başlatma xətası") olduqda statusunu qaytarır.); qayıtmaq; } esp_now_register_send_cb (OnDataSent); // ESPNOW məlumatlarını göndərdikdən sonra OnDataSent funksiyasına zəng edin // Cihazı qoşalaşmış cihaz siyahısına əlavə edin, əgər (esp_now_add_peer (yayımAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)) {Serial.println ("Həmyaşıd əlavə olunmadı"); qayıtmaq; }} void loop () {// Strcpy göndərmək üçün dəyərləri təyin edin (myData.a, "BU BİR CHARDIR"); // "THIS IS A CHAR" ı əvvəllər təyin etdiyim "data" dəyişəninə saxlamaq myData.b = təsadüfi (1, 20); // təsadüfi bir dəyər saxla myData.c = 1.2; // bir float saxlamaq myData.d = "SP8266"; // bir sətir saxla myData.e = false; // bool saxlamaq // ESP-NOW vasitəsilə 250 baytdan az və ya bərabər məlumat göndərin və statusunu qaytarır int result = esp_now_send (yayımAddress, (uint8_t *) & myData, sizeof (myData)); if (esp_now_init ()! = 0) {Serial.println ("Uğurla göndərildi"); } başqa {Serial.println ("Məlumat göndərərkən xəta"); } gecikmə (2000); }

ESP32, bir ESP8266 -dan məlumat alır. bu kodla. Digər funksiyalar üçün burada hakimlik edin

// Lazımi kitabxanaları əlavə edin

#include // esp funksiyalarına daxil olmaq üçün #include // ESP32 -də Wifi İmkanları əlavə etmək üçün**strukturlaşdırılmış və hamısının struktur_message* /typedef struct struct_message {char a [32] olaraq adlandırılan çoxsaylı dəyişənlərin məlumat növlərini təyin edin; int b; üzmək c; String d; bool e; } struktur_message; // myData adlı bir dəyişən struct_message yaradın struct_message myData; // məlumat alındıqda və onu yazdırmadıqda çağırılan funksiya OnDataRecv (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Baytlar alındı:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Üzmək:"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// ESP Serial.begin (115200) ilə serial ünsiyyət üçün baud sürətini təyin edin; // Cihazı Wi-Fi Station WiFi.mode (WIFI_STA) olaraq təyin edin; // wifi-ni işə salır // ESP-NOW-ı işə salın və əgər vəziyyətini qaytararsa (esp_now_init ()! = 0) {Serial.println ("ESP-NOW başlatma xətası"); qayıtmaq; } esp_now_register_recv_cb (OnDataRecv); // ESPNOW məlumatlarını aldıqdan sonra OnDataRecv funksiyasına zəng edin} void loop () {}

Addım 7: İKİ YOLLU ƏLAQƏ

İKİ YOLLU ƏLAQƏ
İKİ YOLLU ƏLAQƏ
İKİ YOLLU ƏLAQƏ
İKİ YOLLU ƏLAQƏ

ESP32, başlanğıc haqqında məlumatları ESP8266 -ya göndərir. ESP8266 alınan mesajı çap edir və sonra cavablarını ESP32 seriyalı monitorunda çap edir.

ESP32 KODU

// Lazımi kitabxanaları əlavə edin

#include // esp -in indi funksiyalarına daxil olmaq üçün #include // ESP32 -də Wifi İmkanları əlavə etmək üçün // MAC ünvanını yayınAddress adlı bir massivdə qeyd edin; uint8_t yayımAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // Alıcımın MAC ünvanı/*çoxsaylı dəyişənlərin məlumat növlərini təyin edir və hamısını struct_message*/typedef struct struct_message {char a [32] olaraq dəyişir; int b; üzmək c; String d; bool e; } struktur_message; // myData adlı bir struct_message yaradın struct_message myData; // statusu boş olan OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t status) çap etmək üçün məlumatlar göndərildikdə // funksiyası çağırılır {Serial.print ("\ r / nSon Paket Göndərmə Vəziyyəti: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Çatdırılma Müvəffəqiyyəti": "Çatdırılmadı"); if (status! = ESP_NOW_SEND_SUCCESS) {send_data ();}} OnDataRecv (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData)) etibarsızdır; Serial.print ("Baytlar alındı:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Üzmək:"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// ESP Serial.begin (115200) ilə serial ünsiyyət üçün baud sürətini təyin edin; // Cihazı Wi-Fi Station WiFi.mode (WIFI_STA) olaraq təyin edin; // wifi-ni işə salır // ESP-NOW-ı işə salın və (esp_now_init ()! = ESP_OK) {Serial.println ("ESP-ni işə salmaqda səhv -İNDİ"); qayıtmaq; } // ESPNOW məlumatlarını esp_now_register_send_cb (OnDataSent) göndərdikdən sonra OnDataSent funksiyasına zəng edin; // peer esp_now_peer_info_t peerInfo -da qeydiyyatdan keçin; // həmyaşıd məlumatlarını bir addres memcpy üçün göstərici olaraq işə salın və təyin edin (peerInfo.peer_addr, yayımAddress, 6); // 6 baytlıq yayımAddress dəyərini peerInfo.peer_addr peerInfo.channel = 0 -a kopyalayın; // espin danışdığı kanal. 0, təyin olunmamış deməkdir və məlumatlar cari kanalda göndəriləcək.1-14 yerli peerInfo.encrypt = false ilə eyni olan etibarlı kanallardır; // şifrələnməyib // Cihazı cütləşdirilmiş cihaz siyahısına əlavə edin, əgər (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Peer əlavə olunmadı"); qayıtmaq; } esp_now_register_recv_cb (OnDataRecv); // ESPNOW məlumatlarını göndərdikdən sonra OnDataRecv funksiyasını çağırın send_data (); } void loop () {} void send_data () {Serial.println ("Göndərilir"); // Strcpy göndərmək üçün dəyərlər təyin edin (myData.a, "BU BİR CHAR"); // "THIS IS A CHAR" ı əvvəllər təyin etdiyim "data" dəyişəninə saxlamaq myData.b = təsadüfi (1, 20); // təsadüfi bir dəyər saxla myData.c = 1.2; // bir float saxlamaq myData.d = "ESP32"; // bir sətir saxla myData.e = false; // bool saxlamaq // ESP-NOW vasitəsilə 250 baytdan az və ya bərabər məlumat göndərin və statusunu qaytarır esp_err_t result = esp_now_send (yayımAddress, (uint8_t *) & myData, sizeof (myData)); if (nəticə == ESP_OK) {Serial.println ("Uğurla göndərildi");} başqa {Serial.println ("Məlumat göndərmə xətası"); }}

ESP8266 KODU

// Lazımi kitabxanaları əlavə edin

#include // ESP32 -də Wifi İmkanlarını Əlavə etmək üçün #include // esp -in indi funksiyalarına daxil olmaq üçün // MAC ünvanını yayınAddress adlı bir massivdə qeyd edin; uint8_t yayımAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*çoxsaylı dəyişənlərin məlumat növlərini qurmaq və hamısını struct_message adlandırmaq*/ typedef struct struct_message {char a [32]; int b; üzmək c; String d; bool e; } struktur_message; // myData adlı bir dəyişən struct_message yaradın struct_message myData; // məlumat alındıqda və onu çap edəndə çağırılan funksiya OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Baytlar alındı:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Üzmək:"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); send_data (); } etibarsız OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nSon Paket Göndərmə Vəziyyəti: / t"); Serial.println (sendStatus == 1? "Çatdırılma Müvəffəqiyyəti": "Çatdırılmadı"); if (sendStatus! = 1) {send_data (); }} void send_data () {// Strcpy göndərmək üçün dəyərləri təyin edin (myData.a, "BU BİR CHARDIR"); // "THIS IS A CHAR" ı əvvəllər təyin etdiyim "data" dəyişəninə saxlamaq myData.b = təsadüfi (1, 20); // təsadüfi bir dəyər saxla myData.c = 1.2; // bir float saxlamaq myData.d = "ESP8266"; // bir sətir saxla myData.e = false; // bir bool saxlamaq esp_now_send (yayımAddress, (uint8_t *) & myData, sizeof (myData)); } void setup () {// ESP Serial.begin (115200) ilə serial ünsiyyət üçün baud sürətini təyin edin; // Cihazı Wi-Fi Station WiFi.mode (WIFI_STA) olaraq təyin edin; // wifi-ni işə salır // ESP-NOW-ı işə salın və əgər vəziyyətini qaytararsa (esp_now_init ()! = 0) {Serial.println ("ESP-NOW başlatma xətası"); qayıtmaq; } if (esp_now_add_peer (yayımAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)) {Serial.println ("Həmyaşıd əlavə etmək alınmadı"); qayıtmaq; } esp_now_set_self_role (ESP_NOW_ROLE_COMBO); esp_now_register_send_cb (OnDataSent); esp_now_set_self_role (ESP_NOW_ROLE_COMBO); // Bu esp esp_now_register_recv_cb (OnDataRecv) rolunu müəyyən edir; // ESPNOW məlumatlarını aldıqdan sonra OnDataRecv funksiyasına zəng edin} void loop () {}

Addım 8: ƏDƏBİYYATLAR

ESPNOW_32_Məsələn

ESPNOW_8266 Nümunəsi

WIFI.h

ESP8266WiFi.h

esp_now.h ESP8266 üçün

esp_now.h ESP32 üçün

esp_now rəsmi sənədi (Funksiyaların daha yaxşı izahı)

ESP-NOW Rəsmi Bələdçisi

Tövsiyə: