from umqtt.simple import MQTTClient
import time
import machine
from machine import Pin
import network
import micropython
ssid = 'Wokwi-GUEST'
wifipassword = ''
#red wifi y clave
mqtt_server = 'io.adafruit.com'
port = 1883
user = 'Fabriconde'
password = 'aio_wCun95DCyhX44GxApSns5xztGad0'
client_id = 'Switchfabriconde'
topic_switch = 'Fabriconde/f/Switch'
topic_LED = 'Fabriconde/f/LED'
topic_humedad = 'Fabriconde/f/HUMEDAD'
topic_hum_max = 'Fabriconde/f/HMax'
topic_hum_min = 'Fabriconde/f/HMin'
LEDestado= Pin(23,Pin.OUT)
LEDestado_enviar = " " #para devolver el estado del led a adafruit
Potenciometro = Pin(12,Pin.OUT) #Usamos potenciometro para simular sensor de humedad
Relay = Pin(22,Pin.OUT)
#conectarse a Access Point remoto
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(1)
print("Conectado a Wifi!")
#Vemos las IP
print(sta_if.ifconfig())
#funcion callback
def funcion_callback(topic, msg):
global LEDestado, LEDestado_enviar
dato = msg.decode('utf-8')
topicrec = topic.decode('utf-8')
print("Mensaje en topico "+topicrec+":"+dato)
if topicrec == topic_switch and "ON" in dato: #dependiendo el valor del switch se prende o se apaga el LED
LEDestado.value(1)
LEDestado_enviar = "ON"
if topicrec == topic_switch and "OFF" in dato:
LEDestado.value(0)
LEDestado_enviar= "OFF"
print("Valor enviado al adafruit= "+LEDestado_enviar)
try:
conexionMQTT = MQTTClient(client_id, mqtt_server,user=user,password=password,port=int(port))
conexionMQTT.set_callback(funcion_callback) #Funcion Callback para recibir mensajes del broker
conexionMQTT.connect() #Hacemos la conexión
conexionMQTT.subscribe(topic_switch) #Nos suscribimos al topico switch
print("Conectado con Broker MQTT")
except OSError as e:
print("Fallo la conexion al Broker, reiniciando...")
time.sleep(5)
machine.reset()
while True:
try:
conexionMQTT.check_msg() #chequeamos nuevos mensajes en el broker
time.sleep_ms(1000)
#Si queremos publicar algo podemos usar la función publish…
conexionMQTT.publish(topic_LED,LEDestado_enviar)
except OSError as e:
print("Error ",e)
time.sleep(5)
machine.reset()