ESP8266 WLAN auto-reconnect

Hallo,

ich such mir grad nen Wolf, find aber nix.

Was ich suche ist eine Routine, die einen ESP8266 nach einer WLAN-Verbindungsunterbrechung automatisch dazu veranlasst, sich erneut zu verbinden.

Gruß Chris

if (WiFi.status() != WL_CONNECTED) Connect();

Gruß Fips

Was ich suche ist eine Routine, die einen ESP8266 nach einer WLAN-Verbindungsunterbrechung automatisch dazu veranlasst, sich erneut zu verbinden.

Das ist doch das Standard Verhalten eines ESP, oder nicht?

Hallo,

combie:
Das ist doch das Standard Verhalten eines ESP, oder nicht?

ja, ist es und manchmal schneller als man denkt. Ist mein Bekannter letztens drauf reingefallen, der hat das Connect-Event eingebunden, das hat aber manchmal nicht gefeuert, weil der ESP nach Reset schon online war, bevor der Event-Handler im Sketch angemeldet wurde...
WL_CONNECTED kann auch tückisch sein, weil es connected meldet wenn er am Router ist. Man sollte auch auf gotIP abfragen, wenn der DHCP mal länger braucht, kann man sonst noch nicht sinnvoll weitermachen, z.B. beim MQTT-Broker anmelden.

Gruß aus Berlin
Michael

Hallo,

falls Du nicht genau weisst was Du mit der Zeile von Fips anfangen sollst.

schreibe die Zeile mit in den loop. connect() ist eine function in der die Verbindung dann hergestellt wird. Du musst natürlich noch überlegen was du ansonsten noch machst wenn keine Verbingung hergestellt werden kann, hängt aber von Deiner Anwendung ab.

bei mir sieht das so aus.
Heinz

setup(){

WIFI_login();
.
.
}


loop{

 if (WiFi.status() != WL_CONNECTED) WIFI_login();

.
.
.

}




void WIFI_login() {
  WiFi.persistent(false);   // daten nicht in Flash speichern
  WiFi.mode(WIFI_STA);
  Serial.printf("Connecting to %s ", ssid);
  WiFi.begin(ssid, password);
  WiFi.config(staticIP, gateway, subnet);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println(" connected");
  Serial.print("local IP:");
  Serial.println(WiFi.localIP());

}

Edit: Hinweis von Tommy geändert, danke

Kleine Korrektur - der Kommentar ist falsch. Das wird im Flash, nicht im EEPROM abgelegt.

WiFi.persistent(false);   // daten nicht in EEprom

Gruß Tommy

Hallo,

Tommy56:
Kleine Korrektur - der Kommentar ist falsch. Das wird im Flash, nicht im EEPROM abgelegt.

WiFi.persistent(false);   // daten nicht in EEprom

naja, alles ist relativ, da der ESP8266 ja sowieso keinen EEPORM hat. :wink:

Ich schalte es nicht ab, er soll ja reconnecten und da die 24/7 laufen und immer im selben WLAN sind, leben die auch alle noch.

Gruß aus Berlin
Michael

Der EEPROM ist eine Emulation im Flash. Ich wollte nur vermeiden, dass jemand denkt, da wäre ein EEPROM drin.
Für 24/7 ist das auch ok, aber für die "Experimentierprozessoren", die laufend gebootet werden, macht es schon Sinn.

Gruß Tommy

Hallo,
mit Bezug auf

esp8266wifi/generic-class.rst

Ich hab das eigendlich so verstanden das das automatische Verbinden beim starten gemacht wird oder beim aufwecken, also vor setup(). Wenn wärend des loop die Verbindung verloren geht muss man halt neu verbinden. Wenn das dann dauerhaft nicht klappt würde mit WIFI.begin() bei jedem Versuch in den Flash geschrieben. Um das zu vermeiden gibt es WiFi.persistent(false).

ich hab das aber noch nicht wirklich ausprobiert, kann also sein das ich mich da irre.

Heinz