from machine import Pin,I2C
from time import sleep
import dht
import network
from umqtt.simple import MQTTClient
import json
from i2c_lcd import I2cLcd
#componennts code
sensor=dht.DHT22(Pin(15))
led=Pin(4,Pin.OUT)
buzzar=Pin(2,Pin.OUT)
#LCD code
i2c=I2C(0,scl=Pin(21),sda=Pin(22))
lcd=I2cLcd(i2c,0x27,2,16)
#WIFI connection code
wifi=network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect("Wokwi-GUEST","")
print("connection to wifi")
while not wifi.isconnected():
sleep(1)
print("connected to wifi")
#myqtt setup
client_id="my new complex project"
myqtt_server= "broker.hivemq.com"
topic_pub=b"haidari/temperature/data"
topic_sub=b"eimal/new/system"
topic_alerts=b"eimal/alerts"
client=MQTTClient(client_id,myqtt_server)
def callback(topic,msg):
print("recieved:",msg)
if (msg=="LED_ON"):
led.value(1)
elif (msg=="LED_OFF"):
led.value(0)
elif (msg=="BUZZER_ON"):
buzzar.value(1)
elif (msg=="BUZZER_OFF"):
buzzar.value(0)
client.set_callback(callback)
client.connect()
client.subscribe(topic_sub)
print("myqtt connnected")
def show_lcd(temp,hum,status):
lcd.clear()
line1="T:{}C H:{}%".format(temp,hum)
line2=status
lcd.putstr(line1+"\n"+line2)
while True:
client.check_msg()
sensor.measure()
temp=sensor.temperature()
hum=sensor.humidity()
status="Normal"
if temp<=28:
led.value(0)
buzzar.value(0)
elif 29<temp<=35:
status="Warning"
led.value(1)
sleep(0.3)
led.value(0)
buzzar.value(0)
elif 35<temp<=40:
status="Danger"
led.value(1)
buzzar.value(1)
else:
status="Extreme"
for i in range(5):
led.value(1)
buzzar.value(1)
sleep(0.2)
led.value(0)
buzzar.value(0)
sleep(0.2)
client.publish(topic_alerts,b"Extreme Temperature")
show_lcd(temp,hum,status)
data = {
"temperature": temp,
"humidity": hum,
"status": status
}
payload = json.dumps(data)
# SEND MQTT DATA
client.publish(topic_pub, payload)
print(payload)
sleep(2)