esp_now.h: нет такого файла или каталога

Arduino: 1.8.19 (Windows 10), Board: "NodeMCU 1.0 (ESP-12E Module), 80 MHz, 4M (1M SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 115200"
esp_now_testing:3:21: fatal error: esp_now.h: No such file or directory
 #include <esp_now.h>
                     ^
compilation terminated.
exit status 1
esp_now.h: No such file or directory
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

Не удалось выполнить компиляцию для платы node mcu esp8266. Установил библиотеку esp8266 из менеджера плат

#include <ESP8266WiFi.h>
#include <esp_now.h>

// Переменные для тестовых данных
int int_value;
float float_value;
bool bool_value = true;

// MAC-адрес ответчика - отредактируйте по мере необходимости
uint8_t broadcastAddress[] = {0x24, 0x6F, 0x28, 0x7A, 0xAE, 0x7C};

// Определяем структуру данных
typedef struct struct_message {
 char a[32];
 int b;
 float c;
 bool d;
} struct_message;

// Создаем структурированный объект
struct_message myData;

// Информация о пире
esp_now_peer_info_t peerInfo;

// Функция обратного вызова, вызываемая при отправке данных
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
 Serial.print("\r\nLast Packet Send Status:\t");
 Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail");
}

void setup() {
 
 // Настройка последовательного монитора
 Serial.begin(115200);

 // Установите ESP32 в качестве станции Wi-Fi
 WiFi.mode(WIFI_STA);

 // Инициализировать ESP-СЕЙЧАС
 if (esp_now_init() != ESP_OK) {
   Serial.println("Error initializing ESP-NOW");
   return;
 }

 // Зарегистрировать обратный вызов отправки
 esp_now_register_send_cb(OnDataSent);
 
 // Регистрация пира
 memcpy(peerInfo.peer_addr, broadcastAddress, 6);
 peerInfo.channel = 0;  
 peerInfo.encrypt = false;
 
 // Добавляем пир
 if (esp_now_add_peer(&peerInfo) != ESP_OK){
   Serial.println("Failed to add peer");
   return;
 }
}

void loop() {

 // Создаем тестовые данные

 // Генерируем случайное целое число
 int_value = random(1,20);

 // Используйте целое число для создания нового числа с плавающей запятой
 float_value = 1.3 * int_value;

 // инвертировать логическое значение
 bool_value = !bool_value;
 
 // Форматирование структурированных данных
 strcpy(myData.a, "Welcome");
 myData.b = int_value;
 myData.c = float_value;
 myData.d = bool_value;
 
 // Отправить сообщение через ESP-NOW
 esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
  
 if (result == ESP_OK) {
   Serial.println("Sending confirmed");
 }
 else {
   Serial.println("Sending error");
 }
 delay(2000);
}

, 👍1

Обсуждение

Откуда вы взяли этот код? Хотя он загружает <ESP8266WiFi.h>, остальная часть этого кода, похоже, предназначена для ESP32, а не для ESP8266/NodeMCU., @StarCat


1 ответ


-1

Чтобы использовать ESP-NOW с ESP8266 и Arduino IDE, необходимо использовать файл "espnow.h" заголовочный файл. В этом случае коды ошибок меняются, и для успеха нужно использовать только значения int (0). esp_now_peer_info_t не требуется для добавления пиров. Вот код:

#include <ESP8266WiFi.h>
#include <espnow.h>

// Переменные для тестовых данных
int int_value;
float float_value;
bool bool_value = true;

// MAC-адрес ответчика - отредактируйте по мере необходимости
uint8_t broadcastAddress[] = {0x24, 0x6F, 0x28, 0x7A, 0xAE, 0x7C};

// Определяем структуру данных
typedef struct struct_message {
 char a[32];
 int b;
 float c;
 bool d;
} struct_message;

// Создаем структурированный объект
struct_message myData;

// Функция обратного вызова, вызываемая при отправке данных
void OnDataSent(uint8_t *mac_addr, uint8_t status) {
 Serial.print("\r\nLast Packet Send Status:\t");
 Serial.println(status == 0 ? "Delivery Success" : "Delivery Fail");
}

void setup() {
 
 // Настройка последовательного монитора
 Serial.begin(115200);

 // Установите ESP32 в качестве станции Wi-Fi
 WiFi.mode(WIFI_STA);

 // Инициализировать ESP-СЕЙЧАС
 if (esp_now_init() != 0) {
   Serial.println("Error initializing ESP-NOW");
   return;
 }

 // Зарегистрировать обратный вызов отправки
 esp_now_register_send_cb(OnDataSent);
 
 // Добавляем пир
 if (esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 0, NULL, 0) != 0){
   Serial.println("Failed to add peer");
   return;
 }
}

void loop() {

 // Создаем тестовые данные

 // Генерируем случайное целое число
 int_value = random(1,20);

 // Используйте целое число для создания нового числа с плавающей запятой
 float_value = 1.3 * int_value;

 // инвертировать логическое значение
 bool_value = !bool_value;
 
 // Форматирование структурированных данных
 strcpy(myData.a, "Welcome");
 myData.b = int_value;
 myData.c = float_value;
 myData.d = bool_value;
 
 // Отправить сообщение через ESP-NOW
 int result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
  
 if (result == 0) {
   Serial.println("Sending confirmed");
 }
 else {
   Serial.println("Sending error");
 }
 delay(2000);
}
,

Ваше описание того, что нужно изменить, не является полным. Вы изменили не только заголовочный файл., @StarCat