import time
import machine
import micropython
import network
import dht
import tm1637
from machine import Pin,PWM
from umqtt.simple import MQTTClient
from tm1637 import TM1637
ssid = 'Wokwi-GUEST'
wifipassword = ''
mqtt_server = 'io.adafruit.com'
port = 1883
user = 'JoelRodriguez'
password = 'aio_umTm94lpYJOU5aPM2KbcpxrzY2nt'
client_id = 'Incubadora'
topic_sensorH = 'JoelRodriguez/feeds/SensorHum' #Sensor de Humedad
topic_sensorT='JoelRodriguez/feeds/SensorTemp'#Sensor de temperatura
topic_humect= 'JoelRodriguez/feeds/Sist_Humedad'#Led Sistema Humedad
topic_refrig= 'JoelRodriguez/feeds/Sist_Refrigeracion' #Led Sistema Refrigeracion
topic_display='JoelRodriguez/feeds/Display' #Display con los dias totales de incubacion
topic_FinCiclo= 'JoelRodriguez/feeds/FinIncubacion' #Led indica cambio de sector/Fin de la incubacion
topic_ALARMA = 'JoelRodriguez/feeds/AlarmaGeneral' #Alarma General
#Definicion de pines, estado, etc
ALARMA_ACTIVA=False #Estado Inicial de la alarma
display=TM1637(clk=Pin(27), dio=Pin(26))
contador=0 #DiasDeIncubacion
display.number(contador)
LedAzul= Pin(19,Pin.OUT) #Indica inicio de Sistema de refrigeracion
LedBlanco= Pin(21, Pin.OUT) #Indica inicio de Sistema de Humedad
LedAmarillo= Pin(5, Pin.OUT) #Indica Fin Del Ciclo de Incubacion
LedAlarma= Pin(17, Pin.OUT) #Define estado de la alarma
sensor= dht.DHT22(Pin(14))
alarma=PWM(Pin(18), freq=1200, duty_u16=32768)
alarma.duty(0)
#Conexion a internet
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect(ssid, wifipassword)
print("Conectando")
while not sta_if.isconnected():
print(".", end="")
time.sleep(0.1)
print("Conectado a Wifi!")
print(sta_if.ifconfig())
#Funcion para permitir un mensaje a la vez
def callback_alarma(topic, msg):
global ALARMA_ACTIVA,LedAlarma
dato = msg.decode('utf-8')
topicRecibido = topic.decode('utf-8')
print("Cambio en: "+topicRecibido+":"+dato)
if(topicRecibido==topic_ALARMA and "OFF" in dato):
ALARMA_ACTIVA=False
else:
ALARMA_ACTIVA=True
LedAlarma.value(ALARMA_ACTIVA)
#Conexion al cliente y subscripcion a topicos
try:
conexionMQTT = MQTTClient(client_id, mqtt_server,user=user,password=password,port=int(port))
conexionMQTT.set_callback(callback_alarma)
conexionMQTT.connect()
conexionMQTT.subscribe(topic_ALARMA)
conexionMQTT.subscribe(topic_humect)
conexionMQTT.subscribe(topic_refrig)
conexionMQTT.subscribe(topic_display)
conexionMQTT.subscribe(topic_FinCiclo)
conexionMQTT.subscribe(topic_sensorH)
conexionMQTT.subscribe(topic_sensorT)
print("Conectado con Broker MQTT")
except OSError as e:
#Si fallo la conexion, reiniciamos todo
print("Fallo la conexion al Broker, reiniciando...")
time.sleep(5)
machine.reset()
#Funcion que retorna temperatura
def MideTemperatura():
sensor.measure()
temp=sensor.temperature()
return temp
#Funcion que retorna humedad
def MideHumedad():
sensor.measure()
hum=sensor.humidity()
return hum
#Establece limites maximos y minimos
tempMax=60
tempMin=20
humMax=88
humMin=75
temp=MideTemperatura()
hum=MideHumedad()
print("Temp= " +str(temp) )
print("hum= "+str(hum))
#LOOP PRINCIPAL
while True:
try:
conexionMQTT.check_msg()
time.sleep_ms(1000)
NuevaTemp = MideTemperatura()
NuevaHum = MideHumedad()
if ALARMA_ACTIVA:
if NuevaTemp<tempMin or NuevaTemp>tempMax:
LedAzul.value(1)
conexionMQTT.publish(topic_refrig, str(1))
alarma.duty(512)
if NuevaTemp != temp:
print("Hubo una variacion en la temperatura ambiente")
conexionMQTT.publish(topic_sensorT, str(NuevaTemp))
else:
alarma.duty(0)
LedAzul.value(0)
temp=NuevaTemp
except OSError as e:
print("Error ",e)
time.sleep(5)
machine.reset()