Práctica 1: ESP32 Entradas y Salidas Digitales

En esta práctica, usamos un ESP32 DevKitC para implementar un simple sistema de entradas y salidas que nos permita simular un comportamiento lógico AND y OR usando dos botones y un diodo LED.

Materiales:

Paso 1: Preparar el entorno de desarrollo

Instalar Arduino IDE (o VS Code + PlatformIO), añadir el gestor de placas “esp32” y seleccionar “ESP32 DevKitC” en el puerto COM adecuado. Usamos la ventana de preferencias en el Arduino IDE (ctrl + ;) para pegar este link: https://espressif.github.io/arduino-esp32/package_esp32_index.json

Dicha URL nos permitirá instalar múltiples tarjetas ESP32 compatibles con Arduino.

Configuración IDE
Ventana del IDE con la placa ESP32 DevKitC seleccionada.
Paso 2: Conocer el pinout de la DevKit

Consultamos el diagrama oficial de pines e identificamos los GPIO de salida que queremos utilizar.

Diagrama de pinout
Diagrama de pines de la ESP32 DevKitC.
Paso 3: Montaje del LED

Conecté un LED entre los pines 27 y 14 del ESP32, no utilizamos resistencia en este caso dado que el voltaje del GPIO es directamente compatible con el LED, así como también la corriente está limitada internamente en el microcontrolador. El conectar los elementos a los GPIO directamente nos permite cambiar la polaridad en código y simplifica enormemente nuestro cableado, con la consigna de que sólo es posible alimentar circuitos que no superen los 30mA.

Usamos un código simple para encender el LED y comprobar su funcionamiento.

Conexión LED
LED conectado entre los pines 27 y 14.
Paso 4: Conectar Botones

Añadimos dos botones entre los pines 4 - 16 y 18 - 19 . El pin que manejará la lectura de cada botón deberá configurarse con pull-down interno para evitar lecturas flotantes y estados indefinidos.

Botón con pull-down
Circuito completo ensamblado en una protoboard.
Paso 5: Lógica OR con dos botones

Usamos un estado lógico OR directamente implementado en el código para lograr el comportamiento deseado (if(b1 || b2)) al controlar el LED.


// Pines para ESP32 DevKitC:
#define LED 27
#define LEDGND 14

#define BT1 18
#define BT1GND 19
#define BT2 16
#define BT2GND 4
const int DelayConst = 1000;

void setup() {
  // Configuración de Pines 
  pinMode(LED, OUTPUT);
  pinMode(LEDGND, OUTPUT);
  pinMode(BT1GND, OUTPUT);
  pinMode(BT2GND, OUTPUT);
  pinMode(BT1, INPUT_PULLUP);
  pinMode(BT2, INPUT_PULLUP);

  digitalWrite(LEDGND, LOW);
  digitalWrite(BT1GND, LOW);
  digitalWrite(BT2GND, LOW);
}

void loop() {
  //Lógica Booleana
  if(digitalRead(BT1) == false || digitalRead(BT2) == false){
    digitalWrite(LED, HIGH);
  }
  else{
    digitalWrite(LED, LOW);
  }
}
    

Demostración de la lógica OR con dos botones controlando el LED.

Paso 6: Lógica AND con dos botones

Ajustamos el sketch para usar lógica AND (if(b1 && b2)) y encender el LED sólo cuando ambos botones estén pulsados.

Demostración de la lógica OR con dos botones controlando el LED.