import time
import utime
from machine import Pin, time_pulse_us
from wifi import Wifi_config
from umqtt.simple import MQTTClient
from dht import DHT22
import _thread
#****** obj connect to wifi************
wifi= Wifi_config()
wifi.wifi_connect()
#**********Mqtt config****************
MQTT_CLIENT_ID = "wwwwe"
MQTT_BROKER = "broker.hivemq.com"
MQTT_USER = ""
MQTT_PASSWORD = ""
#**********Topic*************
fan_topic = 'room/fan'
tmp_topic = 'room/tmp'
hum_topic = 'room/hum'
utra_topic = 'room/utr'
led1_topic = 'room/led1'
led2_topic = 'room/led2'
led3_topic = 'room/led3'
air1_topic = 'room/air1'
air2_topic = 'room/air2'
#****************Pin Number*******
led1 = Pin(21,Pin.OUT)
led2 = Pin(19,Pin.OUT)
led3 = Pin(2,Pin.OUT)
led_air1 = Pin(5, Pin.OUT)
led_air2 = Pin(17, Pin.OUT)
led_fan = Pin(18,Pin.OUT)
dht_sensor = DHT22(Pin(22))
trig_pin = Pin(23, Pin.OUT)
echo_pin = Pin(25, Pin.IN)
# ************** Connect MQTT ***********************
try:
print("กำลังเชื่อมต่อกับ MQTT server... ", end="")
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER)
client.connect()
print("เชื่อมต่อสำเร็จ!")
except OSError as e:
print("Error connecting")
#****************Thread lock***********************
#***************** Utrasonic *********************
def ultra_sonic():
try:
trig_pin.value(0)
time.sleep_us(2)
trig_pin.value(1)
time.sleep_us(10)
trig_pin.value(0)
duration_us = time_pulse_us(echo_pin, 1)
distance_cm = duration_us / 58.5
print("Distance:", distance_cm, "cm")
client.publish(utra_topic, "{:.1f}".format(distance_cm))
if distance_cm < 60:
led1.on()
else:
led1.off()
except Exception as e:
print("Error in ultra_sonic:", e)
#***************** temperature ************************
def temp_sensor():
try:
dht_sensor.measure()
temp = dht_sensor.temperature()
hum = dht_sensor.humidity()
print("{:.1f}°C {:.1f}%".format(temp, hum))
client.publish(tmp_topic, "{:.1f}".format(temp))
client.publish(hum_topic, "{:.1f}".format(hum))
if temp >29:
led2.on()
else:
led2.off()
except Exception as e:
print("Error in temp_sensor:", e)
#**************** Callback **************************
# callback สำหรับการ subscribe ที่ topic
def sub_cb(topic, msg):
decoded_msg = msg.decode('utf-8')
decoded_topic = topic.decode('utf-8')
# print("ได้รับข้อความ: {}".format(decoded_msg))
#************* fan **************
if decoded_topic == fan_topic:
if decoded_msg == "on":
led_fan.on()
print("FAN:",decoded_msg)
elif decoded_msg == "off":
print("FAN:",decoded_msg)
led_fan.off()
#************* led 1 **************
elif decoded_topic == led1_topic:
if decoded_msg == "on":
led1.on()
print("LED:",decoded_msg)
elif decoded_msg == "off":
print("LED:",decoded_msg)
led1.off()
#************* led 2 **************
elif decoded_topic == led2_topic:
if decoded_msg == "on":
led2.on()
print("LED:",decoded_msg)
elif decoded_msg == "off":
print("LED:",decoded_msg)
led2.off()
#************* led 3 **************
elif decoded_topic == led3_topic:
if decoded_msg == "on":
led3.on()
print("LED:",decoded_msg)
elif decoded_msg == "off":
print("LED:",decoded_msg)
led3.off()
#************* air 1 **************
elif decoded_topic == air1_topic:
if decoded_msg == "on":
led_air1.on()
print("LED:",decoded_msg)
elif decoded_msg == "off":
print("LED:",decoded_msg)
led_air1.off()
#************* air 2 **************
elif decoded_topic == air2_topic:
if decoded_msg == "on":
led_air2.on()
print("LED:",decoded_msg)
elif decoded_msg == "off":
print("LED:",decoded_msg)
led_air2.off()
#****************************************
#****************************************
# กำหนด callback สำหรับ subscription
client.set_callback(sub_cb)
# **************subscribe ****************
client.subscribe(fan_topic)
client.subscribe(led1_topic)
client.subscribe(led2_topic)
client.subscribe(led3_topic)
client.subscribe(air1_topic)
client.subscribe(air2_topic)
client.subscribe(tmp_topic)
#********************
#เปิดปิดไฟไม่ดีเลย
while True:
if client.check_msg():
pass
else:
ultra_sonic()
temp_sensor()
time.sleep(0.5)
#
# # ดีเลย์นาน
# while True:
# client.check_msg()
# ultra_sonic()
# temp_sensor()