import time
import machine
import micropython
import network
from machine import Pin,PWM
from umqtt.simple import MQTTClient
import random
#indicamos red wifi y clave
ssid = 'Wokwi-GUEST'
wifipassword = ''
#indicamos datos del server MQTT
mqtt_server = 'io.adafruit.com'
port = 1883
user = 'Faccu'
password = 'aio_ptKz32Q5JmGkSnwbqXed49UCc3yQ'
#Indicamos id y topicos
client_id = 'prueba'
topic_pulsador = 'Faccu/feeds/pulsador'
topic_led = 'Faccu/feeds/led'
topic_level = 'Faccu/feeds/level'
#definimos modo station
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
#conectamos al wifi
sta_if.connect(ssid, wifipassword)
print("Conectando")
while not sta_if.isconnected():
print(".",end="")
time.sleep(0.1)
print("Conectado al Wifi!")
#vemos las direcciones IP
print(sta_if.ifconfig())
pulsadorVerde = Pin(18,Pin.IN,Pin.PULL_UP)
#ledRojo = Pin(19,Pin.OUT)
#level = 0
# Configuración de pines de LEDs
led_pins = [19,21]
leds = [Pin(19,Pin.OUT),Pin(21,Pin.OUT)]
FEEDS = ['pulsador', 'pulsador2']
# Función para suscribirse a los feeds de los botones
def suscribirse_feeds(client):
for feed in FEEDS:
client.subscribe(user + '/feeds/' + feed)
# Función para enviar datos a Adafruit IO
def send_to_adafruit(value):
AIO_USERNAME = 'Faccu'
AIO_FEED = 'level'
topic = '{}/feeds/{}'.format(AIO_USERNAME, AIO_FEED)
conexionMQTT.publish(topic, str(value))
# Contador de nivel
nivel = 0
#funcion que debe ejecutarse cada q se recibe un mensaje de un broker
def funcion_callback(topic, msg):
global bandera
bandera = 0
nivel = 0
dato = msg.decode('utf-8')
topicrec = topic.decode('utf-8')
global botones
topic_str = topic.decode('utf-8').split('/')[-1]
index = FEEDS.index(topic_str)
botones[index] = int(msg)
if dato == '1': print("Mensaje en topico "+topicrec+":"+dato)
if topicrec == topic_pulsador and '1' in dato:
#print("algo util se va a realizar a continuacion, ¡ESTEN ATENTOS!")
bandera = 1
else: bandera = 2
#ledRojo.value(topic_pulsador)
#contlevel+=1
#conexionMQTT.publish(topic_led,str(1))
#conexionMQTT.publish(topic_level,int(2))
#conexionMQTT.publish(topic_level,str(contlevel))
#Nos conectamos al broker MQTT
try:
conexionMQTT = MQTTClient(client_id, mqtt_server,user=user,password=password,port=int(port))
conexionMQTT.set_callback(funcion_callback)
conexionMQTT.connect()
conexionMQTT.subscribe(topic_pulsador)
print("Conectando con Broker MQTT")
except OSError as e:
print("Fallo la conexion con el Broker, reiniciand...")
time.sleep(5)
machine.reset()
suscribirse_feeds(conexionMQTT)
#fUNCIONES DEL JUEGO SIMON DICE
def comparar_secuencia(secuencia, respuesta):
return secuencia == respuesta
def retroalimentacion(correcto):
if correcto:
print("Correcto!")
for _ in range(1):
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(1):
for led in leds:
led.on()
time.sleep(0.05)
for led in leds:
led.off()
time.sleep(0.05)
def generar_secuencia(secuencia, pasos):
while len(secuencia) < pasos:
secuencia.append(random.randint(0, 1))
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:
conexionMQTT.check_msg() # Procesar mensajes MQTT
time.sleep_ms(500)
for i, estado in enumerate(botones):
if estado == 1:
respuesta.append(i)
while botones[i] == 1:
conexionMQTT.check_msg() # Procesar mensajes MQTT
leds[i].on()
time.sleep(0.2)
leds[i].off()
print("hola soy el segundo mati")
return respuesta
#aca tendria q ir el codigo magico
print("Comienzo del codigo magico: ")
nivel = 0
pasos = 1
secuencia = []
botones = [0, 0]
while True:
try:
conexionMQTT.check_msg()
time.sleep_ms(1000)
send_to_adafruit(nivel)
print('Nivel:', nivel)
secuencia = generar_secuencia(secuencia, pasos)
print("secuencia magica a realizar: ",secuencia)
mostrar_secuencia(secuencia)
respuesta = capturar_respuesta(len(secuencia))
if comparar_secuencia(secuencia, respuesta):
retroalimentacion(True)
pasos += 1
nivel += 1
else:
retroalimentacion(False)
break
time.sleep(2)
conexionMQTT.check_msg() # Procesar mensajes MQTT
except OSError as e:
print("Error ",e)
time.sleep(5)
machine.reset