import network
import time
from machine import Pin
import dht
import ujson
from umqtt.simple import MQTTClient
from my_esp import connect_wifi
import random as r
from time import sleep
import asyncio
# MQTT Server Parameters
MQTT_CLIENT_ID = f"d02k14{r.random()}"
MQTT_BROKER = "broker.hivemq.com"
MQTT_USER = ""
MQTT_PASSWORD = ""
MQTT_TOPIC = b"D02K14/giang123"
MQTT_SUB_TOPIC = b"D02K14/giang/led"
def sub_cb(topic, msg):
print((topic, msg))
if(msg == b"on"):
led2.on()
elif(msg == b"off"):
led2.off()
# khai bao led
led = Pin(27, Pin.OUT)
led2 = Pin(25, Pin.OUT)
led3 = Pin(26, Pin.OUT)
# khai bao cam bien
sensor1 = dht.DHT22(Pin(12))
motion = Pin(33, Pin.IN)
light = Pin(13, Pin.IN)
# connected wifi
connect_wifi()
print("Connecting to MQTT server... ", end="")
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)
client.set_callback(sub_cb)
client.connect()
client.subscribe(MQTT_SUB_TOPIC)
print("Connected!")
async def task1():
while True:
sensor1.measure()
t = sensor1.temperature()
h = sensor1.humidity()
print("Temperature: ", t)
print("Humidity: ", h)
data = "Temperature: " + str(t) + " C, Humidity: " + str(h) + "%"
# Publish dữ liệu lên MQTT_TOPIC
client.publish('D02K14/giang/temperature', str(t))
client.publish('D02K14/giang/humidity', str(h))
await asyncio.sleep(10)
async def task2():
while True:
v = motion.value()
if (v == 1):
client.publish('D02K14/giang/motion', 'motion detected')
led.on()
else:
client.publish('D02K14/giang/motion', 'motion undetected')
led.off()
await asyncio.sleep(0.5)
async def check_messages():
while True:
try:
client.check_msg()
await asyncio.sleep(0)
except Exception as e:
print(e)
async def lightsensor():
while True:
v = light.value()
print(v)
await asyncio.sleep(1)
if(v == 1):
client.publish('D02K14/giang/time', 'night time')
led3.on()
else:
client.publish('D02K14/giang/time', 'day time')
led3.off()
while True:
loop = asyncio.get_event_loop()
loop.create_task(task1())
loop.create_task(task2())
loop.create_task(check_messages())
loop.create_task(lightsensor())
loop.run_forever()