#IMPORTANDO LIBRERIAS
from machine import Pin, ADC, PWM, I2C
from time import sleep
import network
from ssd1306 import SSD1306_I2C
import ujson
from umqtt.simple import MQTTClient
from lcd_api import LcdApi
from pico_i2c_lcd import I2cLcd
#CONFIGURACIÓN ENTRADAS
sensor_corriente = ADC(Pin(34))
sensor_corriente.width(ADC.WIDTH_10BIT)
sensor_temperatura = ADC(Pin(33))
sensor_temperatura.width(ADC.WIDTH_10BIT)
sensor_humedad = ADC(Pin(32))
sensor_humedad.width(ADC.WIDTH_10BIT)
sensor_luz = ADC(Pin(35))
sensor_luz.width(ADC.WIDTH_10BIT)
sensor_llama = Pin (13, Pin.IN, Pin.PULL_UP)
sensor_mov = Pin (12, Pin.IN, Pin.PULL_UP)
sensor_gas = Pin (14, Pin.IN, Pin.PULL_UP)
#CONFIGURACIÓN SALIDAS
sal_llama = Pin(15, Pin.OUT)
sal_mov = Pin(2, Pin.OUT)
sal_gas = Pin(4, Pin.OUT)
sal_temperatura = Pin(5, Pin.OUT)
sal_humedad = Pin(18, Pin.OUT)
sal_luz = Pin(19, Pin.OUT)
#Dirección del I2C y tamaño del LCD
I2C_ADDR = 0x27
I2C_NUM_ROWS = 4
I2C_NUM_COLS = 20
i2c = I2C(sda=Pin(21), scl=Pin(22), freq=100000)
lcd = I2cLcd(i2c, I2C_ADDR, I2C_NUM_ROWS, I2C_NUM_COLS)
#CONEXION WIFI
print ("conectando a la red",end="")
red = network.WLAN(network.STA_IF)
red.active(True)
red.connect("Wokwi-GUEST","")
while not red.isconnected():
print("*", end="")
sleep(0.5)
print("Conectado¡¡")
print(red.ifconfig())
#CONEXION MQTT
#URL= https://www.hivemq.com/demos/websocket-client/
# MQTT Server Parameters
MQTT_CLIENT_ID = "proyecto"
MQTT_BROKER = "medsecomonitor.com"
MQTT_USER = ""
MQTT_PASSWORD = ""
MQTT_TOPIC_0 = "corriente"
MQTT_TOPIC_1 = "temperatura"
MQTT_TOPIC_O1 = "temperatura/salida"
MQTT_TOPIC_2 = "humedad"
MQTT_TOPIC_O2 = "humedad/salida"
MQTT_TOPIC_3 = "luz"
MQTT_TOPIC_O3 = "luz/salida"
MQTT_TOPIC_4 = "llama"
MQTT_TOPIC_5 = "movimiento"
MQTT_TOPIC_6 = "gas"
MQTT_TOPIC_I1 = "boton"
#CONEXION
print("Connecting to MQTT server... ", end="")
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)
client.connect()
print("Connected!")
#FUNCION RECEPCION MENSAJE MQTT
def callback(topic, msg):
print("Mensaje recibido en el topic: {}, Mensaje: {}".format(topic, msg.decode()))
recibido = msg.decode()
#ENCENDER LEDS
if recibido == "4":
sal_temperatura.value(1)
sleep(0.5)
if recibido == "5":
sal_humedad.value(1)
sleep (0.5)
if recibido == "6":
sal_luz.value(1)
sleep (0.5)
#APAGAR LEDS
if recibido == "40":
sal_temperatura.value(0)
sleep(0.5)
if recibido == "50":
sal_humedad.value(0)
sleep (0.5)
if recibido == "60":
sal_luz.value(0)
sleep (0.5)
client.set_callback(callback)
client.subscribe(MQTT_TOPIC_I1)
#CICLO INFINITO
while True:
client.check_msg()
#CORRIENTE
lectura_corriente = sensor_corriente.read()
valor_corriente = round(lectura_corriente*100/1023,02)
valor_corriente_str = "{:.2f}".format(valor_corriente)
#TEMPERATURA
lectura_temperatura = sensor_temperatura.read()
valor_temperatura = round((lectura_temperatura*175/1023)-50,02)
valor_temperatura_str = "{:.2f}".format(valor_temperatura)
est_sal_temperatura = sal_temperatura.value()
'''
if valor_temperatura >= 40:
sal_temperatura.value(1)
else:
sal_temperatura.value(0)
est_sal_temperatura = sal_temperatura.value()
'''
#HUMEDAD
lectura_humedad = sensor_humedad.read()
valor_humedad = round(lectura_humedad*30/1023,02)
valor_humedad_str = "{:.2f}".format(valor_humedad)
est_sal_humedad = sal_humedad.value()
'''
if valor_humedad >= 20:
sal_humedad.value(1)
else:
sal_humedad.value(0)
est_sal_humedad = sal_humedad.value()
'''
#LUZ
lectura_luz = sensor_luz.read()
valor_luz = round(lectura_luz*200/1023,02)
valor_luz_str = "{:.2f}".format(valor_luz)
est_sal_luz = sal_luz.value()
'''
if valor_luz >= 100:
sal_luz.value(1)
else:
sal_luz.value(0)
est_sal_luz = sal_luz.value()
'''
#LLAMA
if sensor_llama.value () == 0:
sal_llama.value(1)
else:
sal_llama.value(0)
est_sal_llama = sal_llama.value()
#MOVIMIENTO
if sensor_mov.value () == 0 :
sal_mov.value(1)
else:
sal_mov.value(0)
est_sal_mov = sal_mov.value()
#GAS
if sensor_gas.value () == 0 :
sal_gas.value(1)
else:
sal_gas.value(0)
est_sal_gas = sal_gas.value()
print(valor_corriente)
print(valor_temperatura)
print(valor_humedad)
print(valor_luz)
#VISUALIZACIÓN PANTALLA LCD
lcd.clear()
lcd.putstr("Corriente: ")
lcd.move_to(10,0)
lcd.putstr("{:.2f}".format(valor_corriente))
lcd.move_to(15,0)
lcd.putstr("[A]")
lcd.move_to(0,1)
lcd.putstr("Temp: ")
lcd.move_to(10,1)
lcd.putstr("{:.2f}".format(valor_temperatura))
lcd.move_to(15,1)
lcd.putstr("[C]")
lcd.move_to(0,2)
lcd.putstr("Humedad: ")
lcd.move_to(10,2)
lcd.putstr("{:.2f}".format(valor_humedad))
lcd.move_to(15,2)
lcd.putstr("[%]")
lcd.move_to(0,3)
lcd.putstr("Humedad: ")
lcd.move_to(10,3)
lcd.putstr("{:.2f}".format(valor_luz))
lcd.move_to(15,3)
lcd.putstr("[LUX]")
#MANDAR DATOS A MQTT
#SALIDA O0
mensaje = ujson.dumps({
"corriente": valor_corriente,
"temperatura": valor_temperatura,
"humedad": valor_humedad,
})
client.publish(MQTT_TOPIC_0,valor_corriente_str)
client.publish(MQTT_TOPIC_1,valor_temperatura_str)
client.publish(MQTT_TOPIC_O1,str(est_sal_temperatura))
client.publish(MQTT_TOPIC_2,valor_humedad_str)
client.publish(MQTT_TOPIC_O2,str(est_sal_humedad))
client.publish(MQTT_TOPIC_3,valor_luz_str)
client.publish(MQTT_TOPIC_O3,str(est_sal_luz))
client.publish(MQTT_TOPIC_4,str(est_sal_llama))
client.publish(MQTT_TOPIC_5,str(est_sal_mov))
client.publish(MQTT_TOPIC_6,str(est_sal_gas))
sleep(0.25)
print(mensaje)
print("estado de led llama:",est_sal_llama)
print("estado de led mov:",est_sal_mov)
print("estado de led gas:",est_sal_gas)