esp32-touch-pins

Cómo usar los pines táctiles en un ESP32

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 capacidad de los objetos y seres humanos para almacenar una pequeña cantidad de carga eléctrica.

Cuando tocamos un pin táctil, cambia la capacitancia en el circuito y el ESP32 puede detectar este cambio, 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, están 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. Sim

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: