Оглавление:

Как заставить несколько ESP говорить через ESP-NOW, используя ESP32 и ESP8266: 8 шагов
Как заставить несколько ESP говорить через ESP-NOW, используя ESP32 и ESP8266: 8 шагов

Видео: Как заставить несколько ESP говорить через ESP-NOW, используя ESP32 и ESP8266: 8 шагов

Видео: Как заставить несколько ESP говорить через ESP-NOW, используя ESP32 и ESP8266: 8 шагов
Видео: ESP-IDF | Введение 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-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 работать

Вот обзор того, как заставить его работать:

  1. Включите библиотеки esp now и wifi
  2. Сохраните mac-адрес получателя ESP
  3. Определите структуру данных отправленного / полученного сообщения
  4. На настройке установите вайфай в режим станции
  5. Инициализировать esp_now
  6. создать и зарегистрировать функцию обратного вызова, вызываемую после отправки и получения данных
  7. Для Esp8266 определите его роль
  8. зарегистрируйте партнера или получателя esp
  9. Отправить данные

Шаг 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

Рекомендуемые: