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

OP #7499511
Lesenswert?
• ▲
▼

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:
#7500055
Lesenswert?
• ▲
▼

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 #7500071
Lesenswert?
• ▲
▼

Ε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.

#7500080
Lesenswert?
• ▲
▼

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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.