Introducción al ESP32 y sus pines táctiles capacitivos

El ESP32 es una de las placas de desarrollo más versátiles y potentes para proyectos de IoT (Internet de las Cosas). Con su capacidad de manejar múltiples tareas y su conectividad Wi-Fi y Bluetooth, se ha convertido en una herramienta preferida por desarrolladores y entusiastas. Uno de los aspectos más interesantes de este dispositivo es su capacidad para detectar toques, lo que permite crear interfaces interactivas y proyectos innovadores. En este artículo, profundizaremos en cómo funcionan los pines de detección de toque del ESP32 y cómo podemos utilizarlos en nuestros proyectos.

Con un total de 10 pines GPIO que pueden funcionar como sensores de toque capacitivos, el ESP32 ofrece una amplia gama de posibilidades. Estos pines no solo pueden reemplazar los botones tradicionales, sino que también permiten la creación de superficies interactivas, instrumentos musicales y más. A continuación, exploraremos cómo funcionan estos pines, cómo conectarlos y algunos ejemplos prácticos de proyectos.

Índice de contenido
  1. Cómo funciona el sensor de toque en el ESP32
  2. Lectura del sensor de toque
  3. Conexión de Hardware
  4. Código de ejemplo para lectura de toque
    1. Explicación del código
  5. Proyecto ESP32 – LED activado por toque
    1. Encontrando el umbral de toque
    2. Código de ejemplo para el LED activado por toque
  6. Explorando los pines de toque en el ESP32 C3
  7. Uso de pines de toque en el ESP8266
  8. Conclusiones sobre los pines de toque del ESP32

Cómo funciona el sensor de toque en el ESP32

La detección de toque en el ESP32 se basa en las propiedades eléctricas del cuerpo humano. Cuando un dedo toca un pin de detección de toque, se establece una pequeña carga eléctrica en el punto de contacto.

Este fenómeno genera variaciones en la capacitancia, lo que a su vez produce una señal analógica. Un convertidor analógico a digital (ADC) de aproximación sucesiva en el ESP32 convierte esta señal analógica en un número digital, permitiendo que el microcontrolador interprete el toque.

El ESP32 tiene 10 pines GPIO que pueden funcionar como sensores de toque capacitivos. Sin embargo, solo 9 de ellos están disponibles en los conectores de la placa, lo que significa que se pueden utilizar para detectar cambios en la capacitancia cuando un objeto conductor, como la piel humana, se acerca.

Lectura del sensor de toque

Leer los valores de un sensor de toque en el ESP32 es un proceso directo. Mediante el uso de la función touchRead() en el IDE de Arduino, se puede acceder a los datos de los pines de detección de toque.

La función toma como argumento el número del GPIO que se desea leer, lo que facilita su integración en el código para proyectos. A continuación se muestra un ejemplo de cómo implementar esta función.

Conexión de Hardware

Ahora que hemos cubierto la teoría, pasemos a un ejemplo práctico. Para comenzar, conectaremos un cable al Touch #0 (GPIO #4). Puedes usar cualquier objeto conductor, como papel de aluminio, tela conductora o pintura conductiva, para convertir este pin en un área de toque.

Es importante asegurarse de que la conexión sea adecuada y que el material conductor esté bien fijado al pin para obtener lecturas precisas.

Código de ejemplo para lectura de toque

Veamos cómo implementar la lectura del pin de toque en el código. Abre el IDE de Arduino y navega a Archivo > Ejemplos > ESP32 > Touch y abre el esbozo TouchRead.

Este ejemplo lee el pin de toque 0 y muestra el resultado en el monitor serial. A continuación, se presenta el código correspondiente:

// Prueba de toque ESP32
// Solo prueba el pin de toque - Touch0 es T0 que está en GPIO 4.

void setup() {
  Serial.begin(115200);
  delay(1000); // tiempo para abrir el monitor serial
  Serial.println("Prueba de Toque ESP32");
}

void loop() {
  Serial.print("Toque: ");
  Serial.println(touchRead(4));  // obtener valor de toque en GPIO 4
  delay(1000);
}

Una vez que hayas subido el código, abre el monitor serial configurado a 115200 baudios y presiona el botón EN en el ESP32. Toca la parte metálica del cable y observa cómo reacciona el sistema al toque.

Explicación del código

El código es bastante sencillo. En la función setup(), inicializamos la comunicación serial con la PC. Luego, en el ciclo loop(), utilizamos la función touchRead() para obtener el valor del pin de toque (GPIO #4). Alternativamente, se puede usar el número del sensor de toque T0.

Serial.println(touchRead(4));

Proyecto ESP32 – LED activado por toque

Vamos a crear un proyecto sencillo que demuestre cómo los pines de toque del ESP32 pueden controlar dispositivos. En este caso, diseñaremos un LED que se encenderá cuando toques el pin GPIO.

Este proyecto es fácilmente ampliable para abrir puertas, activar relés, encender luces LED y mucho más.

Encontrando el umbral de toque

Antes de seguir adelante, es importante determinar qué lecturas estamos obteniendo del ESP32. Observa los valores que aparecen cuando tocas el pin y cuando no lo haces.

Cuando ejecutes el esbozo anterior, verás lecturas cercanas a las siguientes en el monitor serial:

  • Al tocar el pin (~3)
  • Sin tocar el pin (~71)

Con base en estos valores, podemos establecer un umbral. Si el valor cae por debajo de este umbral, se activará el LED. En este caso, un umbral de 30 podría ser adecuado.

Código de ejemplo para el LED activado por toque

A continuación se presenta un código simple que enciende el LED incorporado en la placa cuando tocas el pin una vez y lo apaga al tocarlo nuevamente.

// definir números de pin
const int touchPin = 4;
const int ledPin = 2;

const int threshold = 30;  // establecer el umbral

int ledState = LOW;         // estado actual del pin de salida
int touchState;             // lectura actual del pin de entrada
int lastTouchState = LOW;   // lectura previa del pin de entrada

unsigned long lastDebounceTime = 0;  // última vez que se cambió el estado del pin de salida
unsigned long debounceDelay = 50;    // tiempo de rebote; aumentarlo si el LED parpadea

void setup() {
  pinMode(ledPin, OUTPUT);

  // establecer estado inicial del LED
  digitalWrite(ledPin, ledState);
}

void loop() {
  // leer el estado del pin
  int reading = touchRead(touchPin);

  // binarizar la lectura de toque para facilitar la operación
  if (reading < threshold) {
    reading = HIGH;
  } else{
    reading = LOW;
  }
  
  // Si el pin es tocado:
  if (reading != lastTouchState) {
    // reiniciar el temporizador de rebote
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {
    // sea cual sea el estado, ha estado ahí más tiempo que el tiempo de rebote:

    // si el estado de toque ha cambiado:
    if (reading != touchState) {
      touchState = reading;

      // solo alternar el LED si el nuevo estado de toque es ALTO
      if (touchState == HIGH) {
        ledState = !ledState;
      }
    }
  }

  // establecer el LED:
  digitalWrite(ledPin, ledState);

  // guardar la lectura. La próxima vez, será el lastTouchState:
  lastTouchState = reading;
}

Sube el esbozo a tu ESP32. Deberías ver que el LED alterna su estado cada vez que tocas el cable.

Explorando los pines de toque en el ESP32 C3

El ESP32 C3 también incluye características de detección de toque, aunque con algunas diferencias en su configuración. Este modelo, más reciente, mantiene la funcionalidad de los pines capacitivos, pero puede tener un número diferente de pines disponibles para este propósito.

La capacidad de detección de toque en el ESP32 C3 sigue utilizando las propiedades eléctricas del cuerpo humano, permitiendo la interacción y el control de dispositivos de manera efectiva. A continuación se presentan algunos de los pines de toque disponibles en el ESP32 C3:

  • GPIO 0
  • GPIO 2
  • GPIO 4

Uso de pines de toque en el ESP8266

Aunque el ESP8266 no tiene un soporte nativo tan robusto para la detección de toque como el ESP32, es posible implementar soluciones alternativas utilizando componentes externos. Los pines de entrada analógica pueden ser utilizados para crear una funcionalidad básica de detección de toque, aunque con menor precisión y más limitaciones que sus contrapartes en el ESP32.

Los desarrolladores que buscan implementar la detección de toque en el ESP8266 pueden considerar el uso de:

  • Módulos de sensores de toque capacitivo externos
  • Componentes resistivos que pueden detectar cambios en la resistencia al tocarse
  • Filtros de señal para mejorar la estabilidad de la lectura

Conclusiones sobre los pines de toque del ESP32

Los pines de detección de toque del ESP32 abren un mundo de posibilidades para los desarrolladores. Con la capacidad de crear interfaces interactivas, controlar dispositivos y desarrollar proyectos innovadores, esta característica amplía las capacidades ya impresionantes de la placa. Desde aplicaciones simples como un LED que se enciende con un toque, hasta proyectos más complejos como sistemas de automatización del hogar, el potencial es infinito.

Con la combinación adecuada de hardware y software, puedes llevar tus proyectos a un nivel completamente nuevo. Explorar la funcionalidad de los pines de toque puede inspirarte a crear soluciones únicas y personalizadas para tus necesidades.

Carlos Julián

Carlos Julián es el fundador de Ingtelecto, es Ingeniero Mecatrónico, Profesor y Programador, cuenta con una Maestria en Ciencias de la Educación, creador de contenido activo a través de TikTok @carlosjulian_mx

Estos temas te pueden interesar

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Tu puntuación: Útil

Subir