import network
import time
import random
from machine import Pin
from umqtt.simple import MQTTClient
# Configuración WiFi
SSID = 'Wokwi-GUEST'
PASSWORD = ''
# Configuración de Adafruit IO
AIO_USERNAME = 'Faccu'
AIO_KEY = 'aio_ptKz32Q5JmGkSnwbqXed49UCc3yQ'
FEEDS = ['verde', 'rojo', 'azul', 'amarillo']
# Configuración de pines de LEDs
led_pins = [12, 14, 27, 26]
leds = [Pin(12, Pin.OUT),Pin(14, Pin.OUT),Pin(27, Pin.OUT),Pin(26, Pin.OUT)]
# Conectar a la red WiFi
def conectar_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
while not wlan.isconnected():
pass
print('Conexión WiFi establecida:', wlan.ifconfig())
# Configurar MQTT
def configurar_mqtt():
client = MQTTClient('client_id', 'io.adafruit.com', user=AIO_USERNAME, password=AIO_KEY)
client.connect()
print('Conexión a Adafruit IO establecida')
return client
# Función para suscribirse a los feeds de los botones
def suscribirse_feeds(client):
for feed in FEEDS:
client.subscribe(AIO_USERNAME + '/feeds/' + feed)
# Función para manejar los mensajes MQTT
def sub_cb(topic, msg):
global botones
topic_str = topic.decode('utf-8').split('/')[-1]
index = FEEDS.index(topic_str)
botones[index] = int(msg)
# Variables globales para los botones
botones = [0, 0, 0, 0]
# Configurar la conexión WiFi y MQTT
conectar_wifi()
client = configurar_mqtt()
client.set_callback(sub_cb)
suscribirse_feeds(client)
# Funciones del juego
def generar_secuencia(secuencia, pasos):
for _ in range(pasos):
secuencia.append(random.randint(0, 3))
return secuencia
def mostrar_secuencia(secuencia):
for color in secuencia:
leds[color].on()
time.sleep(0.5)
leds[color].off()
time.sleep(0.2)
def capturar_respuesta(longitud):
respuesta = []
print("hola soy mati")
while len(respuesta) < longitud:
client.check_msg() # Procesar mensajes MQTT
for i, estado in enumerate(botones):
if estado == 1:
respuesta.append(i)
while botones[i] == 1:
client.check_msg() # Procesar mensajes MQTT
leds[i].on()
time.sleep(0.2)
leds[i].off()
print("hola soy mati")
return respuesta
def comparar_secuencia(secuencia, respuesta):
return secuencia == respuesta
def retroalimentacion(correcto):
if correcto:
print("Correcto!")
for _ in range(3):
for led in leds:
led.on()
time.sleep(0.1)
for led in leds:
led.off()
time.sleep(0.1)
else:
print("Incorrecto!")
for _ in range(3):
for led in leds:
led.on()
time.sleep(0.05)
for led in leds:
led.off()
time.sleep(0.05)
def juego_simon_dice(pasos):
secuencia = []
while True:
secuencia = generar_secuencia(secuencia, pasos)
mostrar_secuencia(secuencia)
respuesta = capturar_respuesta(len(secuencia))
if comparar_secuencia(secuencia, respuesta):
retroalimentacion(True)
pasos += 1
else:
retroalimentacion(False)
break
time.sleep(5)
client.check_msg() # Procesar mensajes MQTT
# Ejecución del juego con una secuencia inicial de 1 paso
if __name__ == "__main__":
juego_simon_dice(1)