¿Quieres aprender cómo despertar el ESP32 Touch desde el modo de sueño profundo? ¡Estás en el lugar correcto! En este artículo te explicaremos paso a paso cómo lograrlo y sacar el máximo provecho de tu dispositivo. ¡Sigue leyendo para descubrir cómo hacerlo!
Esta guía muestra cómo despertar el ESP32 del sueño profundo usando los pines sensibles al tacto. El ESP32 está programado con Arduino IDE.
El ESP32 se puede despertar del sueño profundo utilizando varias fuentes de activación: temporizador, activación externa y activación táctil. Este artículo muestra cómo utilizar la activación táctil.
Para obtener más información sobre el sueño profundo y otras fuentes de vigilia, puedes seguir los siguientes tutoriales:
- [Complete Guide] ESP32 Deep Sleep con Arduino IDE y fuentes de activación
- Despertar externo del ESP32 desde el sueño profundo
- Temporizador ESP32 para despertar del sueño profundo
Escribe un boceto de sueño profundo.
Para escribir un boceto para poner su ESP32 en modo de suspensión profunda y luego reactivarlo, debe hacer lo siguiente:
- Primero, configure las fuentes de activación. Es decir, configurar qué debería activar el ESP32. Puede utilizar una o combinar varias fuentes de activación. En este tutorial aprenderá a utilizar los pines táctiles como fuente de activación.
- Puedes decidir qué periféricos debes apagar o dejar encendidos durante el sueño profundo. Sin embargo, de forma predeterminada, el ESP32 apagará automáticamente los periféricos que no sean necesarios con la fuente de activación que haya definido.
- Finalmente, utiliza el esp_deep_sleep_start() Función para poner tu ESP32 en modo de suspensión profunda.
Toque Despertar
El ESP32 tiene 10 GPIO táctiles capacitivos. Estos GPIO pueden detectar cambios en cualquier cosa que lleve carga eléctrica, como la piel humana. Esto les permite detectar cambios causados al tocar los GPIO con un dedo. Estos pines táctiles ESP32 se pueden utilizar para despertar el ESP32 del sueño profundo.
Alfileres táctiles
Los pines táctiles ESP32 están resaltados en color en el siguiente diagrama.
Puede ver que el sensor táctil 0 corresponde al GPIO 4, el sensor táctil 2 corresponde al GPIO 2, etc.
Nota: Al momento de escribir este tutorial, hay un problema con la asignación de pines táctiles en Arduino IDE. GPIO 33 se intercambia con GPIO 32 en la asignación. Esto significa que si desea hacer referencia a GPIO 32 debe usar: T8 en codigo. Si desea hacer referencia a GPIO 33, utilice T9. Si no tiene este problema, ignore este aviso.
Descubra todo lo que necesita saber sobre los GPIO ESP32: Referencia de pinout de ESP32: ¿Qué pines GPIO debería utilizar?
Activar despertador táctil
Activar el ESP32 mediante un toque es fácil. En el IDE de Arduino hay que utilizar la siguiente función:
esp_sleep_enable_touchpad_wakeup()
Código – Toque Despertar
Para programar el ESP32 utilizamos Arduino IDE. Por lo tanto, debes asegurarte de tener instalado el complemento ESP32. Siga el tutorial adecuado para instalar el complemento ESP32 si aún no lo ha hecho:
- Instale ESP32 en Arduino IDE (Windows, Mac OS X, Linux)
Veamos cómo funciona Touch Wake Up usando un ejemplo de la biblioteca. Abra su IDE de Arduino y vaya a archivo > Ejemplos > ESP32 > Sueño profundoy ábrelo TouchWakeUp Boceto de ejemplo.
/*
Deep Sleep with Touch Wake Up
This code displays how to use deep sleep with a touch as a wake up source and how to store data in RTC memory to use it over reboots
ESP32 can have multiple touch pads enabled as wakeup source
ESP32-S2 and ESP32-S3 supports only 1 touch pad as wakeup source enabled
This code is under Public Domain License. Author: Pranav Cherukupalli <[email protected]>
*/
#if CONFIG_IDF_TARGET_ESP32
#define THRESHOLD 40 /* Greater the value, more the sensitivity */
#else //ESP32-S2 and ESP32-S3 + default for other chips (to be adjusted) */
#define THRESHOLD 5000 /* Lower the value, more the sensitivity */
#endif
RTC_DATA_ATTR int bootCount = 0;
touch_pad_t touchPin;
/*
Method to print the reason by which ESP32
has been awaken from sleep
*/
void print_wakeup_reason(){
esp_sleep_wakeup_cause_t wakeup_reason;
wakeup_reason = esp_sleep_get_wakeup_cause();
switch(wakeup_reason)
{
case ESP_SLEEP_WAKEUP_EXT0 : Serial.println("Wakeup caused by external signal using RTC_IO"); break;
case ESP_SLEEP_WAKEUP_EXT1 : Serial.println("Wakeup caused by external signal using RTC_CNTL"); break;
case ESP_SLEEP_WAKEUP_TIMER : Serial.println("Wakeup caused by timer"); break;
case ESP_SLEEP_WAKEUP_TOUCHPAD : Serial.println("Wakeup caused by touchpad"); break;
case ESP_SLEEP_WAKEUP_ULP : Serial.println("Wakeup caused by ULP program"); break;
default : Serial.printf("Wakeup was not caused by deep sleep: %dn",wakeup_reason); break;
}
}
/*
Method to print the touchpad by which ESP32
has been awaken from sleep
*/
void print_wakeup_touchpad(){
touchPin = esp_sleep_get_touchpad_wakeup_status();
#if CONFIG_IDF_TARGET_ESP32
switch(touchPin)
{
case 0 : Serial.println("Touch detected on GPIO 4"); break;
case 1 : Serial.println("Touch detected on GPIO 0"); break;
case 2 : Serial.println("Touch detected on GPIO 2"); break;
case 3 : Serial.println("Touch detected on GPIO 15"); break;
case 4 : Serial.println("Touch detected on GPIO 13"); break;
case 5 : Serial.println("Touch detected on GPIO 12"); break;
case 6 : Serial.println("Touch detected on GPIO 14"); break;
case 7 : Serial.println("Touch detected on GPIO 27"); break;
case 8 : Serial.println("Touch detected on GPIO 33"); break;
case 9 : Serial.println("Touch detected on GPIO 32"); break;
default : Serial.println("Wakeup not by touchpad"); break;
}
#else
if(touchPin < TOUCH_PAD_MAX)
{
Serial.printf("Touch detected on GPIO %dn", touchPin);
}
else
{
Serial.println("Wakeup not by touchpad");
}
#endif
}
void setup(){
Serial.begin(115200);
delay(1000); //Take some time to open up the Serial Monitor
//Increment boot number and print it every reboot
++bootCount;
Serial.println("Boot number: " + String(bootCount));
//Print the wakeup reason for ESP32 and touchpad too
print_wakeup_reason();
print_wakeup_touchpad();
#if CONFIG_IDF_TARGET_ESP32
//Setup sleep wakeup on Touch Pad 3 + 7 (GPIO15 + GPIO 27)
touchSleepWakeUpEnable(T3,THRESHOLD);
touchSleepWakeUpEnable(T7,THRESHOLD);
#else //ESP32-S2 + ESP32-S3
//Setup sleep wakeup on Touch Pad 3 (GPIO3)
touchSleepWakeUpEnable(T3,THRESHOLD);
#endif
//Go to sleep now
Serial.println("Going to sleep now");
esp_deep_sleep_start();
Serial.println("This will never be printed");
}
void loop(){
//This will never be reached
}
Estableciendo el umbral
Lo primero que debes hacer es establecer un umbral para los pines táctiles. En este caso fijamos el límite a 40. Dependiendo de su proyecto, es posible que necesite cambiar el umbral.
#define Threshold 40
Cuando tocas un GPIO sensible al tacto, el valor detectado por el sensor disminuye. Por lo tanto, puede establecer un umbral que desencadene una acción cuando se detecta un toque.
El umbral establecido aquí significa que el ESP32 debería activarse cuando el valor leído por el GPIO sensible al tacto sea inferior a 40. Este valor se puede ajustar según la sensibilidad deseada.
Adjuntar interrupciones
Debe adjuntar interrupciones a los pines sensibles al tacto. Cuando se detecta un toque en un GPIO específico, se ejecuta una función de devolución de llamada. Por ejemplo, mire la siguiente línea:
//Setup interrupt on Touch Pad 3 (GPIO15)
touchAttachInterrupt(T3, callback, Threshold);
Si el valor leído en T3 (GPIO 15) es menor que el del límite Variable, el ESP32 se despierta y el llamar de vuelta se ejecuta la función.
El Llamar de vuelta() La función solo se ejecuta cuando el ESP32 está activo.
- Si el ESP32 está durmiendo y tocas T3, el ESP se despertará – el Llamar de vuelta() La función no se ejecutará si simplemente presiona y suelta el pin táctil.
- Cuando el ESP32 esté activo y toque T3, se ejecutará la función de devolución de llamada. Entonces si tienes el Llamar de vuelta() Cuando activa ESP32, debe mantener presionado el toque de este pin por un momento hasta que se ejecute la función.
En este caso Llamar de vuelta() La función está vacía.
void callback(){
//placeholder callback function
}
Si desea activar el ESP32 usando diferentes pines táctiles, solo necesita conectar interrupciones a estos pines.
A continuación necesitas hacer el esp_sleep_enable_touchpad_wakeup() Función para configurar los pines táctiles como fuente de activación.
//Configure Touchpad as wakeup source
esp_sleep_enable_touchpad_wakeup()
Esquema
Para probar este ejemplo, conecte un cable GPIO 15como se muestra en la siguiente figura.
(Este esquema utiliza la versión del módulo ESP32 DEVKIT V1 con 30 GPIO; si está utilizando un modelo diferente, verifique la distribución de pines de la placa que está utilizando).
Piezas necesarias:
Puedes utilizar los enlaces anteriores o ir directamente MakerAdvisor.com/tools ¡Para encontrar todas las piezas para tus proyectos al mejor precio!
Probando el ejemplo
Sube el código a tu ESP32 y abre el monitor serial con una velocidad de baudios de 115200.
El ESP32 entra en modo de suspensión profunda.
Puedes activarlo tocando el cable conectado al Touch Pin 3.
Cuando toca el pin, el ESP32 muestra lo siguiente en el monitor serie: el número inicial, el motivo del despertar y qué GPIO sensible al tacto causó el despertar.
Envolver
En este artículo, le mostramos cómo activar el ESP32 usando los GPIO sensibles al tacto. Cuando se detecta un toque en un GPIO específico, el ESP32 se activa y realiza una función de devolución de llamada. Luego vuelve al modo de suspensión.
Para obtener más información sobre el sueño profundo con ESP32, consulte nuestra guía completa: ESP32 Deep Sleep con Arduino IDE y Wake-Up Sources.
Si te gusta ESP32, es posible que también te gusten los siguientes recursos:
- Aprende ESP32 con Arduino IDE (Curso)
- Servidor web ESP32 con BME280 – mini estación meteorológica
- Servidor web ESP32 con Arduino IDE – salidas de control
- Servidor web de temperatura ESP32 DHT11/DHT22
Este es un extracto de nuestro curso: Aprendiendo ESP32 con Arduino IDE. Si te gusta ESP32 y quieres aprender más sobre él, te recomendamos apuntarte al curso Aprende ESP32 con Arduino IDE.
Despierta ESP32 Touch desde el sueño profundo
Este artículo te mostrará cómo despertar al ESP32 desde el sueño profundo utilizando los pines sensibles al tacto. El ESP32 será programado utilizando Arduino IDE.
Preguntas Frecuentes
- ¿Qué fuentes de despertar puedo usar en el ESP32?
- ¿Cómo se configura el ESP32 para despertar mediante un toque?
- ¿Qué pasa si toco un pin táctil mientras el ESP32 está dormido?
El ESP32 puede despertar del sueño profundo utilizando varias fuentes de despertar: temporizador, despertar externo y despertar táctil. Este artículo muestra cómo usar el despertar táctil.
Para configurar el ESP32 para despertar mediante un toque, necesitas usar la función esp_sleep_enable_touchpad_wakeup().
Si el ESP32 está dormido y tocas un pin táctil, el ESP32 se despertará. Sin embargo, la función de callback no se ejecutará a menos que mantengas el contacto en el pin durante un tiempo.
Para más información sobre el sueño profundo y otras fuentes de despertar, puedes consultar los siguientes tutoriales:
Guía Completa: ESP32 Deep Sleep con Arduino IDE y Fuentes de Despertar
ESP32 Despertar Externo del Sueño Profundo
ESP32 Temporizador Despertar del Sueño Profundo
En este artículo te hemos mostrado cómo despertar al ESP32 usando los pines sensibles al tacto. Cuando se detecta un toque en un GPIO específico, el ESP32 se despierta y ejecuta una función de callback. Luego vuelve a dormir.
Puedes aprender más sobre el sueño profundo con el ESP32 en nuestra guía completa: ESP32 Deep Sleep con Arduino IDE y Fuentes de Despertar.
Si te gusta el ESP32, es posible que también te interesen los siguientes recursos:
Aprende ESP32 con Arduino IDE (curso)
ESP32 Servidor Web con BME280 – Mini Estación Meteorológica
ESP32 Servidor Web con Arduino IDE – control de salidas
ESP32 DHT11/DHT22 Servidor Web de Temperatura
Este es un fragmento de nuestro curso: Aprende ESP32 con Arduino IDE. Si te gusta el ESP32 y quieres aprender más, te recomendamos inscribirte en el curso Aprende ESP32 con Arduino IDE.
¡Genial! Me encanta aprender sobre las diferentes formas de despertar el ESP32 Touch desde el sueño profundo. ¡Gracias por compartir estas técnicas útiles!
¡Vaya, esto es justo lo que necesitaba saber! Me alegra haber encontrado este artículo sobre despertar el ESP32 Touch desde el sueño profundo. ¡Gracias por la info útil!
¡Muy útil! Siempre es bueno tener más conocimientos sobre cómo despertar el ESP32 Touch desde el sueño profundo. Gracias por compartir esta información tan interesante. ¡Saludos!
¡Qué buena info! Siempre es útil conocer más sobre cómo despertar el ESP32 Touch desde el sueño profundo. ¡Gracias por el aporte!
¡Interesante artículo! Me encantaría aprender más sobre cómo despertar el ESP32 Touch desde el sueño profundo. ¡Gracias por compartir!