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
ESP8266 Webserver nach Zeit nicht mehr verfügbar.
11.01.2021, 17:25 (Dieser Beitrag wurde zuletzt bearbeitet: 11.01.2021 17:31 von ESPWolf.)
Beitrag #1
ESP8266 Webserver nach Zeit nicht mehr verfügbar.
Hallo Techniker- & ProgrammiererInnen!

Vorab zu meiner Geschichte / meinem Vorhaben:
Als eher Neuanfänger würde ich Eure Hilfe und guten Ideen gerne auffassen und dazulernen.

Umsetzten würde ich gerne einen Web Service mittels Hardware ESP8266 01-s ,
eine entsprechende Beschaltung mittels Relais sowie eine einfache Webseite.
Jene konnte ich mir aus dem im Netz befindlichen Snippets bereits zusammentragen.

Der folgende Code ( wie unschön jener auch geschrieben sein mag ) läuft soweit auf folgender Hardware:
  • ESP 8266 01-s
  • Node MCU Development Board

Zum Problem / Phänomen:
Der WebService läuft, der Programmcode tut soweit das was er soll. Leider ist der Webserver nach einiger Zeit, +- 30 Stunden Laufzeit nicht mehr erreichbar. Nach einem Reboot des WLAN - Routers melden sich beide Testumgebungen wieder normal die vorhin genannte Zeitspanne / Dauer lang.

Beide Hardwareumgebungen verlieren scheinbar nicht die Verbindung zum Router. Eine Antwort mittels Response auf die PING- Anfrage ( auch wenn der WebServer nicht mehr erreichbar ist ) ist gegeben.

Folgendes habe ich mit selbigem Ergebnis bereits versucht:
.) Routermodell, WLAN SSID sowie den WLAN- Kanal geändert
.) Update der Beiden ESP - Modelle auf die letzte Version [ NONOS_SDK-version_3.0.4 ]

Was ich feststellen konnte ist, dass sich nach dem Firmware - Update die Verfügbarkeit des WebServer verbessert hat, jener auch bei beiden Hardwarekomponenten nach einiger "undefinierter" Zeit wieder zurück ins Leben finden, ohne die Schaltung oder den Router von der Spannungsversorgung trennen zu müssen.


Hier mein Code zum gegebenen Thema:

Code:
// Load Wi-Fi library
#include <ESP8266WiFi.h>

// Replace with your network credentials
const char* ssid = "Kabellos";
const char* password = "Cablefree";

// Set web server port number to 80
WiFiServer server(80);

// Variable to store the HTTP request
String header;

// Auxiliar variables to store the current output state
String output0State = "off";
String output1State = "off";

// Assign output variables to GPIO pins

const int output0 = 0;
const int output1 = 2;

unsigned long pMillis = 0;
unsigned long cMillis = 0;
unsigned long pMillis1 = 0;
unsigned long cMillis1 = 0;
// Pause time 15 sec.
const long interval = 1500000;



void setup() {
  Serial.begin(115200);
  // Initialize the output variables as outputs
  pinMode(output0, OUTPUT);
  pinMode(output1, OUTPUT);

  // Set outputs to LOW
  digitalWrite(output0, LOW);
  digitalWrite(output1, LOW);

  // Connect to Wi-Fi network with SSID and password
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  WiFi.mode(WIFI_STA);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  // Print local IP address and start web server
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  server.begin();
}
// Keep GPIO high while interval is not used up
void Relais0Off() {
  if (output0State == "on") {
    if ( cMillis <= interval )
    {
      cMillis ++;
    }
    else {
      digitalWrite(output0, LOW);
      output0State = "off";
      cMillis = 0;
    }

  }

}
// Keep GPIO high while interval is not used up
void Relais1Off() {
  if (output1State == "on") {

    if ( cMillis1 <= interval )
    {
      cMillis1 ++;
    }
    else {
      digitalWrite(output1, LOW);
      output1State = "off";
      cMillis1 = 0;
    }

  }

}

void loop() {
  while (WiFi.status() != WL_CONNECTED) {
    Serial.println("WiFi not connected \n reboot");
    ESP.restart();
  }
  WiFiClient client = server.available();   // Listen for incoming clients
  if (client) {                             // If a new client connects,
    Serial.println("New Client.");          // print a message out in the serial port
    String currentLine = "";                // make a String to hold incoming data from the client
    while (client.connected()) {            // loop while the client's connected
      if (client.available()) {             // if there's bytes to read from the client,
        char c = client.read();             // read a byte, then
        Serial.write(c);                    // print it out the serial monitor
        header += c;
        if (c == '\n') {                    // if the byte is a newline character
          // if the current line is blank, you got two newline characters in a row.
          // that's the end of the client HTTP request, so send a response:
          if (currentLine.length() == 0) {
            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
            // and a content-type so the client knows what's coming, then a blank line:
            // dXNlcjohRG9vcjIxIQ== = 'user:entrancepassword' (user:pass) base64 encode
            // Finding the right credential string, then loads web page
            if (header.indexOf("dXNlcjplbnRyYW5jZXBhc3N3b3Jk") >= 0 ) {
              client.println("HTTP/1.1 200 OK");
              client.println("Content-type:text/html");
              client.println("Connection: close");
              client.println();

              // turns the GPIOs on and off
              if (header.indexOf("GET /0/on") >= 0) {
                Serial.println("GPIO 0 on");
                output0State = "on";
                digitalWrite(output0, HIGH);
              }
              else if (header.indexOf("GET /0/off") >= 0) {
                Serial.println("GPIO 0 off");
                output0State = "off";
                digitalWrite(output0, LOW);
              }
              else if (header.indexOf("GET /1/on") >= 0) {
                Serial.println("GPIO 1 on");
                output1State = "on";
                digitalWrite(output1, HIGH);

              } else if (header.indexOf("GET /1/off") >= 0) {
                Serial.println("GPIO 1 off");
                output1State = "off";
                digitalWrite(output1, LOW);
              }

              // Display the HTML web page
              client.println("<!DOCTYPE html><html>");
              client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
              client.println("<head><meta http-equiv=\"refresh\" content=\"5; url=../\" />");
              client.println("<link rel=\"icon\" href=\"data:,\">");
              // CSS to style the on/off buttons
              client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
              client.println(".button { background-color: #195B6A; border: none; color: white; padding: 16px 40px;");
              client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
              client.println(".button2 {background-color: #77878A;}</style></head>");

              // Web Page Heading
              client.println("<body><h1>Relais- Beschaltung </h1>");
              // Display current state, and ON/OFF buttons for GPIO 0
              client.println("<p>Relais 1" + output0State + "</p>");
              // If the output0State is off, it displays the ON button
              if (output0State == "off") {
                client.println("<p><a href=\"/0/on\"><button class=\"button\">START</button></a></p>");
              } else {
                client.println("<p><a href=\"/0/off\"><button class=\"button button2\">STOP</button></a></p>");
              }

              // Display current state, and ON/OFF buttons for GPIO 1
              client.println("<p>Relais 2" + output1State + "</p>");
              // If the output0State is off, it displays the ON button
              if (output1State == "off") {
                client.println("<p><a href=\"/1/on\"><button class=\"button\">START</button></a></p>");
              } else {
                client.println("<p><a href=\"/1/off\"><button class=\"button button2\">STOP</button></a></p>");
              }
              client.println("</body></html>");

              // The HTTP response ends with another blank line
              client.println();
              // Break out of the while loop
              break;
            }
            else {
              client.println("HTTP/1.1 401 Unauthorized");
              client.println("WWW-Authenticate: Basic realm=\"Secure\"");
              client.println("Content-Type: text/html");
              client.println();
              client.println("<html>Authentication failed</html>");
              break;
            }
          } else { // if you got a newline, then clear currentLine
            currentLine = "";
          }

        } else if (c != '\r') {  // if you got anything else but a carriage return character,
          currentLine += c;      // add it to the end of the currentLine
        }
      }
      Relais0Off();
      Relais1Off();
    }
    // Clear the header variable
    header = "";
    // Close the connection
    client.stop();
    Serial.println("Client disconnected.");
    Serial.println("");
  }
  Relais0Off();
  Relais1Off();
}

Wo sind denn hier die Fehler versteckt...
Danke vorab für Eure Zeit und Hilfe!

Gruß aus Niederösterreich!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.01.2021, 17:38
Beitrag #2
RE: ESP8266 Webserver nach Zeit nicht mehr verfügbar.
Welche Relais verwendest Du (Link bitte).

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
11.01.2021, 17:48
Beitrag #3
RE: ESP8266 Webserver nach Zeit nicht mehr verfügbar.
Und der von dir festgestellte Fehler tritt auf beiden Controllern auf ?

Was soll das Relais machen ?

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.01.2021, 18:09
Beitrag #4
RE: ESP8266 Webserver nach Zeit nicht mehr verfügbar.
(11.01.2021 17:38)Tommy56 schrieb:  Welche Relais verwendest Du (Link bitte).

Gruß Tommy

Hallo Tommy56!

Folgendes Relais wird verwendet:
Link: https://cdn-reichelt.de/documents/datenb...NBLATT.pdf

Folgendes möchte ich noch erwähnen:
.) Das Phänomen mit dem nicht erreichbaren Webserver tritt ebenso auf, wenn keine Ausgänge an den GPIO`s angeschlossen sind sprich das Board / die Boards auf dem Steckbrett "standalone" ohne angeschlossene Komponenten betrieben werden.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.01.2021, 18:17 (Dieser Beitrag wurde zuletzt bearbeitet: 11.01.2021 18:22 von ESPWolf.)
Beitrag #5
RE: ESP8266 Webserver nach Zeit nicht mehr verfügbar.
(11.01.2021 17:48)hotsystems schrieb:  Und der von dir festgestellte Fehler tritt auf beiden Controllern auf ?

Was soll das Relais machen ?

.) Derzeit befindet sich die Schaltung noch nicht im Echtbetrieb - Aufgrund der eher unzuverlässigen Erreichbarkeit des WebServers.

.) Umgesetzt werden soll eine Beschaltung eines Torantriebes. Mittels gepostetem Code und dem Relais soll ein Tastendruck auf einen Schalter simuliert werden.
Dies funktioniert auch Grundsätzlich soweit. Anbei noch ein Schaltungsentwurf mit bereits durchgeführter Umsetzung auf einer Lochrasterplatine.

.) Das Phänomen tritt bei beiden Boards
  • ESP8266 01-s
  • Node MCU Development Board
mit und ohne angeschlossenem Relais und davorliegender Schaltung auf.


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.01.2021, 18:19 (Dieser Beitrag wurde zuletzt bearbeitet: 11.01.2021 18:19 von Tommy56.)
Beitrag #6
RE: ESP8266 Webserver nach Zeit nicht mehr verfügbar.
Das Datenblatt ist nichtssagend. Da kann man nicht erkennen, ob eine Freilaufdiode verbaut ist. Optokoppler scheint jedenfalls nicht da zu sein.

Die Fehler treten auch ohne Relais auf? Dann würde ich auf Speicherprobleme tippen, auch wenn die Fraktion "Das geht alles mit String beim ESP" dem widersprechen wird.

Versuche mal alle konstanten Texte mit dem F-Macro ins Progmem zu schieben, um den RAM zu entlasten.

Also z.B.:
Code:
// alt
Serial.print("Connecting to ");
client.println("HTTP/1.1 200 OK");
// neu
Serial.print(F("Connecting to "));
client.println(F("HTTP/1.1 200 OK"));

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
11.01.2021, 18:20 (Dieser Beitrag wurde zuletzt bearbeitet: 11.01.2021 18:23 von hotsystems.)
Beitrag #7
RE: ESP8266 Webserver nach Zeit nicht mehr verfügbar.
(11.01.2021 18:09)ESPWolf schrieb:  Folgendes Relais wird verwendet:
Link: https://cdn-reichelt.de/documents/datenb...NBLATT.pdf

Folgendes möchte ich noch erwähnen:
.) Das Phänomen mit dem nicht erreichbaren Webserver tritt ebenso auf, wenn keine Ausgänge an den GPIO`s angeschlossen sind sprich das Board / die Boards auf dem Steckbrett "standalone" ohne angeschlossene Komponenten betrieben werden.

Auch wenn es nicht die direkte Ursache für dein Problem ist, sehe ich aber ein Problem mit dem Relais. Das ist für 5Volt und damit nicht für 3,3V geeignet.
Ist auf dem Relais ein Transistor zur Ansteuerung verbaut ?

Edit:
Ok, dein letzter Post beantwortet diese Frage.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.01.2021, 18:24
Beitrag #8
RE: ESP8266 Webserver nach Zeit nicht mehr verfügbar.
(11.01.2021 18:19)Tommy56 schrieb:  Das Datenblatt ist nichtssagend. Da kann man nicht erkennen, ob eine Freilaufdiode verbaut ist. Optokoppler scheint jedenfalls nicht da zu sein.

Die Fehler treten auch ohne Relais auf? Dann würde ich auf Speicherprobleme tippen, auch wenn die Fraktion "Das geht alles mit String beim ESP" dem widersprechen wird.

Versuche mal alle konstanten Texte mit dem F-Macro ins Progmem zu schieben, um den RAM zu entlasten.

Also z.B.:
Code:
// alt
Serial.print("Connecting to ");
client.println("HTTP/1.1 200 OK");
// neu
Serial.print(F("Connecting to "));
client.println(F("HTTP/1.1 200 OK"));

Gruß Tommy

Hallo Tommy Tommy56!

Danke für die schnelle Antwort!
Ich versuche dies baldmöglichst umzusetzen und melde mich hierzu nach einem Test dessen rück!

Gruß,
Wolf
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 - Client, immer wieder ... rev.antun 37 613 19.01.2021 23:09
Letzter Beitrag: rev.antun
  Install des esp8266 Boardverwalters md_39 4 171 15.01.2021 15:33
Letzter Beitrag: md_39
  ESP8266 Webseite wird verzögert aktualisiert delucks 6 513 05.01.2021 23:16
Letzter Beitrag: delucks
  ESP8266/32: Captive Portal und sprung zum "normalen" Browser J.Arnold 2 332 05.01.2021 22:36
Letzter Beitrag: J.Arnold
  Sketch upload funktioniert plötzlich nicht mehr basementmedia 2 306 02.01.2021 17:31
Letzter Beitrag: Jan Hirt
  Logging nach Serial und/oder Telnet miq19 15 726 31.12.2020 12:35
Letzter Beitrag: Tommy56
  ESP32 Devkit c4 Oled und RFID RC522 betreiben klappt nicht steffus 1 316 23.12.2020 12:45
Letzter Beitrag: hotsystems
  Variablen NodeMCU ESP8266-E Speicher Sparen rev.antun 47 2.312 17.12.2020 00:58
Letzter Beitrag: rev.antun
  NodeMCU ESP8266 - IDE Verbindungsprobleme bei D0-Reset Verbindung ayykaramba 8 834 14.12.2020 12:09
Letzter Beitrag: N1d45
  Daten auf webserver printen Andreas-ESP32-Beginner 4 428 13.12.2020 17:21
Letzter Beitrag: miq19

Gehe zu:


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