Mundarija:

ESP32 va ESP8266 yordamida ESP-NOW orqali bir nechta ESP suhbatini qanday qilish kerak: 8 qadam
ESP32 va ESP8266 yordamida ESP-NOW orqali bir nechta ESP suhbatini qanday qilish kerak: 8 qadam

Video: ESP32 va ESP8266 yordamida ESP-NOW orqali bir nechta ESP suhbatini qanday qilish kerak: 8 qadam

Video: ESP32 va ESP8266 yordamida ESP-NOW orqali bir nechta ESP suhbatini qanday qilish kerak: 8 qadam
Video: Как отслеживать и контролировать ESP32 из любой точки мира с помощью RemoteXY IoT Cloud 2024, Noyabr
Anonim
ESP32 va ESP8266 yordamida ESP-NOW orqali bir nechta ESP suhbatini qanday qilish kerak
ESP32 va ESP8266 yordamida ESP-NOW orqali bir nechta ESP suhbatini qanday qilish kerak

Mening davom etayotgan loyihamda bir -biri bilan yo'riqchisiz gaplashish uchun menga bir nechta ESP kerak. Buning uchun men ESP-NOW-dan foydalanib, ESP-da yo'riqchisiz bir-birim bilan simsiz aloqa o'rnataman.

Ta'minotlar

Men ishlatgan narsalar:

ESP32 DEV moduli

NODEMCU 1.0 (ESP12E moduli)

1 -qadam: Board Mac manzilini oling

Board Mac manzilini oling
Board Mac manzilini oling
Board Mac manzilini oling
Board Mac manzilini oling

ESP-hozir orqali ESP qurilmalari bir-birlari bilan ma'lumotni yagona manzilga jo'natish orqali gaplashadilar, shu bilan birga hozirda espni intila qilishda o'rnatilgan ichki kirish nuqtalari tarmog'iga ulangan.. Shunday qilib, har bir qurilmaning MAC manzilini aniqlang, mening ESP32 va ESP8266 karta sozlamalari biriktirilgan

ESP32 uchun

#"WiFi.h" ni qo'shing // ESP32 WIFI imkoniyatlaridan foydalanish uchun

void setup () {Serial.begin (115200); Serial.print ("ESP32 Board MAC manzili:"); Serial.println (WiFi.macAddress ()); // MAC manzilini} bo'sh joyini () {} chop etadi

ESP8266 uchun

#include // ESP8266 WIFI imkoniyatlariga kirish uchun ishlatiladigan kutubxona

void setup () {Serial.begin (115200); Serial.println (); Serial.print ("ESP8266 Board MAC manzili:"); Serial.println (WiFi.macAddress ()); // MAC manzilini} bo'sh joyini () {} chop etadi

Mening MAC manzilim:

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

2-qadam: ESP-NOW-ni qanday ishlash kerak

Bu qanday ishlashi haqida qisqacha ma'lumot:

  1. Hozir esp va wifi kutubxonalarini qo'shing
  2. Qabul qiluvchining ESP mak manzilini saqlang
  3. Yuborilgan/qabul qilingan xabarning ma'lumotlar tuzilishini aniqlang
  4. O'rnatishda wifi -ni stantsiya rejimiga qo'ying
  5. Esp_now -ni ishga tushiring
  6. ma'lumotlarni yuborish va qabul qilishdan keyin chaqiriladigan qayta qo'ng'iroq qilish funktsiyasini amalga oshirish va ro'yxatdan o'tkazish
  7. Esp8266 uchun uning rolini aniqlang
  8. tengdoshni yoki qabul qiluvchini ro'yxatdan o'tkazing
  9. Ma'lumot yuborish

3-qadam: ESP-NOW FUNKSIYALARI (ESP32)

esp_now_init (bekor)

Qaytish:

  • ESP_OK: muvaffaqiyat
  • ESP_ERR_ESPNOW_INTERNAL: Ichki xato

Tavsif:

ESPNOW funktsiyasini ishga tushiring

esp_now_register_send_cb (cb)

Qaytadi:

  • ESP_OK: muvaffaqiyat
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW ishga tushirilmagan
  • ESP_ERR_ESPNOW_INTERNAL: ichki xato

Parametrlar:

  • cb: ushbu parametrlar bilan ESPNOW ma'lumotlarini yuborganidan keyin qayta qo'ng'iroq qilish funktsiyasi nomi:

    • vb cb (const uint8_t *mac_addr, esp_now_send_status_t holati)

      • mac_addr: qabul qiluvchining Mac manzili
      • holat:

        • 1 = muvaffaqiyat
        • 0 = muvaffaqiyatsiz

Tavsif:

ESPNOW ma'lumotlarini yuborganingizdan so'ng OnDataSent funktsiyasini chaqiring

esp_now_add_peerconst esp_now_peer_info_t *tengdosh)

Qaytadi:

  • ESP_OK: muvaffaqiyat
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW ishga tushirilmagan
  • ESP_ERR_ESPNOW_ARG: yaroqsiz argument
  • ESP_ERR_ESPNOW_FULL: tengdoshlar ro'yxati to'la
  • ESP_ERR_ESPNOW_NO_MEM: xotira yo'q
  • ESP_ERR_ESPNOW_EXIST: tengdosh mavjud

Parametrlar:

  • peer: tengdoshlari haqidagi ma'lumotlar quyidagi ma'lumotlar bilan:

    • uint8_t

      peer_addr [ESP_NOW_ETH_ALEN]; ESPNOW peer MAC manzili, bu ham stansiya yoki dasturning MAC manzili

    • uint8_t lmk [ESP_NOW_KEY_LEN]

      Ma'lumotni shifrlash uchun ishlatiladigan ESPNOW peer mahalliy asosiy kaliti

    • uint8_t kanali

      ESPNOW ma'lumotlarini yuborish/qabul qilish uchun tengdoshlari foydalanadigan Wi-Fi kanali. Agar qiymat 0 bo'lsa, stantsiya yoki dastur yoqilgan kanaldan foydalaning. Aks holda, u stantsiya yoki dastur yoqilgan kanal sifatida o'rnatilishi kerak

    • wifi_interface_t ifidx

      ESPNOW ma'lumotlarini yuborish/qabul qilishda tengdoshlari foydalanadigan Wi-Fi interfeysi

    • bool shifrlash

      Bu tengdosh yuboradigan/qabul qiladigan ESPNOW ma'lumotlari shifrlangan yoki yo'q

    • void *priv

      ESPNOW shaxsiy ma'lumotlari

Tavsif:

Tengdoshlar ro'yxatiga tengdosh qo'shing

esp_now_send (const uint8_t *peer_addr, const uint8_t *ma'lumotlar, size_t len)

Qaytadi:

  • ESP_OK: muvaffaqiyat
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW ishga tushirilmagan
  • ESP_ERR_ESPNOW_ARG: yaroqsiz argument
  • ESP_ERR_ESPNOW_INTERNAL: ichki xato
  • ESP_ERR_ESPNOW_NO_MEM: xotira yo'q
  • ESP_ERR_ESPNOW_NOT_FOUND: tengdosh topilmadi
  • ESP_ERR_ESPNOW_IF: joriy WiFi interfeysi tengdoshlarnikiga mos kelmaydi

Parametrlar:

  • peer_addr: tengdoshlarning MAC manzili
  • ma'lumotlar: yuboriladigan ma'lumotlar
  • len: ma'lumotlar uzunligi

Tavsif:

ESPNOW ma'lumotlarini yuborish. Ba'zi hollarda, bu sodir bo'ladi:

  • Agar peer_addr NULL bo'lmasa, ma'lumotlarni MAC manzili peer_addr ga mos keladigan tengdoshga yuboring
  • Agar peer_addr NULL bo'lsa, tengdoshlar ro'yxatiga qo'shilgan barcha tengdoshlarga ma'lumotlarni yuboring
  • Ma'lumotlarning maksimal uzunligi ESP_NOW_MAX_DATA_LENdan kichik bo'lishi kerak
  • Ma'lumotlar argumenti ko'rsatgan bufer esp_now_send qaytganidan keyin haqiqiy bo'lishi shart emas

esp_now_register_recv_cb (cb)

Qaytadi:

  • ESP_OK: muvaffaqiyat
  • ESP_ERR_ESPNOW_NOT_INIT: ESPNOW ishga tushirilmagan
  • ESP_ERR_ESPNOW_INTERNAL: ichki xato

Parametrlar:

  • cb: ESPNOW ma'lumotlarini qabul qilish uchun qayta qo'ng'iroq qilish funktsiyasi

    • vb cb (const uint8_t *mac_addr, const uint8_t *ma'lumotlar, int data_len)

      • mac_addr:

        qabul qiluvchining Mac manzili

      • *ma'lumotlar:

        ma'lumotlarni qabul qilish

      • data_len

        ma'lumotlar baytining uzunligi

Tavsif:

ESPNOW ma'lumotlarini olgandan keyin cb funktsiyasiga qo'ng'iroq qiling

4-qadam: ESP-NOW FUNKSIYALARI (ESP8266)

FUNKSIYALAR TAVSIYASI ESP32 ESP8266

int esp_now_init (bekor)

Qaytadi:

  • 1 = muvaffaqiyat
  • 0 = muvaffaqiyatsiz

Tavsif

ESPNOW funktsiyasini ishga tushiring

int esp_now_set_self_role (u8 o'rni)

Parametrlar:

  • ESP_NOW_ROLE_IDLE: ma'lumotlarni uzatishga ruxsat berilmagan.
  • ESP_NOW_ROLE_CONTROLLER: ustuvorlik Sation interfeysiga beriladi
  • ESP_NOW_ROLE_SLAVE: SoftAP interfeysiga ustuvorlik beriladi
  • ESP_NOW_ROLE_COMBO: SoftAPinterface -ga ustuvorlik beriladi

Tavsif

Qurilmaning rolini belgilaydi

int esp_now_register_send_cb (cb)

Qaytadi:

  • 1 = muvaffaqiyat
  • 0 = muvaffaqiyatsiz

Parametrlar:

  • cb: ushbu parametrlar bilan ESPNOW ma'lumotlarini yuborganidan keyin qayta qo'ng'iroq qilish funktsiyasi nomi:

    • vb cb (const uint8_t *mac_addr, esp_now_send_status_t holati)

      • mac_addr: qabul qiluvchining Mac manzili
      • holat:

        • 1 = muvaffaqiyat
        • 0 = muvaffaqiyatsiz

Tavsif

ESPNOW ma'lumotlarini yuborganingizdan so'ng OnDataSent funktsiyasini chaqiring

int esp_now_add_peer (u8 *mac_addr, u8 roli, u8 kanal, u8 *tugma, u8 key_len)

Qaytadi:

  • 1 = muvaffaqiyat
  • 0 = muvaffaqiyatsiz

Parametrlar:

  • mac_addr

    tengdoshining Mac manzili

  • rol
  • kanal

    Agar qiymat 0 bo'lsa, stantsiya yoki dastur yoqilgan kanaldan foydalaning. Aks holda, u stantsiya yoki dastur yoqilgan kanal sifatida o'rnatilishi kerak

  • *kalit

    shifrlash uchun kalit

  • key_len

    kalit uzunligi

Tavsif:

Tengdoshlar ro'yxatiga tengdosh qo'shing

int esp_now_send (const uint8_t *peer_addr, const uint8_t *ma'lumotlar, size_t len)

Qaytadi:

  • 1 = muvaffaqiyat
  • 0 = muvaffaqiyatsiz

Parametrlar:

  • peer_addr: tengdoshlarning MAC manzili
  • ma'lumotlar: yuboriladigan ma'lumotlar
  • len: ma'lumotlar uzunligi

Tavsif:

ESPNOW ma'lumotlarini yuborish. Ba'zi hollarda, bu sodir bo'ladi:

  • Agar peer_addr NULL bo'lmasa, ma'lumotlarni MAC manzili peer_addr ga mos keladigan tengdoshga yuboring
  • Agar peer_addr NULL bo'lsa, ma'lumotlarni tengdoshlar ro'yxatiga qo'shilgan barcha tengdoshlariga yuboring
  • Ma'lumotlarning maksimal uzunligi ESP_NOW_MAX_DATA_LEN dan kichik bo'lishi kerak
  • Ma'lumotlar argumenti ko'rsatgan bufer esp_now_send qaytganidan keyin haqiqiy bo'lishi shart emas

int esp_now_register_recv_cb (cb)

Qaytadi:

  • 1 = muvaffaqiyat
  • 0 = muvaffaqiyatsiz

Parametrlar:

  • cb: ESPNOW ma'lumotlarini qabul qilish uchun qayta qo'ng'iroq qilish funktsiyasi

    • vb cb (const uint8_t *mac_addr, const uint8_t *ma'lumotlar, int data_len)

      • mac_addr:

        qabul qiluvchining Mac manzili

      • *ma'lumotlar:

        ma'lumotlarni qabul qilish

      • data_len

        ma'lumotlar baytining uzunligi

Tavsif:

ESPNOW ma'lumotlarini olgandan keyin cb funktsiyasini chaqiring

5 -qadam: Bir tomonlama aloqa (ESP32 yuboruvchi sifatida)

ESP32 ma'lumotlarni ESP8266 ga yuboradi. bu kod bilan. BroadcastAddress ni qabul qiluvchining qabul qiluvchi mak manziliga o'zgartiring. Meniki A4: CF: 12: C7: 9C: 77 edi

// Kerakli kutubxonalarni qo'shing

#include // esp funksiyalariga kirish uchun #include // ESP32 -ga Wi -Fi imkoniyatlarini qo'shish uchun // MAC manzilini yayınlarAddress nomli qatorda saqlang; uint8_t yayımAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // qabul qiluvchining MAC manzili/*bir nechta o'zgaruvchilarning ma'lumot turlarini tuzilgan va ularning barchasini struct_message*/typedef struct struct_message {char a [32] deb o'zgartirgan; int b; suzuvchi c; Satr d; bool e; } struktur_message; // myData nomli struct_message yarating struct_message myData; // funktsiyalari OnDataSent holatini bekor qilish uchun ma'lumotlar yuborilganda chaqiriladi (const uint8_t *mac_addr, esp_now_send_status_t status) {Serial.print ("\ r / nSo'nggi paket yuborish holati: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Yetkazib berish muvaffaqiyati": "Yetkazib berilmadi"); } void setup () {// ESP Serial.begin (115200) bilan ketma -ket aloqa uchun uzatiladigan tezlikni o'rnating; // Qurilmani Wi-Fi Station WiFi.mode (WIFI_STA) sifatida sozlash; // wifi-ni ishga tushiradi // ESP-NOW-ni ishga tushiring va agar holatini qaytarsa (esp_now_init ()! = ESP_OK) {Serial.println ("ESPni ishga tushirishda xato -Hozir "); qaytish; } // ESPNOW ma'lumotlarini esp_now_register_send_cb (OnDataSent) yuborganidan keyin OnDataSent funktsiyasini chaqiring; // tengdoshlar bilan ro'yxatdan o'ting esp_now_peer_info_t peerInfo; // tengdosh ma'lumotlarini addres memcpy uchun ko'rsatgich sifatida ishga tushirish va tayinlash (peerInfo.peer_addr, radioAddress, 6); // 6 baytlik radioAddress qiymatini peerInfo.peer_addr peerInfo.channel = 0 ga ko'chiring; // esp gapiradigan kanal. 0 aniqlanmagan degan ma'noni anglatadi va ma'lumotlar joriy kanalga yuboriladi. 1-14-bu mahalliy qurilma peerInfo.encrypt = false bilan bir xil bo'lgan to'g'ri kanallar; // shifrlanmagan // Qurilmani bog'langan qurilmalar ro'yxatiga qo'shing, agar (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Tengdosh qo'shilmadi"); qaytish; }} void loop () {// strcpy yuborish uchun qiymatlarni o'rnating (myData.a, "Bu CHAR IS"); // "THIS IS CHAR" saqlang, bu "myData.b = random" (a, 20) oldindan aniqlangan "ma'lumotlarim" ning o'zgaruvchisiga; // tasodifiy qiymatni saqlash myData.c = 1.2; // float saqlash myData.d = "Salom"; // mag'lubiyatni saqlash myData.e = false; // boolni saqlang // ESP-NOW orqali 250 baytdan kam yoki teng ma'lumotlarni yuboring va uning holatini qaytaradi esp_err_t result = esp_now_send (radioAddress, (uint8_t *) & myData, sizeof (myData)); if (natija == ESP_OK) {Serial.println ("Muvaffaqiyat bilan yuborilgan"); } else {Serial.println ("Ma'lumotlarni yuborishda xato"); } kechikish (2000); }

ESP8266 ushbu kod yordamida ESP32 ma'lumotlarini oladi.

// Kerakli kutubxonalarni qo'shing

#include // ESP32 -ga Wi -Fi imkoniyatlarini qo'shish uchun #include // esp -ga kirish uchun hozirda funktsiyalarni bajarish uchun**tuzilgan va o'zgargan barcha o'zgaruvchilarning ma'lumot turlarini aniqlab, ularning hammasini struct_message* /typedef struct struct_message {char a [32]; int b; suzuvchi c; Satr d; bool e; } struktur_message; // myData struct_message deb nomlangan o'zgarmaydigan struct_message yarating myData; // ma'lumotlar qabul qilinganda va uni bosib chiqarganda chaqiriladi OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Qabul qilingan baytlar:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Float:"); 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) bilan ketma -ket muloqot qilish uchun tezlik tezligini o'rnating; // Qurilmani Wi-Fi Station WiFi.mode (WIFI_STA) sifatida o'rnating; // Wi-Fi-ni ishga tushiradi // ESP-NOW ni ishga tushiring va uning holatini qaytaradi, agar (esp_now_init ()! = 0) {Serial.println ("ESP-NOW-ni ishga tushirishda xato"); qaytish; } esp_now_set_self_role (ESP_NOW_ROLE_SLAVE); // esp esp_now_register_recv_cb (OnDataRecv) rolini belgilaydi; // ESPNOW ma'lumotlarini olgandan keyin OnDataRecv funktsiyasini chaqiring} void loop () {}

6 -qadam: Bir tomonlama aloqa (ESP8266 yuboruvchi sifatida)

ESP8266 ma'lumotlarni ESP32 ga yuboradi. bu kod bilan. BroadcastAddress ni qabul qiluvchining qabul qiluvchi mak manziliga o'zgartiring. Mening esp32 manzilim 30: AE: A4: F5: 03: A4. Esp8266 uchun boshqa funktsiyalar uchun bu erga o'ting

// Kerakli kutubxonalarni qo'shing

#include // ESP32 -ga Wi -Fi imkoniyatlarini qo'shish uchun #include // esp -ning hozirgi funksiyalariga kirish uchun // MAC manzilini yayınlarAddress nomli qatorda saqlang; uint8_t yayımAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*bir nechta o'zgaruvchilarning ma'lumotlar turlarini tuzilgan va ularning hammasini struct_message deb o'zgartirgan*/ typedef struct struct_message {char a [32]; int b; suzuvchi c; Satr d; bool e; } struct_message; // myData struct_message myData deb nomlangan tuzilgan o'zgaruvchini yarating; // ma'lumotlar yuborilganda va uning holatini bekor qilishda chaqiriladi OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nSo'nggi paket yuborish holati: / t"); Serial.println (sendStatus == 1? "Yetkazib berish muvaffaqiyati": "Yetkazib berilmadi"); } void setup () {// ESP Serial.begin (115200) bilan ketma -ket aloqa uchun uzatiladigan tezlikni o'rnating; // Qurilmani Wi-Fi Station WiFi.mode (WIFI_STA) sifatida sozlash; // wifi-ni ishga tushiradi // ESP-NOW-ni ishga tushiring va agar holatini qaytarsa (esp_now_init ()) {Serial.println ("ESP-NOW-ni ishga tushirishda xato")); qaytish; } esp_now_register_send_cb (OnDataSent); // ESPNOW ma'lumotlarini yuborganidan so'ng, OnDataSent funktsiyasini chaqiring // Qurilmani bog'langan qurilmalar ro'yxatiga qo'shing, agar (esp_now_add_peer (yayımAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)) {Serial.println ("tengdosh qo'shib bo'lmadi"); qaytish; }} void loop () {// strcpy yuborish uchun qiymatlarni o'rnating (myData.a, "Bu CHAR IS"); // "THIS IS CHAR" saqlang, bu "myData.b = random" (1, 20) oldindan aniqlangan "ma'lumotlarim" ning o'zgaruvchisiga; // tasodifiy qiymatni saqlash myData.c = 1.2; // floatni saqlash myData.d = "SP8266"; // mag'lubiyatni saqlash myData.e = false; // boolni saqlang // ESP-NOW orqali 250 baytdan kam yoki unga teng ma'lumotlarni yuboring va uning holatini qaytaradi int result = esp_now_send (roadAddress, (uint8_t *) & myData, sizeof (myData)); if (esp_now_init ()! = 0) {Serial.println ("Muvaffaqiyat bilan yuborilgan"); } else {Serial.println ("Ma'lumotlarni yuborishda xato"); } kechikish (2000); }

ESP32 ESP8266 dan ma'lumotlarni oladi. bu kod bilan. Boshqa funktsiyalar uchun bu erda hakamlar

// Kerakli kutubxonalarni qo'shing

#include // esp funksiyalariga kirish uchun #include // ESP32 -ga Wi -Fi imkoniyatlarini qo'shish uchun**tuzilgan va o'zgargan barcha o'zgaruvchilarning ma'lumot turlarini aniqlab, ularning hammasini struct_message* /typedef struct struct_message {char a [32]; int b; suzuvchi c; Satr d; bool e; } struct_message; // myData struct_message deb nomlangan o'zgarmaydigan struct_message yarating myData; // ma'lumotlar qabul qilinganda va uni bosib chiqarganda chaqiriladi OnDataRecv (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Qabul qilingan baytlar:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Float:"); 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) bilan ketma -ket aloqa uchun uzatiladigan tezlikni o'rnating; // Qurilmani Wi-Fi Station WiFi.mode (WIFI_STA) sifatida o'rnating; // Wi-Fi-ni ishga tushiradi // ESP-NOW ni ishga tushiring va uning holatini qaytaradi, agar (esp_now_init ()! = 0) {Serial.println ("ESP-NOW-ni ishga tushirishda xato"); qaytish; } esp_now_register_recv_cb (OnDataRecv); // ESPNOW ma'lumotlarini olgandan keyin OnDataRecv funktsiyasini chaqiring} void loop () {}

7 -qadam: Ikki xil aloqa

Ikki xil aloqa
Ikki xil aloqa
Ikki xil aloqa
Ikki xil aloqa

ESP32 ishga tushirish haqidagi ma'lumotlarni ESP8266 ga yuboradi. ESP8266 qabul qilingan xabarni chop etadi, keyin javoblari ESP32 ketma -ket monitorida chop etiladi.

ESP32 kodi

// Kerakli kutubxonalarni qo'shing

#include // esp funksiyalariga kirish uchun #include // ESP32 -ga Wi -Fi imkoniyatlarini qo'shish uchun // MAC manzilini yayınlarAddress nomli qatorda saqlang; uint8_t yayımAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // qabul qiluvchining MAC manzili/*bir nechta o'zgaruvchilarning ma'lumot turlarini tuzilgan va ularning barchasini struct_message*/typedef struct struct_message {char a [32] deb o'zgartirgan; int b; suzuvchi c; Satr d; bool e; } struct_message; // myData nomli struct_message yarating struct_message myData; // funktsiyalari OnDataSent holatini bekor qilish uchun ma'lumotlar yuborilganda chaqiriladi (const uint8_t *mac_addr, esp_now_send_status_t status) {Serial.print ("\ r / nSo'nggi paket yuborish holati: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Yetkazib berish muvaffaqiyati": "Yetkazib berilmadi"); if (status! = ESP_NOW_SEND_SUCCESS) {send_data ();}} OnDataRecv bekor (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Qabul qilingan baytlar:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Float:"); 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) bilan ketma -ket aloqa uchun uzatiladigan tezlikni o'rnating; // Qurilmani Wi-Fi Station WiFi.mode (WIFI_STA) sifatida sozlash; // wifi-ni ishga tushiradi // ESP-NOW-ni ishga tushiring va agar holatini qaytarsa (esp_now_init ()! = ESP_OK) {Serial.println ("ESPni ishga tushirishda xato -Hozir "); qaytish; } // ESPNOW ma'lumotlarini esp_now_register_send_cb (OnDataSent) yuborganidan keyin OnDataSent funktsiyasini chaqiring; // tengdoshlar esp_now_peer_info_t peerInfo -da ro'yxatdan o'ting; // tengdosh ma'lumotlarini addres memcpy uchun ko'rsatgich sifatida ishga tushirish va tayinlash (peerInfo.peer_addr, radioAddress, 6); // 6 baytli radioAddress qiymatini peerInfo.peer_addr peerInfo.channel = 0 ga ko'chiring; // esp gapiradigan kanal. 0 aniqlanmagan degan ma'noni anglatadi va ma'lumotlar joriy kanalga yuboriladi.1-14-bu mahalliy qurilma peerInfo.encrypt = false bilan bir xil bo'lgan to'g'ri kanallar; // shifrlanmagan // Qurilmani bog'langan qurilmalar ro'yxatiga qo'shing, agar (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Tengdosh qo'shilmadi"); qaytish; } esp_now_register_recv_cb (OnDataRecv); // send_data () ESPNOW ma'lumotlarini olgandan keyin OnDataRecv funktsiyasini chaqiring; } void loop () {} void send_data () {Serial.println ("Yuborilmoqda"); // strcpy yuborish uchun qiymatlarni o'rnating (myData.a, "Bu CHAR IS"); // "THIS IS CHAR" saqlang, bu "myData.b = random" (1, 20) oldindan aniqlangan "ma'lumotlarim" ning o'zgaruvchisiga; // tasodifiy qiymatni saqlash myData.c = 1.2; // floatni saqlash myData.d = "ESP32"; // mag'lubiyatni saqlash myData.e = false; // boolni saqlang // ESP-NOW orqali 250 baytdan kam yoki teng ma'lumotlarni yuboring va uning holatini qaytaradi esp_err_t result = esp_now_send (radioAddress, (uint8_t *) & myData, sizeof (myData)); if (natija == ESP_OK) {Serial.println ("Muvaffaqiyat bilan yuborilgan");} else {Serial.println ("Ma'lumotlarni yuborishda xato"); }}

ESP8266 kodi

// Kerakli kutubxonalarni qo'shing

#include // ESP32 -ga Wi -Fi imkoniyatlarini qo'shish uchun #include // esp -ning hozirgi funksiyalariga kirish uchun // MAC manzilini yayınlarAddress nomli qatorda saqlang; uint8_t yayımAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*bir nechta o'zgaruvchilarning ma'lumotlar turlarini tuzilgan va ularning hammasini struct_message deb o'zgartirgan*/ typedef struct struct_message {char a [32]; int b; suzuvchi c; Satr d; bool e; } struct_message; // myData struct_message deb nomlangan o'zgarmaydigan struct_message yarating myData; // ma'lumotlar qabul qilinganda va uni bosib chiqarganda chaqiriladi OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Qabul qilingan baytlar:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Float:"); Serial.println (myData.c); Serial.print ("String:"); 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 / nSo'nggi paket yuborish holati: / t"); Serial.println (sendStatus == 1? "Yetkazib berish muvaffaqiyati": "Yetkazib berilmadi"); agar (sendStatus! = 1) {send_data (); }} void send_data () {// strcpy yuborish uchun qiymatlarni o'rnating (myData.a, "Bu CHAR IS"); // "THIS IS CHAR" saqlang, bu "myData.b = random" (1, 20) oldindan aniqlangan "ma'lumotlarim" ning o'zgaruvchisiga; // tasodifiy qiymatni saqlash myData.c = 1.2; // float saqlash myData.d = "ESP8266"; // mag'lubiyatni saqlash myData.e = false; // boolni saqlash esp_now_send (radioAddress, (uint8_t *) & myData, sizeof (myData)); } void setup () {// ESP Serial.begin (115200) bilan ketma -ket aloqa uchun uzatiladigan tezlikni o'rnating; // Qurilmani Wi-Fi Station WiFi.mode (WIFI_STA) sifatida o'rnating; // Wi-Fi-ni ishga tushiradi // ESP-NOW ni ishga tushiring va uning holatini qaytaradi, agar (esp_now_init ()! = 0) {Serial.println ("ESP-NOW-ni ishga tushirishda xato"); qaytish; } if (esp_now_add_peer (radioAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)) {Serial.println ("Tengdosh qo'shilmadi"); qaytish; } 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 esp_now_register_recv_cb (OnDataRecv) rolini belgilaydi; // ESPNOW ma'lumotlarini olgandan keyin OnDataRecv funktsiyasini chaqiring} void loop () {}

8 -qadam: MADANIYAT

ESPNOW_32_Masalan

ESPNOW_8266 Misol

WIFI.h

ESP8266WiFi.h

esp_now.h ESP8266 uchun

esp_now.h ESP32 uchun

esp_now rasmiy hujjati (funktsiyalarni yaxshiroq tushuntirish)

ESP-NOW rasmiy qo'llanmasi

Tavsiya: