from lcd_i2c import LCD
from machine import I2C, Pin
from umqtt.simple import MQTTClient
import dht
import time
import network
I2C_ADDR = 0x27 # DEC 39, HEX 0x27
i2c = I2C(0, scl=Pin(18), sda=Pin(19), freq=800000)
lcd = LCD(addr=I2C_ADDR, cols=20, rows=4, i2c=i2c)
lcd.begin()
ssid = 'Wokwi-GUEST'
wifipassword = ''
sensor = dht.DHT22(Pin(14))
#definimos modo STATION
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
#conectamos a wifi
sta_if.connect(ssid, wifipassword)
lcd.clear()
lcd.set_cursor(0,0)
lcd.print("Conectando WiFi")
lcd.set_cursor(col=0,row=1)
lcd.print(ssid)
i = 0
lcd.set_cursor(0,2)
#lcd.print("Conectando")
while not sta_if.isconnected():
lcd.set_cursor(0,2)
if i == 0:
lcd.print(". ")
elif i == 1:
lcd.print(".. ")
elif i == 2:
lcd.print("... ")
else:
lcd.print("....")
i = (i + 1) % 4
time.sleep(0.5)
#vemos cuales son las IP
print(sta_if.ifconfig())
mqtt_server = 'io.adafruit.com'
port = 1883
user = 'Ismael2002Inca'
password = 'aio_HsLV60YzjA1tepdNwQa6txOG4QKT'
client_id = '123456'
topic_medidor = "Ismael2002Inca/feeds/medidor"
topic_control = "Ismael2002Inca/feeds/control"
topic_alarma1 = "Ismael2002Inca/feeds/alarma1"
topic_alarma2 = "Ismael2002Inca/feeds/alarma2"
lcd.clear()
lcd.set_cursor(0,0)
lcd.print("WiFi OK")
time.sleep(2)
lcd.clear()
lcd.print("Sistema iniciado")
lcd.set_cursor(col=0,row=1)
lcd.print("Monitoreando...")
time.sleep(2)
try:
conexionMQTT = MQTTClient(client_id,mqtt_server,user=user,password=password,port=port)
conexionMQTT.connect()
print("Conectado a Broker MQTT!")
except OSError as e:
print("Fallo conexion MQTT")
temperatura = 24
while True:
# Leer temperatura
sensor.measure()
nueva_temp = round(sensor.temperature(),1)
if nueva_temp > temperatura:
temperatura = nueva_temp
humedad = sensor.humidity()
conexionMQTT.publish(topic_medidor,"{}".format(temperatura))
print("Temperatura enviada:", temperatura)
# Limpiar pantalla
lcd.clear()
# Primera fila
lcd.set_cursor(col=0,row=0)
lcd.print("Temp: {} C".format(temperatura))
# Segunda fila
lcd.set_cursor(col=0,row=1)
lcd.print("Hum: {} %".format(humedad))
# Tercera fila
lcd.set_cursor(col=0,row=2)
if temperatura > 38:
lcd.print("!!! PELIGRO !!!")
conexionMQTT.publish(topic_alarma1,"1")
conexionMQTT.publish(topic_alarma2, "1")
print("Enviado ON")
temperatura -= 2
elif temperatura > 28:
lcd.print("AC: ENCENDIDO")
conexionMQTT.publish(topic_alarma1,"0")
conexionMQTT.publish(topic_alarma2, "1")
print("Enviado ON")
temperatura -= 1
else:
lcd.print("AC: APAGADO")
conexionMQTT.publish(topic_alarma1,"0")
conexionMQTT.publish(topic_alarma2,"0")
print("Enviado Off")
# Cuarta fila
lcd.set_cursor(col=0,row=3)
lcd.print("Data Center")
time.sleep(6)