ESP32-S2 ->kein wakeup in Timer Mode aus LightSleep

OP #7624564
Lesenswert?

Hallo,

ich nutze eine Wemos ESP32-S2 mini.

Das Teil möchte ich in Schlafmodus versetzten. Dazu definiere ich (gemäß Doku https://docs.espressif.com/projects/esp-idf/en/v4.2/esp32s2/api-reference/system/sleep_modes.html) folgendes

1
#define uS_TO_S_FACTOR 1000000ULL  /* Conversion factor for micro seconds to seconds */
2
#define TIME_TO_SLEEP  5        /* Time ESP32 will go to sleep (in seconds) */
3
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
4
esp_light_sleep_start();

Der Controller geht in Schlafmodus, wacht aber nicht mehr selbstständig auf.

nutze ich stattdessen den DeepSleep

1
esp_deep_sleep_start();

bekomme ich das Teil schlafen und automatisch geweckt - allerdings gemäß der Funktion startet der Controller durch. Das will ich ja gerade nicht.

Hat jemand ähnliche Erfahrung, es scheint LightSleep funktioniert einfach nicht?!

Gruß Timo

#7624850
Lesenswert?

Moin,

ich hatte mich auch mit dem Lightsleep Mode beschäftigt, weil nur in diesem Mode die GPIO-Ausgänge ihren Output festhalten ...

Dabei bin ich in Beispielen auf einen dort erwähnten Fehler gestoßen, der behoben wurde, indem nach dem wifi_fpm_do_sleep ein delay mit einer Zeit, die länger ist als die sleep-zeit eingebaut werden muss. Der Sleepmode startet dann und der callback wird (zumindest bei mir) dann nach der Zeit ausgeführt. Hier ein Schnipsel (mit ein paar Debug-Ausgaben):

1
    Serial.println("3 >>>>>>>>>>>> Enter light sleep mode for 10 Sec");
2
    Serial.flush();
3
    
4
    // Here all the code to put con light sleep
5
    // the problem is that there is a bug on this
6
    // process
7
    //wifi_station_disconnect(); //not needed
8
    WiFi.mode(WIFI_STA);
9

10
    uint32_t sleep_time_in_ms = 10000;
11
    wifi_set_opmode(NULL_MODE);
12
    wifi_fpm_set_sleep_type(LIGHT_SLEEP_T);
13
    wifi_fpm_open();
14
    wifi_fpm_set_wakeup_cb(callback);
15

16
    wifi_fpm_do_sleep(sleep_time_in_ms *1000 );
17

18
    Serial.println("Delay after sleep mode START");
19
    delay(sleep_time_in_ms + 1);
20
    
21
    Serial.println("Exit light sleep mode");
22
    wifi_set_sleep_type(NONE_SLEEP_T);
1
void callback() {
2
  Serial.println("4 >>>>>>>>>>>> Callback");
3
  Serial.flush();
4
}

Probier es mal aus. Gruß A.

OP #7626678
Lesenswert?

Danke Andree, konnte Deinen Code leider nicht nachvollziehen :-/

Folgender Test:

  • Gleicher Code auf ein ESP32-Board "ESP32 Dev Module" kompiliert und aufgespielt - läuft problemlos

  • auf einem WEMOS ESP32-S2 mini als "LOLIN S2 Mini" kompiliert und aufgespielt - bekanntes Problem, wake-up wird nicht ausgeführt.

Vermutlich wurde hier was bei der Boardintegration (esp32 V2.0.11) nicht sauber umgesetzt??

Der Code

1
#define uS_TO_S_FACTOR 1000000ULL /* Conversion factor for micro seconds to seconds */
2
#define TIME_TO_SLEEP 5           /* Time ESP32 will go to sleep (in seconds) */
3

4

5

6
void setup() {
7
  Serial.begin(115200);
8
}
9

10
void loop() {
11
  int i;
12
  i = 0;
13
  while (i < 100) {
14
    Serial.println(i);
15
    delay(100);
16
    i++;
17
  }
18

19
  Serial.println("schlafen");
20
  esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);  // wakeup setting
21
  delay(100);
22
  esp_light_sleep_start();
23

24
  Serial.println("Weiter gehts");
25
}

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