WebSocketsServer.h: No such file or directory

Я пытаюсь использовать веб-сокет NodeMCU.

Я скачал необходимые библиотеки из: https://github.com/Links2004/arduinoWebSockets и вставил их в папку Arduino libraries. Я загрузил свой код, но получил эту ошибку:

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

Не могли бы вы сказать мне, почему моя Arduino IDE не найдет заголовочный файл WebSocketsServer.h, когда он физически присутствует в моей папке Arduino libraries? Или если есть альтернативный способ использовать веб-сокет NodeMCU?

Вот код:

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <WebSocketsServer.h>
#include <Hash.h>

// Замените свои сетевые учетные
const char* ssid = "<WiFi-SSID>";
const char* password = "WiFi-PASSWORD";

WebSocketsServer webSocket = WebSocketsServer(81);
ESP8266WebServer server(80);   //создать экземпляр сервера на порту 80 (http-порт)

String page = "";
int LEDPin = D5;

void setup(void){
 //HTML веб-страницы
 page = "<h1>Simple NodeMCU Web Server</h1><p><a href=\"LEDOn\"><button>ON</button></a>&nbsp;<a href=\"LEDOff\"><button>OFF</button></a></p>";
 //сделайте вывод светодиодного контакта и изначально выключите
 pinMode(LEDPin, OUTPUT);
 digitalWrite(LEDPin, LOW);

 delay(1000);

 Serial.begin(115200);
 WiFi.begin(ssid, password); //начать подключение Wi-Fi
 Serial.println("");

 // Подождите подключения
 while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
 }

 Serial.println("");
 Serial.print("Connected to ");
 Serial.println(ssid);
 Serial.print("IP address: ");
 Serial.println(WiFi.localIP());

 server.on("/", [](){
    server.send(200, "text/html", page);
 });

 server.on("/LEDOn", [](){
    server.send(200, "text/html", page);
    digitalWrite(LEDPin, HIGH);
    delay(1000);
 });

 server.on("/LEDOff", [](){
    server.send(200, "text/html", page);
    digitalWrite(LEDPin, LOW);
    delay(1000);
 });

 server.begin();
 webSocket.begin();
 webSocket.onEvent(webSocketEvent);

 Serial.println("Web server started!");
}

void loop(void){
  webSocket.loop();
  server.handleClient();
  if (Serial.available() > 0){
    char c[] = {(char)Serial.read()};
    webSocket.broadcastTXT(c, sizeof(c));
  }
}

void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length){
  if (type == WStype_TEXT){
   for(int i = 0; i < length; i++) Serial.print((char) payload[i]);
   Serial.println();
  }
}
~~~

, 👍4

Обсуждение

Какова точная структура, в которой у вас есть файл в папке libraries? Прямо там или во вложенной папке? Как называется подпапка?, @chrisl

Я пытаюсь изменить это с помощью #include «WebSocketsServer.h», а WebSocketsServer.h находится в фактическом каталоге., @daem

в библиотеке есть формальные проблемы, которые должны быть обнаружены Arduino IDE. в library.properties отсутствует ключ headers, @Juraj


3 ответа


Лучший ответ:

1

после того как вы включили zip-файл в библиотеку, вы должны переименовать каталог следующим образом: WebSocketsServer. А затем вы копируете все файлы в каталог "src", а затем вставляете их в его родительский каталог (WebSocketsServer).

,

не работал со мной ... Ты имеешь в виду вот так:..\OneDrive\Documents\Arduino\libraries\WebSocketServer\src` ?, @R1S8K

ответ неправильный. библиотека имеет структуру спецификаций библиотеки 1.5 с папкой src. https://arduino.github.io/arduino-cli/0.20/library-specification/#15-library-format-rev-22, @Juraj


-1

правильным способом было бы добавить WebSocketsServer.h в список местоположений, которые ищет gcc. https://gcc.gnu.org/onlinedocs/gcc-2.95.3/cpp_1.html#SEC6

другим способом было бы загрузить WebSocketsServer.zip от https://www.arduinolibraries.info/libraries/web-sockets перейдите в свой рабочий каталог и распакуйте его

заменить

#include <WebSocketsServer.h>

с явным местоположением

#include "./WebSockets-2.3.5/src/WebSocketsServer.h"

(обратите внимание, что распакованная версия в данном случае-WebSockets-2.3.5)

,

относительные пути не работают с Arduino builder. сборка выполняется во временной папке, путь к которой недопустим. с Arduino мы не настраиваем gcc., @Juraj


0

Правильный способ — добавить библиотеку в вашу среду разработки Arduino IDE, она просто будет работать.

  1. Откройте IDE Arduino
  2. Перейдите в раздел Скетч > Включить библиотеку > Управление библиотеками
  3. Найдите "WebSockets Sattler" и установите библиотеку "WebSockets by Markus Sattler"
  4. Перезапустите среду разработки Arduino.

ПС

  • вы увидите два результата для библиотеки WebSockets от одного автора
  • второй "WebSockets_Generic" является более легкой библиотекой и обеспечивает поддержку WebSockets только в клиентском режиме (она предназначена для более эффективного использования памяти)
,