0

I'm trying to create a AsyncWebServer after enabling the 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");
}

The SoftAP brings up the network and I can connect to it (softAPgetStationNum() tells me that 1 client is connected). It answers to pings. The index.html is stored into the flash (the contents is printed out correctly).

But when I try to open the root page (192.168.4.1) it prints out "GET request" but the browser request timeouts and nothing is received.

Am I missing anything in the code?

asked Jun 7, 2022 at 16:11

2 Answers 2

3

I don't have enough rep to make a comment on your post, but is it possible that when you give the parameter for the function setDefaultFile() that the forward slash on /index.html is causing the path of the file to be //index.html instead of /index.html.

Because serveStatic is probably appending the filename of setDefaultFile() to the root directory of / (the third parameter of serveStatic()), you're probably getting an extra character you don't want in your filepath.

TL;DR you don't need the / in index.html for setDefaultFile().

See https://github.com/me-no-dev/ESPAsyncWebServer#serving-files-in-directory for the example.

answered Jun 7, 2022 at 23:10
4
  • I'll try this as soon as possible. But in that case should not just fall into a 404? Commented Jun 8, 2022 at 5:28
  • Tried. It changes nothing. I can reach the page using the complete address (i.e. 192.168.4.1/index.html) but often the wdt triggers and the ESP32 reboots. The pages are very light, less than 6 kBytes Commented Jun 8, 2022 at 7:05
  • Reloading the page usually leads to 404 Commented Jun 8, 2022 at 7:12
  • I confirm the issue is still there. Commented Jun 16, 2022 at 11:37
3

The usage of serveStatic() is wrong. It's not intended to be used inside a callback. Just place the call in the setup of the webserver, i.e.:

void WebApp::Begin()
{
 _server.serveStatic("/", SPIFFS, "/").setDefaultFile("/index.html");
 _server.onNotFound([](AsyncWebServerRequest *request)
 {
 request->send(404);
 });
 _server.begin();
 Serial.println("[WEB] HTTP server started");
}
answered Jun 16, 2022 at 12:11

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.