Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-23 15:04
В моем текущем проекте мне нужно несколько ESP, чтобы общаться друг с другом без маршрутизатора. Для этого я буду использовать ESP-NOW для беспроводной связи друг с другом без использования маршрутизатора на ESP.
Запасы
Вещи, которыми я пользовался:
Модуль ESP32 DEV
NODEMCU 1.0 (модуль ESP12E)
Шаг 1. Получите Mac-адрес платы
Через ESP-now устройства ESP взаимодействуют друг с другом, отправляя данные на свой уникальный адрес, будучи подключенными к внутренней сети точек доступа, созданной при запуске esp now.. Таким образом, определите 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 ("MAC-адрес платы ESP8266:"); 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 now и wifi
- Сохраните mac-адрес получателя ESP
- Определите структуру данных отправленного / полученного сообщения
- На настройке установите вайфай в режим станции
- Инициализировать esp_now
- создать и зарегистрировать функцию обратного вызова, вызываемую после отправки и получения данных
- Для Esp8266 определите его роль
- зарегистрируйте партнера или получателя esp
- Отправить данные
Шаг 3: ФУНКЦИИ ESP-NOW (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 status)
- mac_addr: MAC-адрес получателя
-
положение дел:
- 1 = успех
- 0 = сбой
-
Описание:
Вызов функции OnDataSent после отправки данных ESPNOW
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
Канал Wi-Fi, который одноранговый узел использует для отправки / получения данных ESPNOW. Если значение равно 0, используйте текущий канал, на котором находится станция или программная карта. В противном случае он должен быть установлен как канал, на котором находится станция или программная карта
-
wifi_interface_t ifidx
Интерфейс Wi-Fi, который одноранговый узел использует для отправки / получения данных ESPNOW
-
bool encrypt
ESPNOW данные, которые этот одноранговый узел отправляет / получает, зашифрованы или нет
-
void * priv
ESPNOW одноранговые частные данные
-
Описание:
Добавить однорангового узла в список одноранговых узлов
esp_now_send (const uint8_t * peer_addr, const uint8_t * data, 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: текущий интерфейс Wi-Fi не соответствует интерфейсу однорангового узла
Параметры:
- peer_addr: одноранговый MAC-адрес
- data: данные для отправки
- 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 * data, int data_len)
-
mac_addr:
MAC-адрес получателя
-
*данные:
получение данных
-
data_len
длина байта данных
-
-
Описание:
Вызвать функцию cb после получения данных ESPNOW
Шаг 4: ФУНКЦИИ ESP-NOW (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 status)
- 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 * data, size_t len)
Возврат:
- 1 = Успех
- 0 = сбой
Параметры:
- peer_addr: одноранговый MAC-адрес
- data: данные для отправки
- 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 * data, int data_len)
-
mac_addr:
MAC-адрес получателя
-
*данные:
получение данных
-
data_len
длина байта данных
-
-
Описание:
Вызов функции cb после получения данных ESPNOW
Шаг 5: односторонняя связь (ESP32 в качестве отправителя)
ESP32 отправляет данные на ESP8266. с этим кодом. Измените broadcastAddress на Mac-адрес соответствующего получателя. У меня был A4: CF: 12: C7: 9C: 77
// Добавляем необходимые библиотеки
#include // Для доступа к функциям esp now #include // Чтобы добавить возможности Wi-Fi на ESP32 // сохраните MAC-адрес в массиве с именем broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // MAC-адрес моего получателя / * определяем типы данных для нескольких структурированных переменных и переименовываем все в struct_message * / typedef struct struct_message {char a [32]; int b; float 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? "Доставка успешна": "Доставка не удалась"); } void setup () {// Устанавливаем скорость передачи данных для последовательной связи с ESP Serial.begin (115200); // Установить устройство как станцию Wi-Fi WiFi.mode (WIFI_STA); // Запускает Wi-Fi // Запуск ESP-NOW и возвращает его статус if (esp_now_init ()! = ESP_OK) {Serial.println ("Ошибка инициализации ESP -ТЕПЕРЬ"); возвращение; } // вызываем функцию OnDataSent после отправки данных ESPNOW esp_now_register_send_cb (OnDataSent); // Регистрируем однорангового узла 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 ("Failed to add peer"); возвращение; }} void loop () {// Устанавливаем значения для отправки strcpy (myData.a, "ЭТО СИМВОЛ"); // сохраняем «ЭТО СИМВОЛ» в переменную a моих «данных», определенных ранее myData.b = random (1, 20); // сохраняем случайное значение myData.c = 1.2; // сохраняем поплавок myData.d = "Hello"; // сохраняем строку 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 // Для добавления возможностей Wi-Fi на ESP32 #include // Для доступа к функциям esp now / * определяем типы данных для нескольких структурированных переменных и переименовываем их все как struct_message * / typedef struct struct_message {char a [32]; int b; float c; Строка d; bool e; } struct_message; // Создаем переменную struct_message с именем myData struct_message myData; // функция вызывается при получении данных и выводит их на печать void 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 ("Инт:"); 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); // Запускает Wi-Fi // Инициализирует ESP-NOW и возвращает его статус if (esp_now_init ()! = 0) {Serial.println ("Ошибка инициализации ESP-NOW"); возвращение; } esp_now_set_self_role (ESP_NOW_ROLE_SLAVE); // Определяет роль этого esp 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 // Чтобы добавить возможности Wi-Fi на ESP32 #include // Для доступа к функциям esp now // сохраните MAC-адрес в массиве с именем broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; / * определяем типы данных для нескольких структурированных переменных и переименовываем все в struct_message * / typedef struct struct_message {char a [32]; int b; float c; Строка d; bool e; } struct_message; // Создаем структурированную переменную myData struct_message myData; // функция вызывается при отправке данных и выводит их статус void 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); // Запускает Wi-Fi // Запуск ESP-NOW и возвращает его статус if (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, "ЭТО СИМВОЛ"); // сохраняем «ЭТО СИМВОЛ» в переменную a моих «данных», определенных ранее myData.b = random (1, 20); // сохраняем случайное значение myData.c = 1.2; // сохраняем поплавок myData.d = "SP8266"; // сохраняем строку myData.e = false; // сохраняем bool // Отправляем данные размером не более 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 now #include // Чтобы добавить возможности Wi-Fi на ESP32 / * определите типы данных для нескольких структурированных переменных и переименуйте их в struct_message * / typedef struct struct_message {char a [32]; int b; float c; Строка d; bool e; } struct_message; // Создаем переменную struct_message с именем myData struct_message myData; // функция вызывается при получении данных и выводит их на печать 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 ("Инт:"); 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); // Запускает Wi-Fi // Инициализирует 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 now #include // Чтобы добавить возможности Wi-Fi на ESP32 // сохраните MAC-адрес в массиве с именем broadcastAddress; uint8_t broadcastAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // MAC-адрес моего получателя / * определяем типы данных для нескольких структурированных переменных и переименовываем все это как struct_message * / typedef struct struct_message {char a [32]; int b; float 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 ("Инт:"); 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); // Запускает Wi-Fi // Запуск ESP-NOW и возвращает его статус if (esp_now_init ()! = ESP_OK) {Serial.println ("Ошибка инициализации ESP -ТЕПЕРЬ"); возвращение; } // вызываем функцию OnDataSent после отправки данных ESPNOW esp_now_register_send_cb (OnDataSent); // Регистрируем однорангового узла 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 ("Failed to add peer"); возвращение; } esp_now_register_recv_cb (OnDataRecv); // вызов функции OnDataRecv после получения данных ESPNOW send_data (); } void loop () {} void send_data () {Serial.println ("Отправка"); // Устанавливаем значения для отправки strcpy (myData.a, "ЭТО СИМВОЛ"); // сохраняем «ЭТО СИМВОЛ» в переменную 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 // Чтобы добавить возможности Wi-Fi на ESP32 #include // Для доступа к функциям esp now // сохраните MAC-адрес в массиве с именем broadcastAddress; uint8_t broadcastAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; / * определяем типы данных для нескольких структурированных переменных и переименовываем все в struct_message * / typedef struct struct_message {char a [32]; int b; float c; Строка d; bool e; } struct_message; // Создаем переменную struct_message с именем myData struct_message myData; // функция вызывается при получении данных и выводит их на печать void 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 ("Инт:"); 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? «Доставка успешна»: «Доставка не удалась»); если (sendStatus! = 1) {send_data (); }} void send_data () {// Устанавливаем значения для отправки strcpy (myData.a, "ЭТО СИМВОЛ"); // сохраняем «ЭТО СИМВОЛ» в переменную 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); // Запускает Wi-Fi // Инициализирует 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 esp_now_register_recv_cb (OnDataRecv); // вызываем функцию OnDataRecv после получения данных ESPNOW} void loop () {}
Шаг 8: ССЫЛКИ
ESPNOW_32_Example
ESPNOW_8266 Пример
WIFI.h
ESP8266WiFi.h
esp_now.h для ESP8266
esp_now.h для ESP32
Официальный документ esp_now (Лучшее объяснение функций)
Официальное руководство ESP-NOW
Рекомендуемые:
Управление Led через приложение Blynk с помощью Nodemcu через Интернет: 5 шагов
Управление светодиодом через приложение Blynk с помощью Nodemcu через Интернет: Привет всем, сегодня мы покажем вам, как вы можете управлять светодиодом с помощью смартфона через Интернет
Arduino Как подключить несколько серводвигателей - Учебное пособие по PCA9685: 6 шагов
Arduino Как подключить несколько сервомоторов - Учебное пособие по PCA9685: В этом руководстве мы узнаем, как подключить несколько сервомоторов с помощью модуля PCA9685 и arduino. Модуль PCA9685 очень хорош, когда вам нужно подключить несколько двигателей, вы можете узнать больше об этом здесь https : //www.adafruit.com/product/815Посмотрите Vi
Несколько датчиков BMP280 в Arduino Uno через SPI: 6 шагов
Несколько датчиков BMP280 в Arduino Uno через SPI: в этом руководстве мы подключим три BMP280 на Arduino Uno через SPI, но вы можете подключить до восьми BMP280 на Uno, используя цифровые порты D3 - D10 в качестве nSS (выбор ведомого) для каждого датчика. образцов атмосферного давления, измеренных прибором B
Заставьте компьютер говорить то, что вы печатаете, с помощью блокнота: 3 шага
Заставьте ваш компьютер говорить то, что вы печатаете, с помощью блокнота: Вот один интересный код, созданный нами, чтобы ваш компьютер говорил то, что вы печатаете. Мы будем использовать блокнот для его создания. Давайте начнем
Управление устройствами через Интернет через браузер. (IoT): 6 шагов
Управление устройствами через Интернет через браузер. (IoT): в этой инструкции я покажу вам, как вы можете управлять такими устройствами, как светодиоды, реле, двигатели и т. Д., Через Интернет через веб-браузер. И вы можете безопасно получить доступ к элементам управления с любого устройства. Я использовал здесь веб-платформу RemoteMe.org visit