Los pines táctiles en el ESP32 son una característica muy interesante que nos permite hacer detección capacitiva.
La detección capacitiva se basa en la propiedad de que todos los objetos (incluidos seres humanos) pueden almacenar una pequeña cantidad de carga eléctrica.
Cuando tocamos un pin táctil, cambiamos la capacitancia en el circuito El ESP32 puede detectar este cambio de capacitancia, lo que nos permite determinar si ha ocurrido un toque.
Es posible crear un panel táctil conectando cualquier objeto conductor a estos pines, como papel de aluminio, tela conductora, pintura conductora, entre otros.
Pines táctiles en el ES32
El ESP32 tiene múltiples pines táctiles (generalmente etiquetados como T0, T1, T2, etc). La cantidad de pines táctiles puede variar según la placa de desarrollo específica que estés utilizando.
Los sensores táctiles del ESP32, en general, funcionan bastante bien. Tienen una buena sensibilidad y bajo ruido. Por lo que podemos usarlos incluso con pads bastante pequeños.
Además, los pines capacitivos táctiles se pueden utilizar para despertar el ESP32 del modo de bajo consumo (deep sleep).
Cómo leer los pines táctiles del ESP32
Realmente es muy sencillo usar los pines táctiles del ESP32 bajo el entorno de Arduino. Simplemente tenemos que usar la función touchRead
-
touchRead(int pin);
Ejemplos de código
Lectura de pines táctiles
Por ejemplo así podríamos leer uno de los pines táctiles.
const int touchPin0 = 4;
void setup()
{
Serial.begin(115200);
delay(1000);
Serial.println("ESP32 - Touch Raw Test");
}
void loop() {
auto touch0raw = touchRead(touchPin0); // realizar la lectura
Serial.println(touch0raw);
delay(1000);
}
Lectura de pines táctiles con umbral
Si quisiéramos añadir un umbral para la detección del sensor táctil, tampoco es mucho más complicado.
const int touchPin0 = 4;
const int touchThreshold = 40; // Umbral del sensor
void setup() {
Serial.begin(115200);
delay(1000); // Delay to launch the serial monitor
Serial.println("ESP32 - Touch Threshold Demo");
}
void loop() {
auto touch0raw = touchRead(touchPin0); // realizar la lectura
if(touch0raw < touchThreshold )
{
Serial.println("Toque detectado");
}
delay(500);
}
Lectura pines táctiles con interrupciones
Y si quisiéramos usar una interrupción de hardware para leer el sensor táctil, el código sería algo así.
int threshold = 40;
volatile bool touch1detected = false;
void gotTouch1(){
touch1detected = true;
}
void setup() {
Serial.begin(115200);
delay(1000); // give me time to bring up serial monitor
Serial.println("ESP32 Touch Interrupt Test");
touchAttachInterrupt(T2, gotTouch1, threshold);
}
void loop(){
if(touch1detected)
{
touch1detected = false;
Serial.println("Touch 1 detected");
}
}
Referencias: