ESP32 AsyncWebServer с softAP не обслуживает страницы
Я пытаюсь создать AsyncWebServer
после включения SoftAP
:
#include <Arduino.h>
#include <SPIFFS.h>
#include <WiFi.h>
#include <WiFiAP.h>
#include <AsyncTCP.h>
#include <ESPAsyncWebServer.h>
WebApp webapp;
void setup()
{
Serial.begin(115200);
SPIFFS.begin();
File f = SPIFFS.open("/index.html");
String s = f.readString();
Serial.println(s);
f.close();
WiFi.softAP("ssid", NULL);
WiFi.softAPsetHostname("ssid");
Serial.println(WiFi.softAPIP());
webapp.Begin();
}
void loop()
{
}
class WebApp
{
public:
WebApp();
void Begin();
private:
AsyncWebServer _server;
};
#include "webapp.h"
WebApp::WebApp() : _server(80)
{
}
void WebApp::Begin()
{
_server.on("/", HTTP_GET, [this](AsyncWebServerRequest *request)
{
Serial.println("GET request");
_server.serveStatic("/", SPIFFS, "/").setDefaultFile("/index.html");
});
_server.onNotFound([](AsyncWebServerRequest *request){
request->send(404);
});
_server.begin();
Serial.println("[WEB] HTTP server started");
}
SoftAP
открывает сеть, и я могу подключиться к ней (softAPgetStationNum()
сообщает мне, что подключен 1 клиент). На пинги отвечает.
index.html
сохраняется во флэш-памяти (содержимое распечатывается правильно).
Но когда я пытаюсь открыть корневую страницу (192.168.4.1), она выводит "GET request" но время ожидания запроса браузера истекло, и ничего не получено.
Я что-то упустил в коде?
@Mark, 👍0
2 ответа
Лучший ответ:
Использование serveStatic()
неверно. Он не предназначен для использования внутри обратного вызова. Просто поместите вызов в настройки веб-сервера, т.е.:
void WebApp::Begin()
{
_server.serveStatic("/", SPIFFS, "/").setDefaultFile("/index.html");
_server.onNotFound([](AsyncWebServerRequest *request)
{
request->send(404);
});
_server.begin();
Serial.println("[WEB] HTTP server started");
}
У меня недостаточно представителей, чтобы прокомментировать ваше сообщение, но возможно ли, что когда вы указываете параметр для функции setDefaultFile()
, косая черта на / index.html
приводит к тому, что путь к файлу будет //index.html
вместо /index.html
.
Потому что serveStatic, вероятно, добавляет имя файла setDefaultFile()
в корневой каталог /
(третий параметр serveStatic()
). , вы, вероятно, получаете лишний символ, который вам не нужен в вашем пути к файлу.
TL;DR вам не нужен /
в index.html
для setDefaultFile()
.
См. https://github.com/me-no-dev/ESPAsyncWebServer#. например, файлы-в-каталоге.
- ESP32 в Arduino-IDE с FS.h и SPIFFS
- Почему функция server.on() из "ESPAsyncWebServer.h" выполняется на стороне setup(), а не на стороне loop()?
- Загрузка данных SPIFFS в Arduino IDE 2.0.0-rc3 (ESP32 & TTGO) - Ubuntu
- Интернет-сервер Arduino IDE + ESP32 — как перенаправить на root после нажатия кнопки
- Автоматическая веб-страница ESP32 AP
- Как записать и прочитать из файла SPIFFS как данные объекта на ESP8266
- Точка доступа ESP32 и веб сервер HTTP, как отправить несколько параметров?
- Arduino uno R4 против платы разработчика ESP32
Я попробую это как можно скорее. Но в таком случае не должны ли просто попасть в 404?, @Mark
Пытался. Это ничего не меняет. Я могу получить доступ к странице, используя полный адрес (например,
192.168.4.1/index.html
), но часто срабатывает wdt и перезагружается ESP32. Страницы очень легкие, менее 6 Кбайт, @MarkПерезагрузка страницы обычно приводит к 404, @Mark
Подтверждаю, проблема осталась., @Mark