# Khai bao thu vien
from machine import Pin
import uasyncio as asyncio
import urequests as requests
from dht import DHT22
import network
from connect_internet import connect_wifi
# MQTT
from umqtt.simple import MQTTClient
# ESP32
sta_if = network.WLAN(network.STA_IF)
# Cam bien
dht22 = DHT22(Pin(25))
montion_senor = Pin(16, Pin.IN)
# Den
led_motion = Pin(15, Pin.OUT)
red_led = Pin(27, Pin.OUT)
blue_led = Pin(13, Pin.OUT)
# Ket noi den wifi
connect_wifi()
# Ket noi den MQTT Broker
MQTT_CLIENT_ID = "d05k13-bkacad-2024-15-01"
MQTT_BROKER = "broker.hivemq.com"
MQTT_USER = ""
MQTT_PASSWORD = ""
# Topic
MQTT_SUB = "d05k13/iot/smart_system"
def get_msg(topic, msg):
print(topic, msg)
if(msg == b'LED_ON'):
red_led.on()
blue_led.on()
elif(msg == b'LED_OFF'):
red_led.off()
blue_led.off()
elif(msg == b'RED_LED_ON'):
red_led.on()
elif(msg == b'RED_LED_OFF'):
red_led.off()
elif(msg == b'BLUE_LED_ON'):
blue_led.on()
elif(msg == b'BLUE_LED_OFF'):
blue_led.off()
print("Connecting to MQTT server... ", end="")
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)
# Khi nhan dc message -> se goi den ham callback
client.set_callback(get_msg)
client.connect()
print("Connected!")
client.subscribe(MQTT_SUB)
# Task 1
async def get_env_dht22():
while True:
dht22.measure()
t = dht22.temperature()
h = dht22.humidity()
print(t, h)
# https://api.thingspeak.com/update?api_key=KOD2TSKG6W84Q82V&field1=30&field2=50
if sta_if.isconnected(): # Neu co ket noi internet
res = requests.get(url=f'http://api.thingspeak.com/update?api_key=KOD2TSKG6W84Q82V&field1={t}&field2={h}')
del res
await asyncio.sleep(20)
# Task 2
async def detect_motion():
while True:
v = montion_senor.value()
if(v == 1):
# Gui canh bao
client.publish('d05k13/iot/smart_system/alert', 'DETECT_MOTION')
led_motion.on()
else:
led_motion.off()
await asyncio.sleep(1)
# Task3
async def get_message_from_user():
while True:
client.check_msg()
await asyncio.sleep(0.5)
# Khởi tạo và chạy các công việc bất đồng bộ
loop = asyncio.get_event_loop()
loop.create_task(get_env_dht22())
loop.create_task(detect_motion())
loop.create_task(get_message_from_user())
loop.run_forever()