![Как да направите множество ESP разговори чрез ESP-NOW с помощта на ESP32 и ESP8266: 8 стъпки Как да направите множество ESP разговори чрез ESP-NOW с помощта на ESP32 и ESP8266: 8 стъпки](https://i.howwhatproduce.com/images/007/image-19714-j.webp)
Съдържание:
- Консумативи
- Стъпка 1: Вземете Mac адреса на борда
- Стъпка 2: Как да накарате ESP-NOW да работи
- Стъпка 3: ESP-СЕГА ФУНКЦИИ (ESP32)
- Стъпка 4: ФУНКЦИИ ESP-СЕГА (ESP8266)
- Стъпка 5: Еднопосочна комуникация (ESP32 като изпращач)
- Стъпка 6: Еднопосочна комуникация (ESP8266 като изпращач)
- Стъпка 7: ДВУХРАЗНА КОМУНИКАЦИЯ
- Стъпка 8: ЛИТЕРАТУРА
2025 Автор: John Day | [email protected]. Последно модифициран: 2025-01-23 12:57
![Как да направите множество ESP разговори чрез ESP-NOW с помощта на ESP32 и ESP8266 Как да направите множество ESP разговори чрез ESP-NOW с помощта на ESP32 и ESP8266](https://i.howwhatproduce.com/images/007/image-19714-1-j.webp)
В текущия ми проект се нуждая от множество ESP, за да разговарям помежду си без рутер. За да направя това, ще използвам ESP-NOW, за да направя безжична комуникация помежду си без рутер на ESP.
Консумативи
Неща, които използвах:
ESP32 DEV модул
NODEMCU 1.0 (ESP12E модул)
Стъпка 1: Вземете Mac адреса на борда
![Вземете Mac адреса на борда Вземете Mac адреса на борда](https://i.howwhatproduce.com/images/007/image-19714-2-j.webp)
![Вземете Mac адреса на борда Вземете Mac адреса на борда](https://i.howwhatproduce.com/images/007/image-19714-3-j.webp)
Чрез 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 да работи
Ето преглед как да го накарате да работи:
- Включете esp сега и wifi библиотеки
- Запазете mac адреса на ESP на получателя
- Определете структурата на данните за изпратено/получено съобщение
- При настройката задайте wifi в режим на станция
- Инициализирайте esp_now
- направете и регистрирайте функцията за обратно повикване, извикана след изпращане и получаване на данни
- За Esp8266 определете неговата роля
- регистрирайте връстника или получателя esp
- Изпращане на данни
Стъпка 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: ДВУХРАЗНА КОМУНИКАЦИЯ
![ДВУХПЪТНА КОМУНИКАЦИЯ ДВУХПЪТНА КОМУНИКАЦИЯ](https://i.howwhatproduce.com/images/007/image-19714-4-j.webp)
![ДВУХПЪТНА КОМУНИКАЦИЯ ДВУХПЪТНА КОМУНИКАЦИЯ](https://i.howwhatproduce.com/images/007/image-19714-5-j.webp)
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 Официално ръководство
Препоръчано:
Видео разговори на Raspberry Pi 3: 9 стъпки (със снимки)
![Видео разговори на Raspberry Pi 3: 9 стъпки (със снимки) Видео разговори на Raspberry Pi 3: 9 стъпки (със снимки)](https://i.howwhatproduce.com/images/004/image-9947-j.webp)
Видео разговори на Raspberry Pi 3: Откакто напуснах дома си преди 5 години за моето университетско обучение, осъзнах колко е трудно да си далеч от семейството. Видеообажданията обаче са опция за повечето хора, тъй като родителите ми не са в състояние да се научат да използват компютър, единствената опция
Множество сензори BMP280 в Arduino Uno чрез SPI: 6 стъпки
![Множество сензори BMP280 в Arduino Uno чрез SPI: 6 стъпки Множество сензори BMP280 в Arduino Uno чрез SPI: 6 стъпки](https://i.howwhatproduce.com/images/010/image-28857-j.webp)
Множество сензори BMP280 в Arduino Uno чрез SPI: В този урок ще свържем три BMP280 на Arduino Uno чрез SPI, но можете да свържете до осем BMP280 на Uno, използвайки цифрови портове D3 до D10 като nSS (Slave Select) за всеки сензор. от пробите на атмосферното налягане, измерени с B
Как да направите мобилна кола с дистанционно управление чрез Bluetooth: 4 стъпки
![Как да направите мобилна кола с дистанционно управление чрез Bluetooth: 4 стъпки Как да направите мобилна кола с дистанционно управление чрез Bluetooth: 4 стъпки](https://i.howwhatproduce.com/images/011/image-31378-j.webp)
Как да направите мобилна кола с дистанционно управление чрез Bluetooth: Как да направите мобилна кола с дистанционно управление чрез Bluetooth | Индийски LifeHacker
Направи си статив - Как да направите статив за смартфон и камера чрез антена: 8 стъпки
![Направи си статив - Как да направите статив за смартфон и камера чрез антена: 8 стъпки Направи си статив - Как да направите статив за смартфон и камера чрез антена: 8 стъпки](https://i.howwhatproduce.com/images/002/image-3103-123-j.webp)
Направи си статив | Как да си направим статив за смартфон и камера от антена: Когато търся статив за правене на видеоклипове за CookQueens, тогава видях, че цената на всеки 5-футов триножник започва от много висок диапазон на различните сайтове за електронна търговия. Аз също чакам отстъпка, но не получих това. След това реших да направя м
Как да направите собствено USB зарядно за кола за всеки IPod или други устройства, които се зареждат чрез USB: 10 стъпки (със снимки)
![Как да направите собствено USB зарядно за кола за всеки IPod или други устройства, които се зареждат чрез USB: 10 стъпки (със снимки) Как да направите собствено USB зарядно за кола за всеки IPod или други устройства, които се зареждат чрез USB: 10 стъпки (със снимки)](https://i.howwhatproduce.com/images/001/image-2327-49-j.webp)
Как да си направите собствено USB зарядно за кола за всеки IPod или други устройства, които се зареждат чрез USB: Създайте USB зарядно за кола за всеки iPod или друго устройство, което се зарежда чрез USB, като сглобите заедно автомобилен адаптер, който извежда 5v и USB женски щепсел. Най -важната част от този проект е да се уверите, че изходът на избрания от вас адаптер за кола е заложен