Despierta ESP32 Touch desde el sueño profundo

¿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.

Despierta ESP32 Touch desde el sueño profundo

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:

  1. 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.
  2. 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.
  3. 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.

Despierta ESP32 Touch desde el sueño profundo

Alfileres táctiles

Los pines táctiles ESP32 están resaltados en color en el siguiente diagrama.

Despierta ESP32 Touch desde el sueño profundo

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
}

Ver código sin formato

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.

Despierta ESP32 Touch desde el sueño profundo

(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!

Despierta ESP32 Touch desde el sueño profundo

Probando el ejemplo

Sube el código a tu ESP32 y abre el monitor serial con una velocidad de baudios de 115200.

Despierta ESP32 Touch desde el sueño profundo

El ESP32 entra en modo de suspensión profunda.

Puedes activarlo tocando el cable conectado al Touch Pin 3.

Despierta ESP32 Touch desde el sueño profundo

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.

Despierta ESP32 Touch desde el sueño profundo

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.

Error 403 The request cannot be completed because you have exceeded your quota. : quotaExceeded

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

  1. ¿Qué fuentes de despertar puedo usar en el ESP32?
  2. 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.

  3. ¿Cómo se configura el ESP32 para despertar mediante un toque?
  4. Para configurar el ESP32 para despertar mediante un toque, necesitas usar la función esp_sleep_enable_touchpad_wakeup().

  5. ¿Qué pasa si toco un pin táctil mientras el ESP32 está dormido?
  6. 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.

5 comentarios en «Despierta ESP32 Touch desde el sueño profundo»

Deja un comentario