ESP8266 Webserver ESP8266WebS сервер перемещает функцию обработчика в отдельный файл .h .c

План состоит в том, чтобы создать более крупный проект и разделить код веб-сервера ESP8266 на несколько модулей (файлы .h .c). Основная проблема заключается в том, что сервер ESP8266WebServer не объявлен в файлах index.h и index.c.

Что я пытался сделать:

Контент main.c

#include <ESP8266WiFi.h>
#include "ESP8266WebServer.h"
#include "index.h"

ESP8266WebServer server(80);
const char* ssid =     "test";     
const char* password = "12345678";  

void setup() 
{
  WiFi.softAP(ssid, password);
  server.on("/", handleRoot(server));           // <-- использование удаленной функции 'esp8266webserver::ESP8266WebServerTemplate<WiFiServer>::ESP8266WebServerTemplate(const esp8266webserver::ESP8266WebServerTemplate<WiFiServer>&)'
  server.begin();
}

void loop()
{
  server1.handleClient();
}

Содержание index.h:

void handleRoot(ESP8266WebServer server); 

const char htmlIndex[] PROGMEM = R"=====(
<html>
  <head>
    <meta http-equiv="content-type" content="text/html;charset=UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Test</title>
  </head>
  <body>
    <h1>Hello World!</h1>
  </body>
</html>
)=====";

Индекс содержания.c:

#include "webpages/index.h"

void handleRoot(ESP8266WebServer server) 
{
  Serial.println("GET /");
  server.send(200, "text/html", htmlIndex);
}

Как я могу использовать сервер ESP8266WebServer, созданный в main.c в index.c?

, 👍1


1 ответ


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

1

Переместите веб-сервер в index.c и укажите тип веб-сервера:

ESP8266WebServer server(80);

Добавьте внешнюю ссылку в index.h и включите ее:

#include "ESP8266WebServer.h"

extern ESP8266WebServer server;

Index.h включен как в main.c, так и в index.c, поэтому он будет знать, что сервер относится к типу ESP8266WebServer, но не выделяет для него память; это делается в index.c

Это называется прямой ссылкой.

,

я перешел #include "ESP8266WebServer.h" extern ESP8266WebServer server; в main.h и включил его в index.c, но, в конце концов, это ваша идея. спасибо., @kimliv

Да, в принципе, неважно, где вы размещаете внешнюю переменную, лишь бы она не находилась в заголовочном файле (или, по крайней мере, не в том, который включается дважды). Удачи с вашим проектом., @Michel Keijzers