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
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
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!
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
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
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.