- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 5 von 5

Thema: ESP8266 / Arduino: Verbindungsproblem zum Router bei blockierter IP nach Neustart

  1. #1
    HaWe
    Gast

    ESP8266 / Arduino: Verbindungsproblem zum Router bei blockierter IP nach Neustart

    Anzeige

    Praxistest und DIY Projekte
    hi,
    mein ESP8266 Wifi Server funktioniert zwar meist gut, aber manchmal (gerade über Nacht) verliert er wohl die Verbindung zu meinem Speedport Router, und wenn ich dann morgens aufs Display gucke, sehe ich, dass er in der setup-Routine festhängt, sich versucht einzuloggen/anzumelden, aber es wohl nicht klappt (Anzeige Progress zwischen 80 und 98%):

    Code:
    #include <ESP8266WiFi.h>
    #include <ESP8266WebServer.h>
    WiFiServer   wifiserver(http_port);
    ESP8266WebServer lanserver(8081);
    
    void setup() {
      // **SNIP**
    
      WiFi.begin(ssid, password);
      WiFi.config(this_ip, gateway, subnet);   // feste IP
    
      while (WiFi.status() != WL_CONNECTED) {    // <<<<<<<<<<<<<<<<<<<<<<<<
        if(digitalRead(PIN_BTND5)) display.setRotation(0);
        else display.setRotation(2);
        delay(500);
        Serial.print(".");
    
        display.clearDisplay();
        display.setCursor( 0, 20);  display.print("WiFi connecting...");
        drawHorizontalBargraph( 0, 30, (int16_t) display.width(), 9, 1, progress);     // <<<<<<<<<<<<<<<<<<<<<<<<
        display.setCursor( 0, 40);  display.print((String)progress + "%");         
        if (progress >= 98) {
          progress = 80;
          Serial.println();
        }
        display.display();
    
        if (progress < 10) progress += 5;
        else if (progress < 50) progress += 2;
        else if (progress < 90) progress += 1;
      }
      display.clearDisplay();
      progress = 100;
      display.setCursor( 0, 20);  display.print("WiFi connecting...");
      drawHorizontalBargraph( 0, 30, (int16_t) display.width(), 9, 1, progress);
      display.setCursor( 0, 40);  display.print((String)progress + "%");
      display.display();
      delay(300);
    
      Serial.println("");
      Serial.print("WiFi connected: ");
      Serial.println(WiFi.gatewayIP());
    
    
      //----------------------------------------
      // Start the WiFi server (-> www)
      wifiserver.begin();
      Serial.println("WiFi Server started");
    
      //----------------------------------------
      // Start the ESP LAN server (-> ESP client)
      lanserver.on("/",handleRoot) ;
      lanserver.on("/client/client0/", handleClientIOs);
      delay(100);
      lanserver.on("/client/client1/", handleClientIOs);
      delay(100);
      lanserver.on("/client/client2/", handleClientIOs);
      delay(100);
      lanserver.begin();
      Serial.println("ESP Server started");
    
      // **SNIP**
    
    }
    Auch durch resetten am esp klappt es nicht (er startet dann zwar neu, blockiert aber sofort erneut wieder), offenbar ist die statische IP (x.x.x.200) am Router (noch) blockiert, erst wenn ich kurzzeitig das Netzteil komplett ausstöpsele und dann neu einstecke, funktioniert es wieder (sofort, ohne Probleme) .

    Das gleiche Problem tritt auf, wenn der ESP via USB-Kabel mit meiner Arduino-IDE auf dem PC verbunden ist und ich eine neue Programmversion aufspiele, auch dann versucht er sich am Router anzumelden, wird aber blockiert. Auch hier hilft nur kurzzeitige Entfernung des USB/Stromkabels (Stromversorgung via USB-Kabel), danach läuft alles wieder.

    Ich müsste jetzt also irgend welche Befehle einfügen, die dieses Verbindungsproblem bei blockierter IP nach Neustart kurzfristig händeln, nur wie könnte man das machen?

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    Komfortfrage:

    Wäre es nicht sinnvoller DHCP zu verwenden und dem ESP (Mac Adresse ist ja bekannt) eine feste IP im Router zu geben? (ich meine damit reservieren, keine fest IP und DHCP-Mischung)
    So würde der ESP immer die gleiche IP haben und du würdest irgendwelche Adresskonflikte vermeiden.


    Ich meine das wäre der einfacherere Weg als im Code jetzt noch Kopfstände zu machen um Edge Cases zu behandeln.
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  3. #3
    HaWe
    Gast
    Zitat Zitat von Ceos Beitrag anzeigen
    Komfortfrage:

    Wäre es nicht sinnvoller DHCP zu verwenden und dem ESP (Mac Adresse ist ja bekannt) eine feste IP im Router zu geben? (ich meine damit reservieren, keine fest IP und DHCP-Mischung)
    So würde der ESP immer die gleiche IP haben und du würdest irgendwelche Adresskonflikte vermeiden.


    Ich meine das wäre der einfacherere Weg als im Code jetzt noch Kopfstände zu machen um Edge Cases zu behandeln.
    damit kenne ich mich leider nicht aus, ich sehe auch im Router nur Port-Umleitung (zwecks dynDNS) für feste IPs, nicht für MAC (und kenne die bisher auch noch nicht einmal - im Router wird der HTTP Port (80) über den Gerätenamen ESP_34334DF o.ä. geschaltet), und wüsste auch gar nicht, wie ich meinen bisherigen Code umschreiben müsste, samt Umkonfigurierung des Routers.

    Andererseits hat ja der ESP bereits schon eine feste, statische IP:

    Code:
    WiFi.config(this_ip, gateway, subnet);   // feste IP, this_ip="192.168.2.200"
    - er scheint nur in solchen Momenten (noch) durch seine eigene, vorherige Anmeldung unter derselben IP blockiert zu werden.

    - - - Aktualisiert - - -

    PS,
    DHCP ist auch reserviert von x.x.x.100 bis x.x.x.199 , daher keine Konflikte von DHCP mit festen IPs >= 200

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    Das Problem das ich sehe ist der Mischbetrieb von DHCP und festen IP Adressen, gut möglich dass die FW im ESP da Probleme bekommt und ich denke dem wird auch nur schwer beizukommen sein.

    "Üblicherweise" verwendet man im WLAN ausschließlich DHCP Bindung (in seltenen Fällen auch feste IPs aber nicht gemischt). Gut möglich das du dich in einem eher experimentellem Feld bewegst und professionelle Hilfe im Github für die Lib finden könntest, aber das wäre wieder nur in englischer Sprache zu realisieren.

    Was du aber auch machen kannst um das Risiko zu minimieren wäre einen 2ten Router anzuschließen der einfacher zu verwalten ist. Und wenn er mal "zerspielt" ist, steckst den PC halt für Internet in den alten Router zurück und setzt den Bastel Router auf Werkseinstellung zurück.

    Ich hab zwar mal kurz gesucht aber keine Konkreten Informationen gefunden die dein Problem umreißen, das ist schon eine relativ spezielle Art damit zu arbeiten. Aber das ist der Preis den man für "Einfachheit" (libs und Arduino im allgemeinen VS Bare Metal gesehn) zahlt, man legt sich auf gewisse Szenarien fest und alles abseits davon tendiert in die Richtung Bare Metal Programmierung.
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  5. #5
    HaWe
    Gast
    ja, vermutlich kann das Problem nur jemand lösen, der die Arduino WiFi libs für ESP8266 sehr gut kennt.

Ähnliche Themen

  1. Pegelwandler RX/TX Arduino ESP8266
    Von Cysign im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 06.02.2018, 00:29
  2. arduino ide mit esp8266
    Von NotEvil im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 4
    Letzter Beitrag: 12.01.2017, 15:17
  3. Arduino Nano Neustart Bootloader Problem
    Von fucktheking im Forum Arduino -Plattform
    Antworten: 5
    Letzter Beitrag: 07.04.2016, 09:31
  4. Kein Interrupt nach Reset/Neustart
    Von Cheffe Boss im Forum C - Programmierung (GCC u.a.)
    Antworten: 16
    Letzter Beitrag: 16.08.2013, 22:13
  5. Motorport wird nach Neustart angesteuert am ATMEGA 32 ?
    Von M.Huhnke im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 20.01.2010, 16:00

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress