: Instabile WiFi/WLan Verbindung httpCode -1

Jedenfalls nicht so, wie der TO das machen möchte.
Das habe ich in Post #30 schon geschrieben.

Ich muss da auch erst was zu aufbauen, sorry
Heinz

Hallo Heinz,
sorry das ich erst heute antworte. Habe noch andere Baustellen (Rentner halt):

Kabel ist ca. 10cm lang und ja, es gibt 4,7kOhm Widerstände.

Stimmt, solange die Sensoren nicht stabil laufen.

Gruß
Horst

Mal den Code aus #34 laufen gelassen?

Hallo
Bist du denn sicher das es an dem Sensor liegt oder hängt sich der Controller auf. Lass doch parallel dazu eine LED blinken wenn du sonst nicht mit dem PC und Monitor drankommt.

Heinz
Nachtrag
Na ja wenn der Server antwortet kann er eigentlich ja nicht hängen grübel.

Klar.

Aber: ich habe noch die Variable hinzugefügt.
"unsigned long startzeit;"

war wohl als Test von dir gedacht, dass ich den Sketch mal teste. :grinning:

Habe auch die Funktion "Ausdruck" eingegeben.

Allesding wird alle 5 Sek. eine Ausgabe ohne Werte angezeigt.
Siehe hin

22:10:12.046 -> Connecting to WiFi..
22:10:12.046 -> 192.168.178.102
22:10:12.655 -> 
22:10:18.110 -> 
22:10:23.580 -> 
22:10:29.011 -> 
22:10:34.453 -> 
22:10:39.938 -> 
22:10:45.378 -> 
22:10:50.818 -> 
22:10:53.264 -> Requesting temperatures for Sensor 0...DONE
22:10:56.307 -> 
22:11:01.746 -> 
22:11:07.186 -> 
22:11:12.672 -> 
22:11:18.104 -> 
22:11:23.544 -> 
22:11:29.022 -> 
22:11:32.634 -> Requesting temperatures for Sensor 0...DONE
22:11:34.464 -> 
22:11:39.903 -> 
22:11:45.382 -> 
22:11:50.821 -> 
22:11:56.297 -> 
22:12:01.736 -> 
22:12:07.176 -> 
22:12:12.647 -> 
22:12:15.085 -> Requesting temperatures for Sensor 0...DONE
22:12:18.117 -> 
22:12:23.545 -> 
22:12:29.018 -> 
22:12:34.456 -> 
22:12:39.941 -> 
22:12:41.737 -> Requesting temperatures for Sensor 0...DONE
22:12:42.336 -> Es sind über 2 Minuten vergangen 
22:12:42.383 -> Restart ESP
22:12:42.477 -> 
22:12:42.477 ->  ets Jan  8 2013,rst cause:2, boot mode:(3,6)
22:12:42.477 -> 

Nach 2,5 Min. wird ein Reset ausgeführt.

Achja: wenn ich im IE die IP-Adresse eingebe, wird ein Wert von -127.00 angezeigt.

Gruß
Horst

Na bitte - dann geht wenigstens der Teil :wink:
Ich schau jetzt nochmal drüber...

An welchem Pin hängt ein DS18x20?

MOOOMENT!
Das kommt nicht von mir: Edit: Das handle siehe #50

Das ist nicht mein Code....

Das ist aus dem Code aus #34 und das ist doch von Dir??

Gruß
Horst

Der DS18B20 hängt an GPIO2

Upss. Sorry, ich hab das handleRoot nicht auf dem Schirm gehabt.

Da sollte dann auch was im SerMon drin stehen...

void handleRootPath()
{
  Serial.print("Requesting temperatures for Sensor 0...");
  Serial.println(tempSensors[0]);
  server.send(200, "text/plain", String(tempSensors[0]));
  Serial.println("DONE");
}

Ich bin mir fast zu 100% sicher, dass der Controller den Request sendet.

Ich habe meinen Code soweit geändert, dass alle 2 Sek. die Temperatur abgefragt und über die Serial.print ausgegeben wird.
Zusätzlich wird die Zeit hochgezählt und wenn ein Request angekommen ist zurückgesetzt.
Siehe hier:

22:41:17.427 -> Temperatur 21.31  Startzeit 24468
22:41:19.418 -> Temperatur 21.31  Startzeit 26468
22:41:21.424 -> Temperatur 21.31  Startzeit 28470
22:41:23.439 -> Temperatur 21.31  Startzeit 30470
22:41:25.459 -> Temperatur 21.38  Startzeit 32471
22:41:27.440 -> Temperatur 21.31  Startzeit 34473
22:41:29.457 -> Temperatur 21.38  Startzeit 36473
22:41:31.457 -> Temperatur 21.31  Startzeit 38475
22:41:32.678 -> Requesting temperatures...DONE
22:41:33.445 -> Temperatur 21.38  Startzeit 752
22:41:35.454 -> Temperatur 21.38  Startzeit 2753
22:41:37.433 -> Temperatur 21.38  Startzeit 4753
22:41:39.471 -> Temperatur 21.31  Startzeit 6755
22:41:41.440 -> Temperatur 21.31  Startzeit 8755
22:41:43.466 -> Temperatur 21.31  Startzeit 10757
22:41:45.460 -> Temperatur 21.31  Startzeit 12757
22:41:47.471 -> Temperatur 21.31  Startzeit 14759
22:41:49.451 -> Temperatur 21.31  Startzeit 16759
22:41:51.449 -> Temperatur 21.31  Startzeit 18760
22:41:53.448 -> Temperatur 21.31  Startzeit 20762
22:41:55.456 -> Temperatur 21.31  Startzeit 22762
22:41:57.467 -> Temperatur 21.31  Startzeit 24764
22:41:59.441 -> Temperatur 21.31  Startzeit 26765
22:42:01.458 -> Temperatur 21.31  Startzeit 28766
22:42:03.474 -> Temperatur 21.31  Startzeit 30767
22:42:05.443 -> Temperatur 21.31  Startzeit 32768
22:42:07.459 -> Temperatur 21.31  Startzeit 34769
22:42:09.481 -> Temperatur 21.31  Startzeit 36771
22:42:11.445 -> Temperatur 21.31  Startzeit 38771
22:42:12.055 -> Requesting temperatures...DONE
22:42:13.473 -> Temperatur 21.31  Startzeit 1390
22:42:15.488 -> Temperatur 21.31  Startzeit 3391
22:42:17.458 -> Temperatur 21.31  Startzeit 5392
22:42:19.457 -> Temperatur 21.31  Startzeit 7393
22:42:21.473 -> Temperatur 21.31  Startzeit 9394

Dies ist auch geschehen, als ein Fehler vom Controller angezeigt wurde.
deshalb glaube ich, dass der Controller einwandfrei funktioniert.

Leider habe ich noch keinen Fehler gehabt, der länger an 2,5 Min. war.

Ich lass das ganze jetzt mal laufen.

Gruß
Horst

#include <Arduino.h>
#include <ESP8266WebServer.h>
#include <OneWire.h>
#include <DallasTemperature.h>

float temperatur;   // globale Variable für Temperatur
unsigned long altzeit;   // speicher für millis()
unsigned long  startzeit;   // Timeout 
int x = 0;

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

const char* ssid = "xxx";
const char* pass =  "xxx";

ESP8266WebServer server(80);

//---------------------------------------------------
int handleRootPath() {

  Serial.print("Requesting temperatures...");
  Serial.println("DONE");
  server.send(200, "text/plain", String(temperatur));
  x = 1;
  return x;

}
//---------------------------------------------------

void setup() {

  Serial.begin(115200);

  // Start up the library
  sensors.begin();
  WiFi.persistent(false);   // daten nicht in EEprom
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, pass);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }
   
  Serial.println(WiFi.localIP());
  server.on("/", handleRootPath);
  server.begin();
}

void loop() {
  
  server.handleClient();

  restartESP();

  getOneWireTemperature();

}

void getOneWireTemperature()
{
  if (millis() - altzeit > 2000) {  // sind 2s vergangen ?
    altzeit = millis();
    temperatur = sensors.getTempCByIndex(0);
    Serial.print("Temperatur ");Serial.print(temperatur);Serial.print("  Startzeit ");Serial.println(millis() - startzeit);
   
    sensors.requestTemperatures();
  }  
}

void restartESP()
{
//  Serial.print("Startzeit ");Serial.println(millis() - startzeit); 
   
  if (x == 1) {
    startzeit = millis();
     x = 0;
  }

  if (millis() - startzeit > 120000) {
    startzeit = millis();
    Serial.print("Startzeit ");Serial.println(millis() - startzeit); 
    Serial.println("Es sind über 2 Minuten vergangen ");
    Serial.println("Restart ESP");
    ESP.restart(); //ESP reset
  }

}

Das geht doch nicht:

  if (x == 1)
  {
    startzeit = millis();
    x = 0;
  }
  if (millis() - startzeit > 120000) 

startzeit wird einmalig gesetzt wenn

int handleRootPath()
{
  Serial.print("Requesting temperatures...");
  Serial.println("DONE");
  server.send(200, "text/plain", String(temperatur));
  x = 1;
  return x;
}

Ich las das an der Stelle sein.
Ich weiss nicht, was Du erwartest.

Schade. Trotzdem vielen Dank für deine Hilfe.

Ok. Ich versuche eine Erklärung.

Meine Heizungssteuerung (Controller) fragt jede Minute der Reihe nach alle Sensoren (ESP8266 mit DS18B20) ab.
Kommt am Controller eine Fehlermeldung, wird vom Controller eine Nachricht per Telegram (App) auf mein Handy geschickt.

Wenn ein Sensor länger als 2 Min. keine Antwort gibt, dann soll der Sensor einen Software Reset machen.

Im Code (siehe oben) wird also ein Timer auf 120000 (2 Min.) gesetzt und wenn ein Request angekommen ist, wird X auf 1 gesetzt und somit die Startzeit zurück gestellt.

Das funktioniert auch.
Leider wird jede Minute ein Request erkannt und somit auch die Startzeit zurückgesetzt.

Daher kann ich auch ausschließen, dass der Controller das Problem ist.

jetzt würde ich mich sehr freuen, wenn mir einer sagen kann, wie ich die Abfrage für die Erkennung des Fehlers einbauen kann.

Gruß
Horst

Hallo,
schau Dir mal das Beispiel simple aus der lib an. Eventuell hilf Dir

// Check if reading was successful
  if(tempC != DEVICE_DISCONNECTED_C) 

weiter

Hast du denn mal gelesen, was ich dir in Post #30 geschrieben habe ?

Hallo,
ich bin mir immer noch nicht sicher was Du damit meinst. Meinst Du den Temperatursensor selbst oder den ESP der keine Antwort gibt.
Heinz

Den ESP8266

Meinst du das?
Woran kann ich sehen, ob per TCP oder UDP übertragen wird?
Ich habe im Code nichts eingestellt.

Gruß
Horst

Ja, auch.
Wenn du kein UDP eingebaut hast, verwendest du auch keins.
Nutzt du auf jedem Wemos einen Webserver zu Anzeige auf einer Webseite ?
Wie genau überträgst du die gemessenen Daten an deinen Server ?