# Programa PIC´s en sistemas Electromecánicos
# P105: Control de LED con ESP32 y MicroPython
# Docente: Sixto Humberto González Páez
# Institucion: CBTis 122
# nombre de uds: Sofia Alejandra Rios Ramos
# especialidad y grupo: Electromecanica, 5C
# fecha de inicio: 08/09/2026
#fecha de terminacion: 14/09/2026
"""
OBJETIVO PRINCIPAL
Controlar una secuencia progresiva y acumulativa de 10 LEDs mediante una tarjeta de desarrollo ESP32 WROOM usando el lenguaje MicroPython,
configurando 10 pines GPIO como salidas digitales para encender la barra de luz de abajo hacia arriba y apagarla simultáneamente al finalizar.
OBJETIVOS ESPECÍFICOS
Declarar y configurar los pines GPIO 2, 4, 16, 17, 5, 18, 19, 21, 22 y 23 del ESP32 como salidas digitales (Pin.OUT).
Implementar una secuencia de encendido acumulativo donde cada LED se enciende durante 1 segundo y permanece encendido
mientras los demás se van sumando de abajo hacia arriba.
Mantener los 10 LEDs encendidos simultáneamente al final del conteo y posteriormente apagarlos todos al mismo tiempo.
Crear un bucle infinito que repita el ciclo completo de forma continua.
MATERIAL Y EQUIPO NECESARIO
1 Módulo ESP32 WROOM: Tarjeta de desarrollo programable en MicroPython.
10 LEDs de cualquier color: Componentes de iluminación a controlar.
10 Resistencias de 220 o 330 Ohmios: Protegen los LEDs limitando la corriente eléctrica.
1 Protoboard: Placa de pruebas para armar las conexiones.
11 o más Cables Jumper Macho-Macho: 10 cables para conectar las salidas del ESP32 a los LEDs y 1 cable hacia Tierra (GND).
1 Cable USB a micro-USB: Suministra energía al ESP32 y transmite el código desde la computadora.
1 Computadora: Con el entorno de desarrollo Thonny IDE instalado.
DIAGRAMA Y CONEXIONES
Para realizar las conexiones en el protoboard de forma ordenada, conecta los pines GPIO
en el siguiente orden para la secuencia de abajo hacia arriba:
Pines utilizados en el ESP32: GPIO 2, GPIO 4, GPIO 16, GPIO 17, GPIO 5, GPIO 18, GPIO 19, GPIO 21, GPIO 22 y GPIO 23.
Pasos para conectar cada uno de los 10 LEDs:
Conecta un cable desde el pin GPIO del ESP32 hasta el ánodo (pata larga) de su respectivo LED.
Conecta el cátodo (pata corta) del LED a un extremo de la resistencia de 220 o 330 Ohmios.
El otro extremo de la resistencia se conecta a la línea negativa (azul/negra) del protoboard.
Conecta un cable desde la línea negativa del protoboard hacia el pin marcado como GND en la tarjeta ESP32 para cerrar el circuito.
EXPLICACIÓN DETALLADA DEL CÓDIGO PASO A PASO
Importación de módulos:
from machine import Pin: Importa la función Pin de MicroPython, necesaria para configurar e interactuar con los pines físicos del ESP32.
from time import sleep: Importa la función sleep, la cual detiene la ejecución del programa durante la cantidad de segundos especificada entre paréntesis.
Configuración de pines de salida:
Instrucciones:
led10 = Pin(2, Pin.OUT)
led9 = Pin(4, Pin.OUT)
...
led1 = Pin(23, Pin.OUT)
Explicación: Cada variable (desde led10 hasta led1) representa un LED del circuito. El primer parámetro indica el número de GPIO utilizado (2, 4, 16, 17, 5, 18, 19, 21, 22 y 23)
y el segundo parámetro Pin.OUT establece que ese pin enviará voltaje hacia el exterior para encender el componente.
Inicio del bucle infinito:
Instrucción: while True:
Explicación: Crea una condición que siempre se cumple, obligando al ESP32 a ejecutar indefinidamente todas las instrucciones que se encuentran indentadas dentro de él.
Encendido acumulativo paso a paso:
Instrucción: led10.value(1) seguido de sleep(1)
Explicación: La orden value(1) envía un estado alto (3.3 Voltios) al pin GPIO 2, encendiendo el primer LED ubicado en la base. La instrucción sleep(1) mantiene ese estado por 1 segundo.
Dado que no se coloca la instrucción value(0) inmediatamente después, el LED permanece encendido mientras el código avanza a las siguientes líneas (led9.value(1), led8.value(1), etc.),
logrando que se vayan sumando uno a uno hasta tener los 10 prendidos simultáneamente al llegar a led1.value(1).
Apagado simultáneo de la secuencia:
Instrucciones:
led10.value(0)
led9.value(0)
...
led1.value(0)
sleep(1)
Explicación: Se asigna el valor 0 (0 Voltios) consecutivamente a las 10 variables, cortando el paso de corriente a todos los pines de forma inmediata. La última instrucción sleep(1)
crea un lapso de 1 segundo de oscuridad antes de que el ciclo while True recomience la secuencia desde el primer LED.
POSIBLES ERRORES Y CÓMO RESOLVERLOS
Si un LED no enciende durante la secuencia:
Causa: El LED está colocado al revés (polaridad invertida) o la resistencia no hace contacto en la línea de tierra (GND).
Solución: Confirma que la pata larga (ánodo) del LED esté conectada al pin GPIO correspondiente y que la pata corta (cátodo) esté unida a la resistencia conectada a GND.
Error de sintaxis o de importación en Thonny:
Causa: Error al escribir los nombres de las librerías o comandos.
Solución: MicroPython distingue estrictamente entre mayúsculas y minúsculas. Comprueba que "Pin" inicie con mayúscula y que "sleep", "value" y "while" estén completamente en minúsculas.
Error IndentationError:
Causa: Las líneas dentro del bloque while True no tienen la alineación adecuada hacia la derecha.
Solución: Inserta un tabulador o 4 espacios de sangría al inicio de todas las instrucciones que están contenidas dentro del ciclo while True.
CONCLUSIÓN
Mediante este proyecto se logró controlar una matriz de 10 LEDs en el microcontrolador ESP32 WROOM usando instrucciones básicas de MicroPython. El desarrollo permitió
comprender el funcionamiento de los estados lógicos de las salidas digitales (1 para encendido y 0 para apagado)
y cómo la omisión de la instrucción de apagado individual permite generar efectos visuales complejos como una barra de llenado acumulativa.
"""
#EMPIEZA EL PROGRAMA
from machine import Pin
from time import sleep
# Declaramos los 10 pines desde el 2 hasta el 23 como salidas (OUT)
led10 = Pin(2, Pin.OUT)
led9 = Pin(4, Pin.OUT)
led8 = Pin(16, Pin.OUT)
led7 = Pin(17, Pin.OUT)
led6 = Pin(5, Pin.OUT)
led5 = Pin(18, Pin.OUT)
led4 = Pin(19, Pin.OUT)
led3 = Pin(21, Pin.OUT)
led2 = Pin(22, Pin.OUT)
led1 = Pin(23, Pin.OUT)
# Ciclo infinito
while True:
# 1. Se prende el pin 15 y se QUEDA encendido (no usamos value(0) todavía)
led10.value(1)
sleep(1)
# 2. Se suma el pin 14 encendido
led9.value(1)
sleep(1)
# 3. Se suma el pin 13 encendido
led8.value(1)
sleep(1)
# 4. Se suma el pin 12 encendido
led7.value(1)
sleep(1)
# 5. Se suma el pin 11 encendido
led6.value(1)
sleep(1)
# 6. Se suma el pin 10 encendido
led5.value(1)
sleep(1)
# 7. Se suma el pin 9 encendido
led4.value(1)
sleep(1)
# 8. Se suma el pin 8 encendido
led3.value(1)
sleep(1)
# 9. Se suma el pin 7 encendido
led2.value(1)
sleep(1)
# 10. Se suma el pin 6 encendido (aquí ya están los 10 LEDs PRENDIDOS a la vez)
led1.value(1)
sleep(1)
# --- APAGADO DE TODOS LOS LEDS ---
# Apagamos todos los pines juntos inmediatamente antes de reiniciar la secuencia
led10.value(0)
led9.value(0)
led8.value(0)
led7.value(0)
led6.value(0)
led5.value(0)
led4.value(0)
led3.value(0)
led2.value(0)
led1.value(0)
# Pausa de 1 segundo con todos apagados antes de volver a empezar
sleep(1)