Buongiorno,
una domanda su ESP32
Ho un server con ESP32 e funziona bene. Se il client connesso si disconnette chiudendo correttamente la connessione al server, il server riesce a chiudere il socket e rimane in attesa di una nuova connessione di un nuovo client
Se, invece, il client si spegne o si resetta per qualche motivo, quindi la disconnessione non è "pulita", il server rimane stuck, rendendone necessario il riavvio
Qualcuno ha qualche idea riguardo a come impedire questo inconveniente? Grazie
Posto il codice
#define COUNT_LOW 4670
#define COUNT_HIGH 8000
#define TIMER_WIDTH 16
#include "esp32-hal-ledc.h"
#include <esp_task_wdt.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <WiFiAP.h>
int status = WL_IDLE_STATUS;
WiFiServer server(80);
const int pinout = 32;
const int vmin = 0;
const int vmax = 1;
int minmax[35][2];
int currentVal = 0;
void setup() {
minmax[pinout][vmin] = 4600;
minmax[pinout][vmax] = 7200;
ledcSetup(1, 50, TIMER_WIDTH);
ledcAttachPin(pinout, 1);
Serial.begin(9600);
WiFi.begin("homelife2014", "XXXXXX");
while (WiFi.status() != WL_CONNECTED) {delay(1000);Serial.println(".");}
WiFi.config(IPAddress(192,168,1,4), IPAddress(192,168,1,1), IPAddress(255,255,255,0));
Serial.println(WiFi.localIP());
server.begin();
}
void loop() {
WiFiClient client = server.available();
if (!client) return;
Serial.println("connected");
while (client.connected()) {
client.setTimeout(10000);
if (client.available()){
String cmd = client.readStringUntil('\n');
cmd.replace("\n","");
Serial.println("Letto: "+cmd);
for (int y=currentVal;y<cmd.toInt();y++){
ledcWrite(1, map(y, 0, 90, minmax[pinout][vmin], minmax[pinout][vmax]));
delay(20);
}
currentVal = cmd.toInt();
}
}
client.stop();
Serial.println("stop");
}