INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Ich geb auf.. ESP8266 verliert Verbindung
13.03.2020, 15:37 (Dieser Beitrag wurde zuletzt bearbeitet: 13.03.2020 15:40 von juniq.)
Beitrag #1
Ich geb auf.. ESP8266 verliert Verbindung
Ich weiß dass es viele Threads über dieses Problem gibt aber bisher hat nichts bei mir geholfen. Ich hab schnelles und stabiles Internet, ein funktionierendes NodeMCU v3 Board und es gibt auch keine IP adressen konflikte da ich alles statisch eingerichtet hab.

Ich hab letztens unsere Sprechanlage modifiziert, das Setup:

NodeMCU Board + Relaiskarte.
Das Board arbeitet als HTTP Client und als Server. Es empfängt GET requests um das Relais zu schalten und die Tür zu öffnen. Es sendet einen GET request an ein weiteres NodeMCU Board um einen Alarm auszulösen (Klingel).

Funktioniert alles prima. Aber nach ner Weile (unterschiedliche Zeiten) reagiert nichts mehr. Nach Anschließen des Laptops und konstantem Debuggen seh ich dass er die WiFi Verbindung verliert. keine Ahnung warum.

Mein Sketch:
Code:
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

const char* ssid = "Katholische Weihwasserwerke";
const char* password = "chickensoup";
int btn = 0;

IPAddress ip(192,168,2,123);  
IPAddress gateway(192,168,2,1);  
IPAddress subnet(255,255,255,0);  

WiFiServer server(80);

String header;

void setup () {
  Serial.begin(115200);
  WiFi.config(ip, gateway, subnet);
  delay(100);
  WiFi.mode(WIFI_STA);

  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  server.begin();

  pinMode(D1, INPUT);
  pinMode(D2, OUTPUT);
  digitalWrite(D2, LOW);
}

void loop() {
  btn = digitalRead(D1);
  if (btn == 1) {
    Serial.println("DOOR BELL");
    if (WiFi.status() == WL_CONNECTED) {
      HTTPClient http;
      http.begin("http://192.168.2.110/door");
      int httpCode = http.GET();
      if (httpCode > 0) {
        String payload = http.getString();
        Serial.println(payload);
      }
      http.end();
    }
    delay(1000);
  }

  if (WiFi.status() != WL_CONNECTED) {
    reeconnect();
  }

  WiFiClient client = server.available();
  if (client) {
    Serial.println("New Client.");
    String currentLine = "";
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        header += c;
        if (c == '\n') {
          if (currentLine.length() == 0) {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();
            
            if (header.indexOf("GET /A") >= 0) {
              digitalWrite(D2, HIGH);
              Serial.println("DOOR UNLOCKED");
              delay(3000);
              digitalWrite(D2, LOW);
              Serial.println("DOOR LOCKED!");
            }
            
            client.println();
            break;
          } else {
            currentLine = "";
          }
        } else if (c != '\r') {
          currentLine += c;
        }
      }
    }
    header = "";
    client.stop();
    Serial.println("Client disconnected.");
    Serial.println("");
  }
}

void reeconnect() {  
  WiFi.config(ip, gateway, subnet);
  delay(100);
  WiFi.mode(WIFI_STA);

  Serial.print("REEEEonnecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  server.begin();
}

das mit dem reeconnect den 2x e ist korrekt weil er "reconnect" als Befehl erkennt.

Wie man sieht hab ich schon ne if abfrage ob die Verbindung noch aktiv ist und falls nicht soll er die Funktion reeconnect ausführen.

Bitte sagt mir was ich falsch mach. Bin mittlerweile soweit alles mit Arduino machen zu wollen weil da alles super funktioniert. Hab auch schon 2 mal das NodeMCU Board durch ein neues getauscht, ohne Erfolg. Hab mal alle Geräte aus dem WLAN gekickt und nur das NodeMCU Board drin gehabt. kein Erfolg. Nach ner Weile verlierts die Verbindung und ich komme nicht um das Drücken des Reset buttons drum rum, was nervig ist, da alles sauber und ordentlich in meinem Schaltschrank in ein Gehäuse installiert ist.

WICHTIG: Ich habe mehrere NodeMCU Spielereien in meinem Haus. Und alle anderen, welche nur als Server arbeiten, sprich GET requests von außerhalb bearbeiten, haben dieses besagte Problem NICHT. Das Problem tritt NUR bei Projekten auf, wo ich den NodeMCU auch als Client benutze. Und ich vermute da liegt irgendwo irgendwie der knackpunkt, und nicht im WLAN Netz oder sonstigen Störquellen. Aber was genau ich mit dem Client Script falsch mach, erhoffe ich mir von euch zu erfahren.

Ich rede hier vom ESP8266 übrigens. kein ESP32.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.03.2020, 15:43 (Dieser Beitrag wurde zuletzt bearbeitet: 13.03.2020 16:02 von Tommy56.)
Beitrag #2
RE: Ich geb auf.. ESP8266 verliert Verbindung
Mache mal Deine Strings global und weise ihnen im Setup mit reserve(länge) die zu erwartende maximale Länge zu oder stelle gleich auf Chararrays um.

Gruß Tommy

Edit: Ich habe einen D1 mini (ESP8266) über 1 Jahr im Dauerbetrieb mit Char-Arrays und Datenbank-Konnektion benutzt. Der einzige Ausfall war eine abgerauchte Fritzbox.

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.03.2020, 18:06
Beitrag #3
RE: Ich geb auf.. ESP8266 verliert Verbindung
(13.03.2020 15:37)juniq schrieb:  Das Problem tritt NUR bei Projekten auf, wo ich den NodeMCU auch als Client benutze. Und ich vermute da liegt irgendwo irgendwie der knackpunkt........

Welche EspCoreVersion verwendest du?


Gruß Fips

Gruß Fips

Meine Esp8266 & ESP32 Projekte
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.03.2020, 13:50
Beitrag #4
RE: Ich geb auf.. ESP8266 verliert Verbindung
(13.03.2020 18:06)Fips schrieb:  
(13.03.2020 15:37)juniq schrieb:  Das Problem tritt NUR bei Projekten auf, wo ich den NodeMCU auch als Client benutze. Und ich vermute da liegt irgendwo irgendwie der knackpunkt........

Welche EspCoreVersion verwendest du?


Gruß Fips

weiß nicht genau was du damit meinst
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.03.2020, 13:51
Beitrag #5
RE: Ich geb auf.. ESP8266 verliert Verbindung
(13.03.2020 15:43)Tommy56 schrieb:  Mache mal Deine Strings global und weise ihnen im Setup mit reserve(länge) die zu erwartende maximale Länge zu oder stelle gleich auf Chararrays um.

Gruß Tommy

Edit: Ich habe einen D1 mini (ESP8266) über 1 Jahr im Dauerbetrieb mit Char-Arrays und Datenbank-Konnektion benutzt. Der einzige Ausfall war eine abgerauchte Fritzbox.

werd ich probieren danke schonmal. in welchem Zusammenhang steht hier der variablen typ mit den Verbindungsabbrüchen?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.03.2020, 13:53
Beitrag #6
RE: Ich geb auf.. ESP8266 verliert Verbindung
Eine extensive Verwendung von String kann zum Fragmentieren des Heap führen und dann geht nix mehr. Artikel dazu.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.03.2020, 14:01
Beitrag #7
RE: Ich geb auf.. ESP8266 verliert Verbindung
(14.03.2020 13:53)Tommy56 schrieb:  Eine extensive Verwendung von String kann zum Fragmentieren des Heap führen und dann geht nix mehr. Artikel dazu.

Gruß Tommy

bevor ich alles aufmachen muss und hochlade, ist der Code so ok? hoffe ich habs richtig verstanden mit den char arrays.

Code:
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

const char* ssid = "Katholische Weihwasserwerke";
const char* password = "chickensoup";
int btn = 0;

IPAddress ip(192,168,2,123);  
IPAddress gateway(192,168,2,1);  
IPAddress subnet(255,255,255,0);  

WiFiServer server(80);

char array header;
char array currentLine = "";
char array payload;
char c;

void setup () {
  Serial.begin(115200);
  WiFi.config(ip, gateway, subnet);
  delay(100);
  WiFi.mode(WIFI_STA);

  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  server.begin();

  pinMode(D1, INPUT);
  pinMode(D2, OUTPUT);
  digitalWrite(D2, LOW);
}

void loop() {
  btn = digitalRead(D1);
  if (btn == 1) {
    Serial.println("DOOR BELL");
    if (WiFi.status() == WL_CONNECTED) {
      HTTPClient http;
      http.begin("http://192.168.2.110/door");
      int httpCode = http.GET();
      if (httpCode > 0) {
        payload = http.getString();
        Serial.println(payload);
      }
      http.end();
    }
    delay(1000);
  }

  if (WiFi.status() != WL_CONNECTED) {
    reeconnect();
  }

  WiFiClient client = server.available();
  if (client) {
    Serial.println("New Client.");
    currentLine = "";
    while (client.connected()) {
      if (client.available()) {
        c = client.read();
        Serial.write(c);
        header += c;
        if (c == '\n') {
          if (currentLine.length() == 0) {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();
            
            if (header.indexOf("GET /A") >= 0) {
              digitalWrite(D2, HIGH);
              Serial.println("DOOR UNLOCKED");
              delay(3000);
              digitalWrite(D2, LOW);
              Serial.println("DOOR LOCKED!");
            }
            
            client.println();
            break;
          } else {
            currentLine = "";
          }
        } else if (c != '\r') {
          currentLine += c;
        }
      }
    }
    header = "";
    client.stop();
    Serial.println("Client disconnected.");
    Serial.println("");
  }
}

void reeconnect() {  
  WiFi.config(ip, gateway, subnet);
  delay(100);
  WiFi.mode(WIFI_STA);

  Serial.print("REEEEonnecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  server.begin();
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.03.2020, 14:10
Beitrag #8
RE: Ich geb auf.. ESP8266 verliert Verbindung
(14.03.2020 13:53)Tommy56 schrieb:  Eine extensive Verwendung von String kann zum Fragmentieren des Heap führen und dann geht nix mehr. Artikel dazu.

Gruß Tommy

Ich seh schon das passt so nicht sry..
Was mich wundert, ist dass das alles aus offiziellen Beispiel Sketches stammt das mit dem Server und dem Client. Das muss doch dann irgendwie stabil funktionieren? Bisher habe ich nirgendwo einen Beispiel Sketch gefunden für einen HTTP Client + gleichzeitig HTTP Server. gibts sowas irgendwo?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  ESP8266-12E & Pullup I2C rev.antun 33 1.341 Heute 01:46
Letzter Beitrag: rev.antun
  ESP8266 exception[9] beim datei schreiben in SPIFFS gk_1 15 315 05.03.2021 11:52
Letzter Beitrag: gk_1
  433 MHz Steckdose mit ESP8266/Alexa schalten Kurt 8 220 04.03.2021 20:20
Letzter Beitrag: hotsystems
  Abgespeckter Sketch für ESP8266 -WLAN Anbindung / Anfänger mizieg 7 394 26.02.2021 17:45
Letzter Beitrag: N1d45
  ESP8266 OTA und Verwendung von TXD0/RXD0 rev.antun 27 1.163 22.02.2021 19:43
Letzter Beitrag: hotsystems
  GPS-Synchronisierung mit NodeMCU-ESP8266 Floke4 3 282 22.02.2021 19:33
Letzter Beitrag: rev.antun
  esp8266 zu html gk_1 9 541 19.02.2021 19:41
Letzter Beitrag: Tommy56
  ESP8266 SD CSV Datei Zeilen rückwärtz RobertHQ 7 498 14.02.2021 19:29
Letzter Beitrag: Corvus
  ESP8266 Webserver nach Zeit nicht mehr verfügbar. ESPWolf 21 2.055 02.02.2021 17:54
Letzter Beitrag: Tommy56
  ESP8266 - DLNA, Chromecast, Firestick & YouTube rev.antun 8 757 27.01.2021 21:31
Letzter Beitrag: nbk83

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste