Агуулгын хүснэгт:

ESP32 болон ESP8266-ийг ашиглан ESP-NOW ашиглан олон ESP яриа хэрхэн хийх вэ: 8 алхам
ESP32 болон ESP8266-ийг ашиглан ESP-NOW ашиглан олон ESP яриа хэрхэн хийх вэ: 8 алхам

Видео: ESP32 болон ESP8266-ийг ашиглан ESP-NOW ашиглан олон ESP яриа хэрхэн хийх вэ: 8 алхам

Видео: ESP32 болон ESP8266-ийг ашиглан ESP-NOW ашиглан олон ESP яриа хэрхэн хийх вэ: 8 алхам
Видео: P1 ESP01 4CH Relay Module (Subtittled) 2024, Долдугаар сарын
Anonim
ESP32 болон ESP8266 ашиглан ESP-NOW ашиглан олон ESP яриа хэрхэн хийх вэ
ESP32 болон ESP8266 ашиглан ESP-NOW ашиглан олон ESP яриа хэрхэн хийх вэ

Миний хэрэгжүүлж буй төсөл дээр чиглүүлэгчгүйгээр хоорондоо ярихын тулд надад олон ESP хэрэгтэй болно. Үүнийг хийхийн тулд би ESP-NOW ашиглан ESP дээр чиглүүлэгчгүйгээр хоорондоо утасгүй холбоо тогтоох боломжтой болно.

Хангамж

Миний ашигласан зүйлс:

ESP32 DEV модуль

NODEMCU 1.0 (ESP12E модуль)

Алхам 1: Board Mac хаягийг аваарай

Board Mac хаягийг аваарай
Board Mac хаягийг аваарай
Board Mac хаягийг аваарай
Board 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 хаяг:"); Serial.println (WiFi.macAddress ()); // өөрийн MAC хаягийг хэвлэнэ} void loop () {}

Миний MAC ХАЯГ:

  • 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. Тохиргоон дээр wifi -ийг станцын горимд тохируулна уу
  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: хүлээн авагчийн mac хаяг
      • байдал:

        • 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 суваг

      ESPNOW өгөгдлийг илгээх/хүлээн авахад үе тэнгийнхэн ашигладаг Wi-Fi суваг. Хэрэв утга нь 0 бол аль суваг эсвэл програм хангамж асаалттай байгаа сувгийг ашиглана уу. Үгүй бол үүнийг станц эсвэл програм хангамж асаалттай байгаа сувгаар тохируулах ёстой

    • wifi_interface_t ifidx

      ESPNOW өгөгдлийг илгээх/хүлээн авахад үе тэнгийнхэн ашигладаг Wi-Fi интерфейс

    • bool шифрлэх

      Энэ үе тэнгийн илгээсэн/хүлээн авсан ESPNOW өгөгдөл шифрлэгдсэн эсвэл шифрлэгдээгүй байна

    • void *priv

      Хувийн мэдээллийг 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)

FUNCTIONS DESCRIPTION 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: хүлээн авагчийн mac хаяг
      • байдал:

        • 1 = амжилт
        • 0 = амжилтгүй болсон

Тодорхойлолт

ESPNOW өгөгдлийг илгээсэний дараа OnDataSent функцийг дуудаарай

int esp_now_add_peer (u8 *mac_addr, u8 үүрэг, u8 суваг, u8 *түлхүүр, u8 key_len)

Буцах:

  • 1 = амжилт
  • 0 = амжилтгүй болсон

Параметрүүд:

  • mac_addr

    үе тэнгийнхний Mac хаяг

  • үүрэг
  • суваг

    Хэрэв утга нь 0 бол аль суваг эсвэл програм хангамж асаалттай байгаа сувгийг ашиглана уу. Үгүй бол үүнийг станц эсвэл програм хангамж асаалттай байгаа сувгаар тохируулах ёстой

  • *түлхүүр

    шифрлэх түлхүүр

  • key_len

    түлхүүрийн урт

Тодорхойлолт:

Үе тэнгийнхний жагсаалтад үе тэнгийн нөхөд нэмэх

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 руу илгээдэг. энэ кодоор. BroadAddress хаягийг тохируулагч хүлээн авагчийн mac хаягаар солино уу. Минийх A4: CF: 12: C7: 9C: 77 байсан

// Шаардлагатай номын санг нэмнэ үү

#include // esp -ийн одоо ажиллаж буй функцэд хандахын тулд #include // ESP32 дээр Wifi чадамж нэмэхийн тулд // MAC хаягийг өргөн нэвтрүүлгийн хаяг гэсэн массивт хадгална уу; uint8_t yayımAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // Миний хүлээн авагчийн MAC хаяг/*олон хувьсагчийн өгөгдлийн төрлийг тодорхойлж, бүгдийг нь struct_message гэж нэрлэсэн*/typedef struct struct_message {char a [32]; int b; хөвөх в; Мөр d; bool e; } бүтэц_мессеж; // myData struct_message нэртэй бүтэц_мессеж үүсгэх myData; // статусыг хүчингүй болгох OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t status) -ийг хэвлэхээр өгөгдөл илгээх үед дууддаг функц {Serial.print ("\ r / nСүүлийн пакет илгээх байдал: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Хүргэлтийн амжилт": "Хүргэлт амжилтгүй болсон"); } void setup () {// ESP Serial.begin (115200) -тэй цуваа холболт хийх дамжуулалтын хурдыг тохируулах; // Төхөөрөмжийг Wi-Fi станцын WiFi.mode (WIFI_STA) болгон тохируулах; // wifi-ийг эхлүүлнэ // ESP-NOW-ийг эхлүүлж, хэрэв (esp_now_init ()! = ESP_OK) {Serial.println ("ESP-ийг эхлүүлэхэд алдаа гарвал -ОДОО "); буцах; } // ESPNOW өгөгдлийг esp_now_register_send_cb (OnDataSent) илгээсэний дараа OnDataSent функцийг дуудах; // peer esp_now_peer_info_t peerInfo бүртгүүлэх; // үе тэнгийнхний мэдээллийг addres memcpy (peerInfo.peer_addr,roadAddress, 6) руу заагч болгон эхлүүлж, оноох; // өргөн нэвтрүүлгийн хаягийн утгыг 6 байтаар peerInfo.peer_addr peerInfo.channel = 0 рүү хуулах; // esp -ийн ярьж буй суваг. 0 гэдэг нь тодорхойгүй гэсэн үг бөгөөд өгөгдлийг одоогийн суваг руу илгээх болно. 1-14 нь хүчинтэй сувгууд бөгөөд энэ нь peerInfo.encrypt локал төхөөрөмжтэй ижил байна; // шифрлэгдээгүй // Төхөөрөмжийг хосолсон төхөөрөмжийн жагсаалтад нэмнэ үү, хэрэв (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Хамтрагч нэмж чадсангүй"); буцах; }} void loop () {// strcpy илгээх утгыг тохируулах (myData.a, "Энэ бол ЧАР"); // "THIS IS A CHAR" -ийг өмнө нь тодорхойлсон миний "өгөгдлийн" a хувьсагч руу хадгалах myData.b = random (1, 20); // санамсаргүй утгыг хадгалах myData.c = 1.2; // float хадгалах myData.d = "Сайн байна уу"; // мөрийг хадгалах myData.e = false; // bool хадгалах // ESP-NOW-ээр 250 байтаас бага эсвэл тэнцүү өгөгдөл илгээх ба түүний статусыг буцаана esp_err_t result = esp_now_send (yayımAddress, (uint8_t *) & myData, sizeof (myData)); if (үр дүн == ESP_OK) {Serial.println ("Амжилттай илгээсэн"); } өөр {Serial.println ("Өгөгдөл илгээх алдаа"); } саатал (2000); }

ESP8266 нь энэхүү кодыг ашиглан ESP32 -аас өгөгдөл хүлээн авдаг.

// Шаардлагатай номын санг нэмнэ үү

#include // ESP32 дээр Wifi чадамж нэмэхийн тулд #include // esp -д одоо хандахын тулд функцууд /*бүтэцлэгдсэн олон хувьсагчийн өгөгдлийн төрлийг тодорхойлж, бүгдийг нь struct_message* /typedef struct struct_message {char a [32]; int b; хөвөх в; Мөр d; bool e; } бүтэц_мессеж; // 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 ("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) -тай цуваа холболт хийх дамжуулалтын хурдыг тохируулах; // Төхөөрөмжийг Wi-Fi станцын WiFi.mode (WIFI_STA) болгон тохируулах; // wifi-ийг эхлүүлнэ // ESP-NOW-ийг эхлүүлж, статусыг нь буцаана уу (esp_now_init ()! = 0) {Serial.println ("ESP-NOW-ийг эхлүүлэхэд алдаа гарсан"); буцах; } esp_now_set_self_role (ESP_NOW_ROLE_SLAVE); // Энэ esp esp_now_register_recv_cb (OnDataRecv) -ийн үүргийг тодорхойлдог; // ESPNOW өгөгдлийг хүлээн авсны дараа OnDataRecv функцийг дуудах} void loop () {}

Алхам 6: Нэг талын харилцаа холбоо (ESP8266 илгээгчийн хувьд)

ESP8266 нь өгөгдлийг ESP32 руу илгээдэг. энэ кодоор. BroadAddress хаягийг тохируулагч хүлээн авагчийн mac хаяг болгон өөрчилнө үү. Миний esp32 хаяг 30: AE: A4: F5: 03: A4. Esp8266 -ийн бусад функцийг эндээс үзнэ үү

// Шаардлагатай номын санг нэмнэ үү

#include // ESP32 дээр Wifi чадамж нэмэхийн тулд #include // esp -ийн одоо ажиллаж байгаа функцуудад хандахын тулд // MAC хаягийг өргөн нэвтрүүлгийн хаягаар хадгална уу; uint8_t yayımAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*олон хувьсагчийн өгөгдлийн төрлийг тодорхойлж, бүгдийг нь struct_message гэж нэрлэсэн*/ typedef struct struct_message {char a [32]; int b; хөвөх в; Мөр d; bool e; } бүтэц_мессеж; // myData struct_message myData нэртэй бүтэцлэгдсэн хувьсагч үүсгэх; // өгөгдөл илгээгдэж, статусаа хүчингүй болгох OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) хэвлэх үед дууддаг функц {Serial.print ("\ r / nСүүлийн пакет илгээх байдал: / t"); Serial.println (sendStatus == 1? "Хүргэлтийн амжилт": "Хүргэлт амжилтгүй болсон"); } void setup () {// ESP Serial.begin (115200) -тай цуваа холболт хийх дамжуулалтын хурдыг тохируулах; // Төхөөрөмжийг Wi-Fi станцын WiFi.mode (WIFI_STA) болгон тохируулах; // wifi-ийг эхлүүлнэ // ESP-NOW-ийг эхлүүлж, (esp_now_init ()) {Serial.println ("ESP-NOW-ийг эхлүүлэхэд алдаа гарвал") статусыг буцаана.); буцах; } esp_now_register_send_cb (OnDataSent); // ESPNOW өгөгдлийг илгээсэний дараа OnDataSent функцийг дуудаарай // Төхөөрөмжийг хосолсон төхөөрөмжийн жагсаалтад нэмнэ үү (esp_now_add_peer (yayımAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)) {Serial.println ("үе тэнгийнхнийг нэмж чадсангүй"); буцах; }} void loop () {// strcpy илгээх утгыг тохируулах (myData.a, "Энэ бол ЧАР"); // "THIS IS A CHAR" -г өмнө нь тодорхойлсон миний "өгөгдлийн" a хувьсагч руу хадгалах myData.b = random (1, 20); // санамсаргүй утгыг хадгалах myData.c = 1.2; // хөвөгч файлыг хадгалах myData.d = "SP8266"; // тэмдэгт мөрийг хадгалах myData.e = false; // bool хадгалах // ESP-NOW-ээр 250 байтаас бага буюу тэнцүү өгөгдөл илгээх ба түүний статусыг буцаана int result = esp_now_send (yayımAddress, (uint8_t *) & myData, sizeof (myData)); if (esp_now_init ()! = 0) {Serial.println ("Амжилттай илгээсэн"); } өөр {Serial.println ("Өгөгдөл илгээх алдаа"); } саатал (2000); }

ESP32 нь ESP8266 -аас өгөгдөл хүлээн авдаг. энэ кодоор. Бусад функцийг энд шүүнэ үү

// Шаардлагатай номын санг нэмнэ үү

#include // esp -ийн одоо ажиллаж буй функцүүдэд хандахын тулд #include // ESP32 дээр Wifi чадамж нэмэх /*олон хувьсагчийн өгөгдлийн төрлийг тодорхойлж, бүгдийг нь struct_message* /typedef struct struct_message {char a [32] гэж нэрлэсэн. int b; хөвөх в; Мөр d; bool e; } бүтэц_мессеж; // 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 ("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) -тай цуваа холболт хийх дамжуулалтын хурдыг тохируулах; // Төхөөрөмжийг Wi-Fi станцын WiFi.mode (WIFI_STA) болгон тохируулах; // wifi-ийг эхлүүлнэ // ESP-NOW-ийг эхлүүлж, статусыг нь буцаана уу (esp_now_init ()! = 0) {Serial.println ("ESP-NOW-ийг эхлүүлэхэд алдаа гарсан"); буцах; } esp_now_register_recv_cb (OnDataRecv); // ESPNOW өгөгдлийг хүлээн авсны дараа OnDataRecv функцийг дуудах} void loop () {}

Алхам 7: ХОЁР АРГА ХАРИЛЦАА

ХОЁР АРГА ХАРИЛЦАА
ХОЁР АРГА ХАРИЛЦАА
ХОЁР АРГА ХАРИЛЦАА
ХОЁР АРГА ХАРИЛЦАА

ESP32 нь эхлүүлэх талаархи мэдээллийг ESP8266 руу илгээдэг. ESP8266 нь хүлээн авсан мессежийг хэвлээд дараа нь хариуг нь ESP32 цуваа дэлгэц дээрээ хэвлэнэ.

ESP32 КОД

// Шаардлагатай номын санг нэмнэ үү

#include // esp -ийн одоо ажиллаж буй функцуудад хандахын тулд #include // ESP32 дээр Wifi -ийн чадавхийг нэмэхийн тулд // MAC хаягийг radioAddress нэртэй массивт хадгална уу; uint8_t yayımAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // Миний хүлээн авагчийн MAC хаяг/*олон хувьсагчийн өгөгдлийн төрлийг тодорхойлж, бүгдийг нь struct_message гэж нэрлэсэн*/typedef struct struct_message {char a [32]; int b; хөвөх в; Мөр d; bool e; } бүтэц_мессеж; // myData struct_message нэртэй бүтэц_мессеж үүсгэх myData; // статусыг хүчингүй болгох OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t status) -ийг хэвлэхээр өгөгдөл илгээх үед дууддаг функц {Serial.print ("\ r / nСүүлийн пакет илгээх байдал: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Хүргэлтийн амжилт": "Хүргэлт амжилтгүй болсон"); if (status! = 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 ("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) -тай цуваа холболт хийх дамжуулалтын хурдыг тохируулах; // Төхөөрөмжийг Wi-Fi станцын WiFi.mode (WIFI_STA) болгон тохируулах; // wifi-г эхлүүлнэ // ESP-NOW-ийг эхлүүлж, (esp_now_init ()! = ESP_OK) {Serial.println ("ESP-ийг эхлүүлэхэд алдаа гарлаа -ОДОО "); буцах; } // ESPNOW өгөгдлийг esp_now_register_send_cb (OnDataSent) илгээсэний дараа OnDataSent функцийг дуудах; // peer esp_now_peer_info_t peerInfo бүртгүүлэх; // үе тэнгийнхний мэдээллийг addres memcpy (peerInfo.peer_addr,roadAddress, 6) руу заагч болгон эхлүүлж, оноох; // өргөн нэвтрүүлгийн хаягийн утгыг 6 байтаар peerInfo.peer_addr peerInfo.channel = 0 рүү хуулах; // esp -ийн ярьж буй суваг. 0 гэдэг нь тодорхойгүй гэсэн үг бөгөөд өгөгдлийг одоогийн суваг руу илгээх болно.1-14 нь хүчинтэй сувгууд бөгөөд энэ нь peerInfo.encrypt локал төхөөрөмжтэй ижил байна; // шифрлэгдээгүй // Төхөөрөмжийг хосолсон төхөөрөмжийн жагсаалтад нэмнэ үү, хэрэв (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Хамтрагч нэмж чадсангүй"); буцах; } esp_now_register_recv_cb (OnDataRecv); // ESPNOW өгөгдлийг send_data () хүлээн авсны дараа OnDataRecv функцийг дуудах; } void loop () {} void send_data () {Serial.println ("Илгээх"); // strcpy илгээх утгыг тохируулах (myData.a, "Энэ бол ЧАР"); // "THIS IS A CHAR" -г өмнө нь тодорхойлсон миний "өгөгдлийн" a хувьсагч руу хадгалах myData.b = random (1, 20); // санамсаргүй утгыг хадгалах myData.c = 1.2; // хөвөгч файлыг хадгалах myData.d = "ESP32"; // тэмдэгт мөрийг хадгалах myData.e = false; // bool хадгалах // ESP-NOW-ээр 250 байтаас бага эсвэл тэнцүү өгөгдөл илгээх ба түүний статусыг буцаана esp_err_t result = esp_now_send (yayımAddress, (uint8_t *) & myData, sizeof (myData)); if (үр дүн == ESP_OK) {Serial.println ("Амжилттай илгээсэн");} өөр {Serial.println ("Өгөгдлийг илгээхэд алдаа гарсан"); }}

ESP8266 код

// Шаардлагатай номын санг нэмнэ үү

#include // ESP32 дээр Wifi чадамж нэмэхийн тулд #include // esp -ийн одоо ажиллаж байгаа функцуудад хандахын тулд // MAC хаягийг өргөн нэвтрүүлгийн хаягаар хадгална уу; uint8_t yayımAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*олон хувьсагчийн өгөгдлийн төрлийг тодорхойлж, бүгдийг нь struct_message гэж нэрлэсэн*/ typedef struct struct_message {char a [32]; int b; хөвөх в; Мөр d; bool e; } бүтэц_мессеж; // 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 ("Float:"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); send_data (); } хүчингүй OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nСүүлийн пакет илгээх байдал: / t"); Serial.println (sendStatus == 1? "Хүргэлтийн амжилт": "Хүргэлт амжилтгүй болсон"); if (sendStatus! = 1) {send_data (); }} void send_data () {// strcpy илгээх утгыг тохируулах (myData.a, "Энэ бол ЧАР"); // "THIS IS A CHAR" -г өмнө нь тодорхойлсон миний "өгөгдлийн" a хувьсагч руу хадгалах myData.b = random (1, 20); // санамсаргүй утгыг хадгалах myData.c = 1.2; // хөвөгч файлыг хадгалах myData.d = "ESP8266"; // тэмдэгт мөрийг хадгалах myData.e = false; // bool -ийг хадгалах esp_now_send (yayımAddress, (uint8_t *) & myData, sizeof (myData)); } void setup () {// ESP Serial.begin (115200) -тай цуваа холболт хийх дамжуулалтын хурдыг тохируулах; // Төхөөрөмжийг Wi-Fi станцын WiFi.mode (WIFI_STA) болгон тохируулах; // wifi-ийг эхлүүлнэ // ESP-NOW-ийг эхлүүлж, статусыг нь буцаана уу (esp_now_init ()! = 0) {Serial.println ("ESP-NOW-ийг эхлүүлэхэд алдаа гарсан"); буцах; } if (esp_now_add_peer (radioAddress, 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 esp_now_register_recv_cb (OnDataRecv) -ийн үүргийг тодорхойлдог; // ESPNOW өгөгдлийг хүлээн авсны дараа OnDataRecv функцийг дуудах} void loop () {}

Алхам 8: АШИГЛАЛ

ESPNOW_32_Жишээ

ESPNOW_8266 Жишээ

WIFI.h

ESP8266WiFi.h

esp_now.h ESP8266 -ийн хувьд

esp_now.h ESP32 -ийн хувьд

esp_now албан ёсны баримт бичиг (функцийг илүү сайн тайлбарлах)

ESP-NOW албан ёсны гарын авлага

Зөвлөмж болгож буй: