Forum: Mikrocontroller und Digitale Elektronik ESP32 wakeup von Deep Sleep mit Taster oder RTC (Ds3231) Alarm


von Markus R. (marom)


Lesenswert?

Hallo,
ich habe schon einiges gesucht,  bin aber weder fündig geworden noch 
kompetent genug,  um das Problem zu lösen.

Ich möchte einen esp32 mit Taster oder RTC Alarm aufwecken. Beides soll 
möglich sein.

Für mehrere externe Waekup Gründe gibt es eigentlich die 
"esp_sleep_enable_ext1_wakeup" Funktion. Diese kann leider nur ANY_HIGH 
oder ALL_LOW behandeln. Letzteres macht mit dem Wunsch Taster ODER 
RTCalarm keinen Sinn, ersteres stellt mich vor das Problem, dass der 
Ds3231 bei Alarm auf low schaltet und sonst auf high steht.

Wie kann ich das am einfachsten lösen?

vielen Dank für die Hilfe
Markus

von Martin (Gast)


Lesenswert?

Invertiere einfach das Signal des DS3231 mit einem MOSFET.

von John P. (brushlesspower)


Lesenswert?

Hatte bei mir ein ähnliches problem:


//Button (GPIO 26) auf Low (0)
esp_sleep_enable_ext0_wakeup(GPIO_NUM_26,0);

//Button (GPIO MASK = 2^27 = 0x800 0000 -> GPIO 27) auf Low (0)
esp_sleep_enable_ext1_wakeup(0x8000000,ESP_EXT1_WAKEUP_ALL_LOW);


Bei mir kann entweder IO27 oder IO26 auf Low um den ESP32 aufzuwecken.

Jetzt musst du nur noch die Maske für deine Pins anpassen.

: Bearbeitet durch User
von Markus R. (marom)


Lesenswert?

Hallo Martin, das Signal zu invertieren per MOSFET oder einer anderen 
Schaltung ist möglich und eine gute Idee, aber John P. hat da die 
"einfachere" Lösung.
Dass die ext1 und ext0 zusammen verwendet werden können war mir nicht 
bewusst und findet sich auch sonst nirgends in Beispielen (und den vor 
mir gelesenen Dokumentationen).
Vielen Dank für Eure Unterstützung!

von Alexander (alecxs)


Lesenswert?

Hallo, ich hab einen NodeMCU ESP32 und möchte den über zwei pins aus dem 
Deep-sleep wecken. Das funktioniert soweit auch, allerdings sind die 
Eingänge entweder High oder schwebend, deswegen wird oft grundlos 
geweckt.
1
#define BUTTON_PIN_BITMASK 0x200004000 // 1000000000000000000100000000000000
2
pinMode(GPIO_NUM_14, INPUT);
3
pinMode(GPIO_NUM_33, INPUT);
4
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON);
5
// rtc_gpio_pulldown_en(GPIO_NUM_14);
6
// rtc_gpio_pulldown_en(GPIO_NUM_33);
7
esp_sleep_enable_ext1_wakeup(BUTTON_PIN_BITMASK,ESP_EXT1_WAKEUP_ANY_HIGH);

Ich kann die internen Pull-Downs aktivieren um das zu verhindern. Nun 
kann ich aber die Eingänge nicht mehr im Programm abfragen und das 
wecken funktioniert nicht mehr, die Pins sind dann dauerhaft LOW. Warum?

Nun habe ich es mit einem externen Pull-Down von 10k versucht, daraufhin 
wurde das NodeMCU äußerst heiß und ist ausgestiegen. Keine Ahnung was da 
passiert ist, aber ich möchte es nicht noch mal riskieren und noch ein 
weiteres Board schrotten.

Wie kann ich stattdessen die internen Pull-downs ordnungsgemäß 
aktivieren?

Das HIGH kommt übrigens von einem STM32 und ist direkt mit dem ESP32 
verbunden.

: Bearbeitet durch User
von Alexander (alecxs)


Lesenswert?

Ich habe auf die RTC komplett verzichtet und nun geht es. War wohl ein 
Denkfehler - obwohl nur RTC Pins zum wecken vorgesehen sind, wird RTC 
nicht benötigt.
1
#define BUTTON_PIN_BITMASK 0x200004000
2
pinMode(GPIO_NUM_14, INPUT_PULLDOWN);
3
pinMode(GPIO_NUM_33, INPUT_PULLDOWN);
4
esp_sleep_enable_ext1_wakeup(BUTTON_PIN_BITMASK,ESP_EXT1_WAKEUP_ANY_HIGH);

: Bearbeitet durch User
von Alexander (alecxs)


Lesenswert?

Hach... irgendwie kriege ich es nicht hin. Zu früh gefreut, das Wecken 
funktioniert nun zwar einwandfrei, dafür kann ich die Pins aber nicht 
mehr im Wachzustand als Eingänge nutzen - sind immer LOW. Erst im 
Deep-Sleep wird das HIGH erkannt.

Also entweder pinMode(GPIO_NUM_14, INPUT) dann gibt's keinen Pulldown, 
oder pinMode(GPIO_NUM_14, INPUT_PULLDOWN) dann gibt's kein HIGH mehr. 
Die 3.3 V liegen sauber an, was da los? Compileroptimierung der Arduino 
IDE?

von Alexander (alecxs)


Lesenswert?

Ich habe nun die Eingangspins vertauscht. An GPIO14 liegt nun ein 5V 
Sensor, der hat mit dem internen Pull-down kein Problem. Kann es sein 
dass nur auf steigende Flanke reagiert wird? Oder reichen 3.3V einfach 
nicht? Macht alles keinen Sinn.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.