ESP32 WROOM mit Async Webserver WDT Reset nach dem Verbinden von 2. Client

OP #7499511

Hallo zusammen,

Ich betreibe einen ESP32 WROOM als Async Webserver mit der Library "ESPAsyncWebServer". Das Problem ist, wenn ich einen 2. Client verbinde, während bereits ein Client verbunden ist und damit das Webinterface aufrufe, wird der WDT getriggert und der ESP startet neu.

Habe den Debug Output im Anhang.

Hat jemand eine Idee, wie man das Problem löst?

Das Wifi-Netzwerk wird hier erstellt:

1
void createWifiNetwork(const char* ssid, const char* password) {
2
  Serial.print("Setting soft-AP configuration ... ");
3
  Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!");
4

5
  Serial.print("Setting soft-AP ... ");
6
  Serial.println(WiFi.softAP(ssid, password) ? "Ready" : "Failed!");
7

8
  Serial.print("Soft-AP IP address = ");
9
  Serial.println(WiFi.softAPIP());
10
}

Ansonsten werden im setup() einfach die routes gesetzt a la:

1
server.on("/", HTTP_GET, [](AsyncWebServerRequest * request)
2
  {
3
    request->send(LittleFS, "/index_user.html", "text/html");
4
  });

Die loop() Methode ist leer.

Angehängte Dateien:

Hmmm... Hab mit der ESP-Async-Webserver schon deutlich mehr Verbindungen gleichzeitig offen gehabt, das ist eigentlich kein Problem. Nichtmal auf dem kleineren ESP8266. Auch nicht wenn Daten für einen Request dynamisch über viele tausende Callbacks zusammengesammelt und Bröckchenweise rausgesendet werden.

Aber: Hab das noch nie im Soft-AP-Modus getestet. Kann das einen Unterschied machen?

Schlägt der Watchdog schon zu wenn mehrere Clients nur verbunden sind, aber keine HTTP-Verbindung offen haben?

OP

Εrnst B. schrieb:

Aber: Hab das noch nie im Soft-AP-Modus getestet. Kann das einen Unterschied machen?

Also heißt, immer über einen Router?

Ich aktualisiere einige Daten dynamisch per XML:

index.js

1
function triggerESP32Xml() {
2
  var readyState = "ReadyState: " + xmlHttpSensors.readyState;
3
  xmlHttpSensors = createXmlHttpRequestObject();
4
  xmlHttpSensors.open("PUT", "xml", true);
5
  xmlHttpSensors.onreadystatechange = processXmlResponse;
6
  xmlHttpSensors.send(null);
7

8
  setTimeout("triggerESP32Xml()", 100);
9
}
10

11
function processXmlResponse() {
12
  if (xmlHttpSensors.readyState == 4) {
13
    var xmlResponse;
14
    var xmlElements;
15

16
    // Get the XML stream
17
    xmlResponse = xmlHttpSensors.responseXML;
18
    //************************************ */
19
    // Update System Info section
20
    // Bat. Percentage / Voltage
21
    xmlElements = xmlResponse.getElementsByTagName("Vb");
22
    batteryVoltage = xmlElements[0].firstChild.nodeValue;
23
...
24
}
25
}

Ob es damit zusammenhängen kann?

Aber sollte ja trotzdem jeder Client seine eigenen Requests haben.

Εrnst B. schrieb:

Schlägt der Watchdog schon zu wenn mehrere Clients nur verbunden sind, aber keine HTTP-Verbindung offen haben?

Nein.

Ohje, 1990er-Style-Javascript.

Starte den nächsten "setTimeout" erst, nachdem der vorherige Request komplett abgearbeitet wurde.

Und überleg dir, das auf aktuelles JS und Json umzustellen. Da wird der ganze Code-Block oben zu

1
const status = await (await fetch("/status")).json();
2
batteryVoltage = status.Vb;

o.Ä.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 3 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.