ESP32-C6 WiFi Verbindung nach light sleep nicht mehr möglich

OP #7735743
Lesenswert?

Hallo zusammen.

Ich habe mir den ESP32-C6 angeschaut und festgestellt, dass der Stromverbrauch im light sleep mit 180 uA endlich nicht mehr absolut katastrophal ist. Bei hoher Messhäufigkeit sollte der ESP32-C6 damit im light sleep bei hoher Messhäufigkeit besser Batterielaufzeiten erreichen als im deep sleep.

Ich benutze schon einige ESP8266/32 aber nur mit deep sleep.

Also gleich 2 verschiedene Boards bestellt und losgelegt. Zuerst braucht der Chip eher 300uA im light sleep und damit fast doppelt so viel wie im Datenblatt aber ok... Die Boards sind nicht das Problem beide <20uA im deep sleep. Schlimmer ist allerdings, dass der ESP nach dem Aufwachen keine Verbindung mehr herstellen kann.

Hier mein Minnimalcode erstellt mit der Arduino IDE:

1
while (1){
2
  delay(1000);
3
  WiFi.mode(WIFI_STA);
4
  WiFi.begin(ssid,password);
5
  testdaten_senden();
6
  
7
  WiFi.disconnect(true);
8
  WiFi.mode(WIFI_OFF);
9
  delay(1000);
10
  esp_sleep_enable_timer_wakeup(0.1 * 60 * 1000 * 1000);
11
  esp_light_sleep_start();
12
}

Kommentiere ich die Zeile esp_light_sleep_start(); aus funktioniert alles wie gewünscht. Mit light sleep bleibt das Programm bei WiFi.mode(WIFI_STA); hängen.

Die letzte Meldung die ich vom ESP bekomme lautet: [NetworkEvents.cpp:119] checkForEvent(): Network Event: 9 - WIFI_READY Ohne sleep folgt etwa nach ~30uS: [STA.cpp:184] _onStaEvent(): STA Started Mit sleep bleibt das Programm wie gesagt einfach hängen.

Kennt jemand eine Lösung? Danke schon einmal.

Persönliche Seite #7735756
Lesenswert?

Moin Bernhard,

Vorab erstmal meine quellen: https://docs.espressif.com/projects/esp-idf/en/stable/esp32c6/api-reference/system/sleep_modes.html#:~:text=ESP32%2DC6%20supports%20two%20major,are%20some%20sub%20sleep%20modes.

https://github.com/espressif/arduino-esp32/blob/master/libraries/WiFi/src/WiFiGeneric.cpp

Dann ersetze das Delay durch ein Pollen mit while(WiFi.getMode() != WIFI_MODE_OFF); Zum debuggen kannst ja in dem while Loop den Zustand ausgeben. Jetzt sollte ein deinit kommen!

Hinweis: schau dir mal espWiFiStop() an.

Gruß Martin

OP #7735804
Lesenswert?

Martin D. schrieb:

Moin Bernhard,

Vorab erstmal meine quellen: https://docs.espressif.com/projects/esp-idf/en/stable/esp32c6/api-reference/system/sleep_modes.html#:~:text=ESP32%2DC6%20supports%20two%20major,are%20some%20sub%20sleep%20modes.

https://github.com/espressif/arduino-esp32/blob/master/libraries/WiFi/src/WiFiGeneric.cpp

Dann ersetze das Delay durch ein Pollen mit while(WiFi.getMode() != WIFI_MODE_OFF); Zum debuggen kannst ja in dem while Loop den Zustand ausgeben. Jetzt sollte ein deinit kommen!

Hinweis: schau dir mal espWiFiStop() an.

Gruß Martin

espWiFiStop(); Erzeugt ein:'espWiFiStop' was not declared in this scope espWiFiStop() kenne ich noch aus älteren Versionen. Inzwischen wurde das zumindest in der Arduino IDE durch WiFi.disconnect(true) + WiFi.mode(WIFI_OFF) ersetzt. Tatsächlich ist er schon vor dem delay auf dem Status STA_DISCONNECTED. Die delays habe ich vor allem im Programm damit er sich nicht ohne sleep zu Tode hetzt. Ohne WiFi.mode(WIFI_OFF) hängt er sich schon bei Wechsel in den light sleep auf.

Am besten ich speichere meine Werte im EEPROM zwischen und starte den gehe in den deep sleep oder ESP neu wenn die Daten 1x pro Stunde zum Server gesendet werden sollen...

OP #7736152
Lesenswert?

Ohne Aufruf von WiFi.mode(WIFI_OFF); wacht der ESP nie wieder aus dem Sleep auf. Generell sind 4 Jahre alte Programme inzwischen meistens unbrauchbar. Anscheinend bin ich auch nicht der einzige mit diesem Problem. Ich speichere jetzt die Daten im RTC RAM zwischen und missbrauche den deep sleep als Reset sobald sie gesendet werden sollen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren