from machine import Pin
import dht
import uasyncio
import time
import requests
import ntptime
from my_mqtt import *
from internet import connect_internet
from umqtt.simple import MQTTClient
#DHT22
d = dht.DHT22(Pin(14))
#Khai bao den va cam bien chuyen dong
m_sensor = Pin(34, Pin.IN)
led_m_sensor = Pin(25, Pin.OUT)
#Khai bao den
led_1 = Pin(0, Pin.OUT)
led_2 = Pin(19, Pin.OUT)
#Connect to internet
connect_internet()
#Sync time with internet
ntptime.settime()
#Connect to MQTT
print("Connecting to MQTT server....", end="")
client= MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)
client.connect()
print('MQTT Connected')
#Set MQTT callback
def m_callback(topic,msg):
print(topic, msg)
if (msg == b'LED_ON'):
led_1.on()
led_2.on()
elif (msg == b'LED_OFF'):
led_1.off()
led_2.off()
elif(msg == b'LED1_ON'):
led_1.on()
elif(msg == b'LED1_OFF'):
led_1.off()
elif(msg == b'LED2_ON'):
led_2.on()
elif(msg == b'LED2_OFF'):
led_2.off()
client.set_callback(m_callback)
client.subscribe("UnizZng/control/asm")
#phat hien chuyen dong bat den canh bao
async def detect_motion():
while True:
#1h sang den 6h sang
#lay gio
hour = time.localtime() [3]
hour = (hour+7) % 24
if(hour >= 1 and hour <= 6):
v=m_sensor.value()
if(v == 1):
led_m_sensor.on()
else:
led_m_sensor.off()
await uasyncio.sleep(1)
#Read data from sensor and push to ThinkSpeak
async def update_env_to_thingspeak():
while True:
d.measure()
t = d.temperature()
h = d.humidity()
print(t,h)
# https://api.thingspeak.com/update?api_key=GSLDXW3JPQXXY367&field1=0
res = requests.get(f'http://api.thingspeak.com/update?api_key=GSLDXW3JPQXXY367&field1={t}&field2={h}')
del res
await uasyncio.sleep(20)
# Nhan lenh dieu khien tu nguoi dung
async def get_user_led_command():
while True:
#0.5s 1 lan
client.check_msg()
await uasyncio.sleep(0.5)
#Toi gio thi thuc hien task
async def timed_auto_process():
while True:
hour = time.localtime() [3]
hour = (hour+7) % 24
minute = time.localtime() [4]
if(hour == 15 and minute == 22):
print("Doing Assigned Task")
await uasyncio.sleep(60)
# Main loop
loop = uasyncio.get_event_loop()
loop.create_task(update_env_to_thingspeak())
loop.create_task(detect_motion())
loop.create_task(get_user_led_command())
loop.create_task(timed_auto_process())
loop.run_forever()