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
Wifi Reconnect - nicht blockierend
28.11.2020, 18:59 (Dieser Beitrag wurde zuletzt bearbeitet: 28.11.2020 19:10 von Arduino4Fun.)
Beitrag #1
Wifi Reconnect - nicht blockierend
Hallo,

ich möchte in einer Anwendung die Tasteneingaben, Anzeigen in Verbindung mit WLAN+MQTT die Fehlerbehandlung so lösen, dass ein Reconnect des WLAN-Netzwerk bzw. der MQTT Verbindung den Rest der Apllikation nicht beeinträchtigt z.B. Tasteneingaben etc. funktionieren weiterhin, daher keine (blockierende) Schleifen und keine delay() und möglichst kein ESP.restart().

Nun zur Frage. Welche Anweisungen sind für ein WLAN Reconnect mindestens aufzurufen um das Netzwerk erneut zu starten?

Zur Einrichtung des Netzwerk mit statischer IP reicht ja
Code:
WiFi.mode( WIFI_STA );
  WiFi.persistent( false );
  WiFi.config( ip,gateway,subnet );
  WiFi.begin( ssid,password );
und wie ich gelernt habe Rolleyes
Code:
WiFi.persistent( false );
damit die Settings nicht im Flash abgelegt werden

Weitere Frage. Wie testet ihr die "Nicht Funktion" sprich WLAN Unterbrechung ohne den häuslichen Frieden zu stören. Fehler per Tastendruck injizieren - welche sinnvolle Anweisung?

Gruß Arduino4Fun
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.11.2020, 19:09
Beitrag #2
RE: Wifi Reconnect - nicht blockierend
(28.11.2020 18:59)Arduino4Fun schrieb:  Weitere Frage. Wie testet ihr die "Nicht Funktion" sprich WLAN Unterbrechung ohne den häuslichen Frieden zu stören. Fehler per Tastendruck injizieren - welche sinnvolle Anweisung?
Wenn Du ein Nichtvorhandensein des WLAN testen willst, dann musst Du entweder das WLAN abschalten oder einen Faradayschen Käfig drumrum bauen. Aufpassen, die USB-Strippe kan den Käfig löchrig machen Wink

Du kannst den Status Deiner WLAN-Verbindung abfragen.

Um welchen Prozessor geht es? Meine ESP8266 haben sich immer selbst reconnected.

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
28.11.2020, 19:14 (Dieser Beitrag wurde zuletzt bearbeitet: 28.11.2020 19:18 von Arduino4Fun.)
Beitrag #3
RE: Wifi Reconnect - nicht blockierend
Hallo Tommy,

meine Idee ist eine andere. Per Taste die ich über ESP einlese, manipuliere ich die ESP SW (z.b. falsche SSID) und dieser läuft dann die Routinen für die Fehlerbehandlung durch, danach weiterer Tastendruck, sprich toggeln richtige SSID, dann muss der ESP wieder einsteigen.

Fehlerstimmulierung in Anwendung, nicht von Aussen durch z.B. Abschaltung des Netzwerk

Ziel HW ist 8266 und ESP32

Gruß Arduino4Fun
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.11.2020, 19:22
Beitrag #4
RE: Wifi Reconnect - nicht blockierend
Die geänderte SSID wird ihn aber nicht weiter interessieren, wenn er ins Netz eingeklinkt ist.
Auf alle Fälle solltest Du beim ESP8266 gleich am Anfang vom Setup schreiben

Code:
WiFi.persistent(false);
Ob es das beim ESP32 gibt, musst Du schauen.
Wenn Du ohne diese Zeile schon mal connected warst, musst Du die WiFi-Settings beim Hochladen mit löschen.

Ob Deine Idee funktioniert, musst Du experimentell ermitteln. Du kannst uns das Ergebnis gern mitteilen.

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
29.11.2020, 08:35
Beitrag #5
RE: Wifi Reconnect - nicht blockierend
Hallo,

die Eventhandler benutzen:
Code:
...
WiFiEventHandler wifiConnectHandler;
WiFiEventHandler wifiDisconnectHandler;

void connectToWifi(void);
void onWifiConnect(const WiFiEventStationModeGotIP& event);
...

setup()
{
...
// Start WiFi
  wifiConfig();

  wifiConnectHandler = WiFi.onStationModeGotIP(onWifiConnect);
  connectToWifi();
...
}

// ###############################################################
// ---------------------- WiFi-Tools ------------------------------
// ###############################################################

void connectToWifi()
{
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid.c_str(), password.c_str());
}

//----------------------------------------------------------------------

void onWifiConnect(const WiFiEventStationModeGotIP& event)
{
#ifdef DEBUG
  Serial.println("Connected to Wi-Fi.");
  Serial.println(WiFi.localIP());
#endif

// Hier bei Bedarf noch MQTT connect einfügen.

}

//----------------------------------------------------------------------

void onWifiDisconnect(const WiFiEventStationModeDisconnected& event)
{
  wifiReconnectTimer.once(2, connectToWifi);
}

WiFi.persistent(false); habe ich nie gesetzt, das bleibt aktiv. Die ESP8266 laufen fast alle 24/7 und bisher ist kein Flash gestorben, so oft verbindet er sich ja da nicht neu.

Gruß aus Berlin
Michael
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.11.2020, 10:07
Beitrag #6
RE: Wifi Reconnect - nicht blockierend
Hallo Michael,

danke für die Antwort. Zwei Fragen

wie bindest du den "onWifiDisconnect" handler im setup() ein und was ist der Inhalt der Funktion "wifiReconnectTimer.once(2, connectToWifi);" bzw. wo deklariert

Danke und Gruß Arduino4Fun
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.11.2020, 10:32
Beitrag #7
RE: Wifi Reconnect - nicht blockierend
Hallo Michael,

Thema weitestgehend gelöst. Habe nun folgenden "Basis-Code".

Code:
#define   BTN1  D3

OneButton Btn1_Key( BTN1,true );

WiFiEventHandler wifiConnectHandler;
WiFiEventHandler wifiDisconnectHandler;

void WiFi_connect(void);
void onWifiConnect(const WiFiEventStationModeGotIP& event);
void onWifiDisconnect(const WiFiEventStationModeDisconnected& event);

//----------------------------------------------------------------------
void Btn1_Key_Proc()
{
  static bool WLAN_Off = true;

  if( WLAN_Off==true )
  {
    Serial.println( "Switch WLAN OFF" );
    WiFi.disconnect();
    WiFi.mode( WIFI_OFF );
    WiFi.forceSleepBegin();
    WLAN_Off = false;
  }
  else
  {
    WiFi_connect();
    Serial.println( "Switch WLAN ON" );
    WLAN_Off = true;
  }
}

//----------------------------------------------------------------------
void WiFi_connect()
{
  WiFi.mode( WIFI_STA );
  WiFi.persistent( false );
  WiFi.config( ip,gateway,subnet );
  WiFi.begin( ssid,password );
}

//----------------------------------------------------------------------
void onWifiConnect(const WiFiEventStationModeGotIP& event)
{
  Serial.print("Connected to WiFi: ");
  Serial.println( WiFi.localIP() );

  // Hier bei Bedarf noch MQTT connect einfügen.
}

//----------------------------------------------------------------------
void onWifiDisconnect(const WiFiEventStationModeDisconnected& event)
{
  // wifiReconnectTimer.once(2, connectToWifi);
  
  Serial.println("WiFi Disconneted");
}

//----------------------------------------------------------------------
void setup()
{
  Serial.begin(115200);

  Btn1_Key.attachClick( Btn1_Key_Proc );

  wifiConnectHandler = WiFi.onStationModeGotIP( onWifiConnect );
  wifiDisconnectHandler = WiFi.onStationModeDisconnected( onWifiDisconnect );  
  
  WiFi_connect();
}

//----------------------------------------------------------------------
void loop()
{
  Btn1_Key.tick();
}
Mit dem Taster des WeMos Button Shield kann ich bereits WLAN deaktivieren und wieder einschalten. Die Routinen des Handler werden erfolgreich angesprungen.
Jetzt muss ich mir noch eine Logik für die Behandlung des Disconnect überlegen und MQTT einbinden.

Danke und Gruß Arduino4Fun
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Relay über NFC und Wifi schalten, bitte um Hilfe bei der Programmierung Tirol-Daniel 28 1.736 17.04.2021 13:31
Letzter Beitrag: Tommy56
  Suche Erfahrungen und Hilfe mit ESP32-CAM WiFi + Bluetooth Modul Kamera Modul esp32 Christian_Moba-Arduino 28 2.612 04.04.2021 08:24
Letzter Beitrag: amithlon
  Wifi-Modul für Netzteil RD6006 HWH 2 600 07.03.2021 16:50
Letzter Beitrag: Bitklopfer
  Reset nicht gleich Reset? Mirkan 33 4.610 06.03.2021 15:05
Letzter Beitrag: Mirkan
  D1 Mini - WLAN bei Frost nicht möglich? KlaRa 45 3.458 10.02.2021 11:24
Letzter Beitrag: hotsystems
  ESP8266 Webserver nach Zeit nicht mehr verfügbar. ESPWolf 21 2.686 02.02.2021 17:54
Letzter Beitrag: Tommy56
  433MHz-WiFi-MQTT-Sender nbk83 25 2.381 04.01.2021 16:35
Letzter Beitrag: nbk83
  Sketch upload funktioniert plötzlich nicht mehr basementmedia 2 662 02.01.2021 17:31
Letzter Beitrag: Jan Hirt
  ESP32 Devkit c4 Oled und RFID RC522 betreiben klappt nicht steffus 1 676 23.12.2020 12:45
Letzter Beitrag: hotsystems
  Wifi Manager NeuHierAufDerSucheNachHilfe 1 573 21.12.2020 21:54
Letzter Beitrag: Tommy56

Gehe zu:


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