############################
# E020_LEDSRGB_PWM.PY: Modula luminosidad de LED RGB por PWM
# ENTRADAS: Valores RGB de cada color (1023-x) en un diccionario
# SALIDAS: Colores generados en el led RGB por PWM
# IMPORTANTE: En este ejemlo los LED lucen con 0 y se apagan con 1023
############################
import machine # Control del PWM
import time
# Configura los pines GPIO para el LED RGB como salida
pin_R = machine.Pin(32, machine.Pin.OUT) # led Rojo
pin_G = machine.Pin(12, machine.Pin.OUT) # led Verde
pin_B = machine.Pin(14, machine.Pin.OUT) # led Azul
# Configura el PWM en los pines correspondientes
pwm_R = machine.PWM(pin_R) # al no indicar frecuencia ESP32 asigna 1kHz
pwm_G = machine.PWM(pin_G) # al no indicar dutycycle ESP32 agina 0
pwm_B = machine.PWM(pin_B) # el valor del dutycycle va desde 1023 a 0
# Diccionario de colores reorganizado con valores invertidos
colores_comunes = {
"Rojo": (0, 1023, 1023),
"Amarillo": (0, 0, 1023),
"Verde": (1023, 0, 1023),
"Cian": (1023, 0, 0),
"Azul": (1023, 1023, 0),
"Magenta": (0, 1023, 0),
"Blanco": (0, 0, 0), # todos encendidos
"Negro": (1023, 1023, 1023), # todos apagados
"Naranja": (0, 511, 1023),
"Violeta": (511, 1023, 0),
"Rosa": (0, 511, 511),
"Turquesa": (1023, 511, 511),
"Celeste": (1023, 511, 0),
"Rojo_purpura": (0, 1023, 511),
"Verde_oscuro": (1023, 511, 1023),
"Naranja_oscuro": (0, 767, 1023),
"Azul_claro": (1023, 511, 0),
"Morado": (511, 1023, 511),
"Rosado": (0, 511, 255),
"Amarillo_cálido": (0, 255, 1023)}
# Función para presentar los colores del diccionario en columnas
# Nombre con 20 caracteres y valor RGB con 10 caracteres máximo
def presentar_colores(diccionario_colores):
print("-" * 50) # visualiza un separador
print("{:<20} {:<10} {:<10} {:<10}".format("Nombre", "(R)", "(G)", "(B)"))
print("-" * 50)
for nombre, valores in diccionario_colores.items(): # cambia duty en cada LED
ciclo_R, ciclo_G, ciclo_B = valores
pwm_R.duty(ciclo_R)
pwm_G.duty(ciclo_G)
pwm_B.duty(ciclo_B)
print("{:<20} {:<10} {:<10} {:<10}".format(nombre, ciclo_R, ciclo_G, ciclo_B))
time.sleep(1) # Espera un segundo entre colores
# El programa inicia aquí
print ('\n'*50) # Borra la pantalla al iniciar el programa
print ('Presento colores básicos en LED RGB por PWM')
try:
while True:
presentar_colores(colores_comunes)
except KeyboardInterrupt:
# Detener el programa cuando se presiona <Ctrl>+<C>
print("\nDeteniendo el programa.")
finally:
# Detener el PWM y apagar los LED al finalizar
print('Apago PWM y LED RGB...')
pwm_R.deinit()
pwm_G.deinit()
pwm_B.deinit()
pin_R.init(mode=machine.Pin.OUT)
pin_G.init(mode=machine.Pin.OUT)
pin_B.init(mode=machine.Pin.OUT)
pin_R.value(1)
pin_G.value(1)
pin_B.value(1)