Material requerido
Un módulo ESP32 |
Pines táctiles capacitivos
Esta vez vamos a aprender a salir del modo deep sleep usando los pines táctiles capacitivos del ESP32. Estos pines detectan si los hemos tocado con nuestra propia piel, por ejemplo con un dedo.
No todos los pines tienen esa capacidad, es más, no todos los pines pueden ser usados cuando estamos en el modo deep sleep. Aquí podéis ver qué pines son los que están activos en el modo deep sleep, y de ellos, cuáles podemos usar como pines táctiles, que son los marcados en lila con la leyenda TOUCH.
Programación
Para ver cómo funciona vamos a utilizar otro de los ejemplos que vienen para el ESP32 que encontraréis en “Archivo → Ejemplos → ESP32 → DeepSleep → TouchWakeUp”.
El programa es muy parecido al que hemos visto en la sesión anterior, pero para activar el despertar por pin táctil usaremos la siguiente instrucción:
esp_sleep_enable_touchpad_wakeup()
Para poder usarlo correctamente tenemos que definir también que pin táctil vamos a utilizar y qué sensibilidad queremos que tenga, estableciendo el límite para el disparo (treshold). En el caso del ejemplo se utiliza el pin Touch 3, que corresponde al GPIO 15.
- Cuando tocamos un pin táctil, el valor que lee desciende.
- Por eso, cuanto mayor sea el límite o treshold, más sensible será.
#define Threshold 40 /* Greater the value, more the sensitivity */ //Setup interrupt on Touch Pad 3 (GPIO15) touchAttachInterrupt(T3, callback, Threshold);
En la interrupción vemos que está incluida la función callback(). Esta función sólo se ejecuta si tocamos el pin táctil durante un poco más de tiempo. En este caso está vacía, pero podéis probar a ponerle algo.
void callback(){ //placeholder callback function }
Después, además de la misma función que teníamos en el caso del Timer para mostrar en pantalla la que tipo de interrupción ha despertado al ESP32, tenemos una función para poder ver qué pin ha sido el que ha disparado.
/* Method to print the touchpad by which ESP32 has been awaken from sleep */ void print_wakeup_touchpad(){ touch_pad_t pin; touchPin = esp_sleep_get_touchpad_wakeup_status(); 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; } }
El setup tiene básicamente la misma estructura que el del ejemplo del Timer, cuenta las veces que se ha despertado y nos muestra en el monitor serie el número de veces que lleva y la razón por la que lo ha hecho.