Forum: Mikrocontroller und Digitale Elektronik ESP32 und esp_sleep_enable_ext1_wakeup


von Helmar (Gast)


Lesenswert?

Hallo,

ich möchte gerne einen ESP32 über die Funktion 
esp_sleep_enable_ext1_wakeup über mehrere PINs aufwachen lassen.
Das Programm wird in der Arduino IDe geschrieben, der ESP32 soll über 
eine Batterie versorgt werden.
Es soll folgende Funktion erfüllt werden. Am Arduino wird an Pin 33 und 
34 ein Reed Kontakt verschaltet. Sobald einer der Kontakte ein HIGH 
Signal liefert soll der (schlafende) ESP32 aufwachen und sein Programm 
"abfahren" und sich dann wieder schlafen legen.
So wie hier beschrieben müsste es mit der genannten Funktion 
funktionieren:
http://esp-idf.readthedocs.io/en/latest/api-reference/system/sleep_modes.html

Leider weiss ich nicht, wie man die Pins 33 und 34 in die BIT Maske 
bringt. Ein Beispiel habe ich bis dato leider nicht gefunden.

Hat hier jemand ein funktionierendes Beispiel?

Danke im voraus

Helmar

von Einer K. (Gast)


Lesenswert?

Helmar schrieb:
> Leider weiss ich nicht, wie man die Pins 33 und 34 in die BIT Maske
> bringt. Ein Beispiel habe ich bis dato leider nicht gefunden.

Nein, mit einem Beispiel, besser als die Dinger bei Google, kann ich dir 
nicht dienen.
Da ich selber keine ESP32 im Einsatz habe kann ich auch nicht für dich 
testen.

Aber vermuten kann ich für dich!
Der 2 Kern LX6 hat einen Haufen IOs
Keiner davon taugt zum Wecken aus dem Deepsleep.
Einzig die IOs des dritten Kerns, des ULP(ultra low power) Prozessors 
taugen dafür.

> Pins 33 und 34
GPIO33 des LX6  entspricht RTC_GPIO08 des ULP
GPIO34 des LX6  entspricht RTC_GPIO04 des ULP

Aus meiner beschränkten Sicht ist die Maske dann:
uint64_t maske = (1<<8)|(1<<4);

ohne jede Gewähr

von pitschu (Gast)


Lesenswert?

Der GPIO_NUM type hat 64 bit. Du kannst also einfach die bits 34 
und/oder 35 setzen und übergeben.

von Schwanzus Longus (Gast)


Lesenswert?

Helmar schrieb:
> Ein Beispiel habe ich bis dato leider nicht gefunden.

Wieviel Zeit hast Du denn dafür aufgewandt?
Können nicht mehr als 3 Sekunden gewesen sein, denn solange habe ich 
gebraucht, um das Beispiel
"deep_sleep_example_main.c"
im Original esp-idf zu finden...

von Einer K. (Gast)


Lesenswert?

Arduino F. schrieb:
> uint64_t maske = (1<<8)|(1<<4);
Das ist falsch.

von test (Gast)


Lesenswert?

hier wirds gut erklärt
https://lastminuteengineers.com/esp32-deep-sleep-wakeup-sources/
ext1 External Wake-up Source

!!! 1ULL << ext_wakeup_pin  33 & 34 nicht 1 & 4 !!!

von test (Gast)


Lesenswert?

mich würde intressieren in welchen RTC registern die pin bits stehen und 
oder wo man den wake_ext1 im ulp an und abschalten kann

es gibt die goldene krone in bronce zu gewinnen

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.