laguma
November 6, 2024, 11:01am
1
Hola,
Estoy usando un Magnetic Reed en el proyecto, y necesito que cuando está cerrado, entre en modo bajo consumo y cuando está abierto se despierte. El código que tengo es el siguiente. pero no funciona correctamente. ¿Alguien sabe por que, o como hacerlo?.
#include <esp_sleep.h>
#define interruptPin GPIO_NUM_5
void setup() {
pinMode(interruptPin, INPUT_PULLUP);
esp_sleep_enable_ext0_wakeup(interruptPin, 1);
}
void loop() {
int estadoPuerta = digitalRead(interruptPin);
if (estadoPuerta == HIGH) {
Serial.println("abierto");
} else if(estadoPuerta == LOW ) {
Serial.println("cerrado");
esp_light_sleep_start();
}
}
Prueba esto y nos dices
#include <esp_sleep.h>
#define interruptPin GPIO_NUM_5
void setup() {
Serial.begin(115200);
pinMode(interruptPin, INPUT_PULLUP);
esp_sleep_enable_ext0_wakeup(interruptPin, 1); // Configura el pin para despertar del sueño profundo
}
void loop() {
int estadoPuerta = digitalRead(interruptPin);
if (estadoPuerta == HIGH) {
Serial.println("abierto");
} else if (estadoPuerta == LOW) {
Serial.println("cerrado");
esp_deep_sleep_start(); // Cambia a sueño profundo en lugar de sueño ligero
}
}
En
if (estadoPuerta == HIGH) {
Serial.println("abierto");
} else if (estadoPuerta == LOW) {
Serial.println("cerrado");
esp_light_sleep_start();
}
el condicional
else if (estadoPuerta == LOW) {
es redundante, ya que estadoPuerta solo puede tener 2 estados, si no es HIGH necesariamente es LOW.
Lo correcto es
if (estadoPuerta == HIGH) {
Serial.println("abierto");
} else { // entonces estadoPuerta == LOW
Serial.println("cerrado");
esp_light_sleep_start();
}
Agrego:
De la documentación de Espressif :
External Wakeup (ext0)
The RTC IO module contains the logic to trigger wakeup when one of RTC GPIOs is set to a predefined logic level.
El GPIO5 (GPIO_NUM_5 ) no pertenece al grupo de RTC GPIOs, por lo que no podría "despertar" al micro.
Referencia: GPIO & RTC GPIO
laguma
November 8, 2024, 2:48pm
4
Hola, he cambiado la configuración del gpio y funciona, gracias