import network
import socket
import time
from machine import Pin, PWM
# Configuración de pines PWM para el LED RGB (Cátodo común)
# Frecuencia de 1000Hz para evitar parpadeo visible
red = PWM(Pin(0))
green = PWM(Pin(1))
blue = PWM(Pin(2))
red.freq(1000)
green.freq(1000)
blue.freq(1000)
# Función para convertir porcentaje (0-100) a duty cycle de 16 bits (0-65535)
def set_duty(pwm_pin, percentage):
duty = int((percentage * 65535) / 100)
pwm_pin.duty_u16(duty)
# Configuración de Red en modo Punto de Acceso (Equipos PARES)
ap = network.WLAN(network.AP_IF)
ap.config(essid='Equipo12_RGB', password='password123')
ap.active(True)
print("Punto de Acceso activado")
print("IP de la Pico W:", ap.ifconfig()[0])
# Configuración del Socket
addr = socket.getaddrinfo('0.0.0.0', 2023)[0][-1]
s = socket.socket()
s.bind(addr)
s.listen(1)
print("Esperando conexión en el puerto 2023...")
while True:
conn, addr = s.accept()
print("Cliente conectado desde:", addr)
try:
while True:
data = conn.recv(1024).decode('utf-8')
if not data or data == "fin":
break
# El mensaje esperado tiene el formato: "COLOR:VALOR" (ej. "R:50")
parts = data.split(':')
if len(parts) == 2:
color = parts[0]
valor = int(parts[1])
if color == 'R':
set_duty(red, valor)
conn.send("Color Rojo modificado".encode())
elif color == 'G':
set_duty(green, valor)
conn.send("Color Verde modificado".encode())
elif color == 'B':
set_duty(blue, valor)
conn.send("Color Azul modificado".encode())
except Exception as e:
print("Error:", e)
finally:
conn.close()
print("Conexión cerrada.")