Ihr habt recht, es kann sein, daß bei den Server Routinen noch einiges nicht ganz passt.
Das Server.begin habe ich hier hin verlagert
WiFi.onEvent([](WiFiEvent_t event, WiFiEventInfo_t info) {
Serial.println(F("---WiFi connected---"));
digitalWrite(LED_BUILTIN, LOW);
Server.begin();
Server.setNoDelay(true);
}, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_CONNECTED);
Am Anfang der loop rufe ich auf:
serialEvent();
WiFiEvent();
Diese Routinen habe ich von einem anderen Projekt übernommen, evtl passt dies hier nicht so richtig, da die Klappensteuerung auch bei WLAN ausfall oder keiner Telnet Verbindung funktionieren soll.
Macht es Sinn die serialEvent Routine nur aufzurufen wenn eine Telnet Verbindung besteht?
Wie prüfe ich dies?
Damit?
if (client && client.connected()) {
serialEvent();
}
void WiFiEvent()
{
//check if there are any new clients
if (PWMstat == '0' && Server.hasClient()) { // PWMstat == '0' -> Motor laeuft nicht
if (!client || !client.connected()) {
if (client) client.stop();
client = Server.available();
client.flush();
Serial.print(F("New client: "));
Serial.println(client.remoteIP());
} else {
WiFiClient rejectClient = Server.available();
rejectClient.stop();
Serial.print(F("Reject new Client="));
Serial.println(rejectClient.remoteIP());
}
}
if(client && !client.connected())
{
client.stop();
}
}
void serialEvent()
{
while (client.available())
{
char inChar = (char)client.read();
switch (inChar)
{
case '\n':
case '\r':
case '\0':
case '#':
command_available = true;
break;
default:
cmdstring += inChar;
}
if (cmdstring.length() > maxCmdString)
{
cmdstring = "";
client.print(F("cmd to long! (max "));
client.print(maxCmdString);
client.println(F(")"));
}
}
}