Съдържание:

Как да направите множество ESP разговори чрез ESP-NOW с помощта на ESP32 и ESP8266: 8 стъпки
Как да направите множество ESP разговори чрез ESP-NOW с помощта на ESP32 и ESP8266: 8 стъпки

Видео: Как да направите множество ESP разговори чрез ESP-NOW с помощта на ESP32 и ESP8266: 8 стъпки

Видео: Как да направите множество ESP разговори чрез ESP-NOW с помощта на ESP32 и ESP8266: 8 стъпки
Видео: Управляем адресными светодиодами на ESP32, прошивка WLED, применение в Home Assistant 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-сега устройствата ESP разговарят помежду си, като изпращат данни до техния уникален адрес, докато са свързани към вътрешна мрежа от точки за достъп, създадена при активиране на esp сега.. По този начин определете MAC адреса на всяко устройство. Прикрепен е моят ESP32 и ESP8266 Настройки на платката

ЗА ESP32

#include "WiFi.h" // За достъп до ESP32 WIFI възможности

void setup () {Serial.begin (115200); Serial.print ("MAC адрес на борда на ESP32:"); 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. Запазете mac адреса на ESP на получателя
  3. Определете структурата на данните за изпратено/получено съобщение
  4. При настройката задайте wifi в режим на станция
  5. Инициализирайте esp_now
  6. направете и регистрирайте функцията за обратно повикване, извикана след изпращане и получаване на данни
  7. За Esp8266 определете неговата роля
  8. регистрирайте връстника или получателя esp
  9. Изпращане на данни

Стъпка 3: ESP-СЕГА ФУНКЦИИ (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 с тези параметри:

    • void cb (const uint8_t *mac_addr, esp_now_send_status_t статус)

      • mac_addr: mac адрес на приемника
      • състояние:

        • 1 = успех
        • 0 = неуспех

Описание:

Извикайте функцията OnDataSent след изпращане на ESPNOW данни

esp_now_add_peerconst esp_now_peer_info_t *peer)

Се завръща:

  • 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: партньор е съществувал

Параметри:

  • peer: peer информация със следните данни:

    • 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 адрес на peer
  • данни: данни за изпращане
  • 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 данни

    • void cb (const uint8_t *mac_addr, const uint8_t *данни, int data_len)

      • mac_addr:

        mac адрес на приемника

      • *данни:

        получаване на данни

      • data_len

        дължина на байта данни

Описание:

Извикайте функцията cb след получаване на ESPNOW данни

Стъпка 4: ФУНКЦИИ ESP-СЕГА (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 с тези параметри:

    • void cb (const uint8_t *mac_addr, esp_now_send_status_t статус)

      • mac_addr: mac адрес на приемника
      • състояние:

        • 1 = успех
        • 0 = неуспех

Описание

Извикайте функцията OnDataSent след изпращане на ESPNOW данни

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 адрес на peer
  • данни: данни за изпращане
  • 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 данни

    • void cb (const uint8_t *mac_addr, const uint8_t *данни, int data_len)

      • mac_addr:

        mac адрес на приемника

      • *данни:

        получаване на данни

      • data_len

        дължина на байта данни

Описание:

Извикайте функцията cb след получаване на ESPNOW данни

Стъпка 5: Еднопосочна комуникация (ESP32 като изпращач)

ESP32 изпраща данни към ESP8266. с този код. Променете broadcastAddress на вашия mac адрес на приемника. Моят беше A4: CF: 12: C7: 9C: 77

// Добавяне на необходимите библиотеки

#include // За достъп до esp сега функциите #include // За добавяне на Wifi възможности на ESP32 // запазване на MAC адреса в масив с име broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // MAC адрес на моя приемник/*дефинирам типовете данни на множество променливи, структурирани и преименувани на всички като struct_message*/typedef struct struct_message {char a [32]; int b; поплавък c; Низ низ d; 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 (status == ESP_NOW_SEND_SUCCESS? "Доставка успешна": "Неуспешна доставка"); } void setup () {// Задайте скорост на предаване за серийна комуникация с ESP Serial.begin (115200); // Задайте устройството като Wi-Fi станция WiFi.mode (WIFI_STA); // Стартира wifi // Init ESP-NOW и връща състоянието му if (esp_now_init ()! = ESP_OK) {Serial.println ("Грешка при инициализирането на ESP -СЕГА"); връщане; } // извикваме функцията OnDataSent след изпращане на ESPNOW данни esp_now_register_send_cb (OnDataSent); // Регистрирайте peer esp_now_peer_info_t peerInfo; // инициализираме и присвояваме информацията за връстници като указател към адрес memcpy (peerInfo.peer_addr, broadcastAddress, 6); // копира стойността на broadcastAddress с 6 байта в peerInfo.peer_addr peerInfo.channel = 0; // канал, по който говорят esp. 0 означава неопределено и данните ще се изпращат по текущия канал. 1-14 са валидни канали, което е същото с локалното устройство peerInfo.encrypt = false; // не е криптиран // Добавете устройството към списъка на сдвоени устройства if (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Неуспешно добавяне на партньор"); връщане; }} void loop () {// Задайте стойности за изпращане на strcpy (myData.a, "THIS IS A CHAR"); // запазвам „THIS IS A CHAR“в променлива a на моите „данни“, дефинирани по -рано myData.b = random (1, 20); // запазваме произволна стойност myData.c = 1.2; // записване на поплавък myData.d = "Здравейте"; // записване на низ myData.e = false; // записване на буйл // Изпращане на данни по-малки или равни на 250 байта чрез ESP-NOW и връщане на състоянието им esp_err_t result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (result == ESP_OK) {Serial.println ("Изпратено с успех"); } else {Serial.println ("Грешка при изпращането на данните"); } забавяне (2000); }

ESP8266 получава данни от ESP32, използвайки този код.

// Добавяне на необходимите библиотеки

#include // За добавяне на Wifi възможности към ESP32 #include // За достъп до функциите на esp now /*дефинирайте типовете данни на множество променливи, структурирани и преименувани на всички като struct_message* /typedef struct struct_message {char a [32]; int b; поплавък c; Низ низ d; 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 ("Float:"); Serial.println (myData.c); Serial.print ("Низ:"); 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 // Init ESP-NOW и връща състоянието му if (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 отидете тук

// Добавяне на необходимите библиотеки

#include // За добавяне на Wifi възможности към ESP32 #include // За достъп до функциите на esp сега // запишете MAC адреса в масив с име broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*дефинирайте типовете данни на множество променливи, структурирани и преименувани като struct_message*/ typedef struct struct_message {char a [32]; int b; поплавък c; Низ низ d; 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? "Delivery Success": "Delivery Fail"); } void setup () {// Задайте скорост на предаване за серийна комуникация с ESP Serial.begin (115200); // Задайте устройството като Wi-Fi станция WiFi.mode (WIFI_STA); // Стартира wifi // Init ESP-NOW и връща състоянието му ако (esp_now_init ()) {Serial.println ("Грешка при инициализирането на ESP-NOW"); връщане; } esp_now_register_send_cb (OnDataSent); // извикваме функцията OnDataSent след изпращане на данни ESPNOW // Добавяме устройството към списъка на сдвоени устройства if (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“в променлива a на моите „данни“, дефинирани по -рано myData.b = random (1, 20); // запазваме произволна стойност myData.c = 1.2; // запазване на поплавък myData.d = "SP8266"; // записване на низ myData.e = false; // записване на буйл // Изпращане на данни по-малки или равни на 250 байта чрез ESP-NOW и връщане на състоянието им 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 // За достъп до функциите на esp сега #include // За добавяне на Wifi възможности на ESP32 /*дефинирайте типовете данни на множеството променливи структурирани и преименувайте всичко това като struct_message* /typedef struct struct_message {char a [32]; int b; поплавък c; Низ низ d; 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 ("Float:"); Serial.println (myData.c); Serial.print ("Низ:"); 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 // Init ESP-NOW и връща състоянието му if (esp_now_init ()! = 0) {Serial.println ("Грешка при инициализирането на ESP-NOW"); връщане; } esp_now_register_recv_cb (OnDataRecv); // извикваме функцията OnDataRecv след получаване на ESPNOW данни} void loop () {}

Стъпка 7: ДВУХРАЗНА КОМУНИКАЦИЯ

ДВУХПЪТНА КОМУНИКАЦИЯ
ДВУХПЪТНА КОМУНИКАЦИЯ
ДВУХПЪТНА КОМУНИКАЦИЯ
ДВУХПЪТНА КОМУНИКАЦИЯ

ESP32 изпраща данни при стартиране до ESP8266. ESP8266 отпечатва полученото съобщение и след това отговорите на които ESP32 отпечатва на своя сериен монитор.

ESP32 КОД

// Добавяне на необходимите библиотеки

#include // За достъп до esp сега функциите #include // За добавяне на Wifi възможности на ESP32 // запазване на MAC адреса в масив с име broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // MAC адрес на моя приемник/*дефинирам типовете данни на множество променливи, структурирани и преименувани на всички като struct_message*/typedef struct struct_message {char a [32]; int b; поплавък c; Низ низ d; bool e; } struct_message; // Създаване на struct_message, наречено myData struct_message myData; // функция, извикана, когато данните се изпращат за отпечатване на неговото състояние void 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 ();}} void 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 ("Низ:"); 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 // Init ESP-NOW и връща състоянието му if (esp_now_init ()! = ESP_OK) {Serial.println ("Грешка при инициализирането на ESP -СЕГА"); връщане; } // извикваме функцията OnDataSent след изпращане на ESPNOW данни esp_now_register_send_cb (OnDataSent); // Регистрирайте peer esp_now_peer_info_t peerInfo; // инициализираме и присвояваме информацията за връстници като указател към адрес memcpy (peerInfo.peer_addr, broadcastAddress, 6); // копира стойността на broadcastAddress с 6 байта в peerInfo.peer_addr peerInfo.channel = 0; // канал, по който говорят esp. 0 означава неопределено и данните ще се изпращат по текущия канал.1-14 са валидни канали, което е същото с локалното устройство peerInfo.encrypt = false; // не е криптиран // Добавете устройството към списъка на сдвоени устройства if (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“в променлива a на моите „данни“, дефинирани по -рано myData.b = random (1, 20); // запазваме произволна стойност myData.c = 1.2; // запазване на поплавък myData.d = "ESP32"; // записване на низ myData.e = false; // записване на буйл // Изпращане на данни по-малки или равни на 250 байта чрез ESP-NOW и връщане на състоянието им esp_err_t result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (result == ESP_OK) {Serial.println ("Изпратено с успех");} else {Serial.println ("Грешка при изпращането на данните"); }}

ESP8266 КОД

// Добавяне на необходимите библиотеки

#include // За добавяне на Wifi възможности към ESP32 #include // За достъп до функциите на esp сега // запишете MAC адреса в масив с име broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*дефинирайте типовете данни на множество променливи, структурирани и преименувани като struct_message*/ typedef struct struct_message {char a [32]; int b; поплавък c; Низ низ d; 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 ("Float:"); 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? "Delivery Success": "Delivery Fail"); if (sendStatus! = 1) {send_data (); }} void send_data () {// Задайте стойности за изпращане на strcpy (myData.a, "THIS IS A CHAR"); // запазвам „THIS IS A CHAR“в променлива a на моите „данни“, дефинирани по -рано myData.b = random (1, 20); // запазваме произволна стойност myData.c = 1.2; // запазване на поплавък myData.d = "ESP8266"; // записване на низ myData.e = false; // запазваме bool esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); } void setup () {// Задайте скорост на предаване за серийна комуникация с ESP Serial.begin (115200); // Задаване на устройство като Wi-Fi станция WiFi.mode (WIFI_STA); // Стартира wifi // Init ESP-NOW и връща състоянието му if (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 Официално ръководство

Препоръчано: