# The problem i am addressing is the ENVIRONMENT of the elderly
# heat will definetly become a problem for the elderly so I will make a machine that controlls
# the heat of the roomhttps://www.google.com/search?q=%E0%B8%AA%E0%B8%B9%E0%B8%95%E0%B8%A3%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%84%E0%B8%B9%E0%B8%93%E0%B8%84%E0%B8%A5%E0%B8%B2%E0%B8%94%E0%B9%80%E0%B8%84%E0%B8%A5%E0%B8%B7%E0%B9%88%E0%B8%AD%E0%B8%99&client=safari&sca_esv=b0c8a5b5dae9aa98&hl=en-gb&udm=2&biw=862&bih=1243&sxsrf=AE3TifNGoCb819fL7coQ6rvgaWP6UELk4g%3A1754321226245&ei=StGQaITbDuifvr0P89_wyAQ&ved=0ahUKEwiEqIzsu_GOAxXoj68BHfMvHEkQ4dUDCBE&uact=5&oq=%E0%B8%AA%E0%B8%B9%E0%B8%95%E0%B8%A3%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%84%E0%B8%B9%E0%B8%93%E0%B8%84%E0%B8%A5%E0%B8%B2%E0%B8%94%E0%B9%80%E0%B8%84%E0%B8%A5%E0%B8%B7%E0%B9%88%E0%B8%AD%E0%B8%99&gs_lp=EgNpbWciP-C4quC4ueC4leC4o-C4geC4suC4o-C4hOC4ueC4k-C4hOC4peC4suC4lOC5gOC4hOC4peC4t-C5iOC4reC4mUicb1DzLFiXa3AFeACQAQCYAWqgAcIFqgEDMi41uAEDyAEA-AEBmAIAoAIAmAMAiAYBkgcAoAflArIHALgHAMIHAMgHAA&sclient=img#vhid=WApGFRtsvEq4OM&vssid=mosaic$0
import netpie
from dht import DHT22
from machine import Pin, I2C , PWM
import time
import ssd1306
from servo import Servo
import ujson #NET pie stuff
from umqtt.simple import MQTTClient # netpie stuff
# Configurations
SSID = "Wokwi-GUEST"
PASSWORD = ""
MQTT_BROKER = "broker.netpie.io"
MQTT_PORT = 1883
MQTT_CLIENT = "53dd19ca-7dcc-4196-b08f-549e6f60e5ee" # Client ID สำหรับ MQTT
MQTT_USERNAME = "r3qyspYw8igvsY8CgxEceaGu2UXEUuyi" # Username หรือ Token ของ MQTT
MQTT_PASSWORD = "JBSacAZeh7NCoQrvYD1cMkPuncJ9Qijq" # Password หรือ Secret ของ MQTT
TOPIC_SHADOW = "@shadow/data/update" # หัวข้อสำหรับส่งข้อมูลไปยัง Shadow
TOPIC_CONTROL = "@msg/operator" # หัวข้อสำหรับรับคำสั่งควบคุม
warm_warn = Pin(18,Pin.OUT)
cold_warn = Pin(19,Pin.OUT)
on_off = ["on","off"]
open_closed = ["open","closed"]
servos = [Servo(Pin(13)), Servo(Pin(12))]
servos[0].write_angle(180)
servos[1].write_angle(0)
buzzer = PWM(Pin(22))
buzzer.freq(500)
buzzer.duty_u16(0)
dht = DHT22(Pin(21))
dht.measure()
temp = dht.temperature()
i2c = I2C(scl=Pin(17), sda=Pin(5), freq=100000)
display = ssd1306.SSD1306_I2C(128, 64, i2c)
room = {
"heat" : 35,
"AC" : False,
"Heater" : False,
"windows" : True
}
def buzz():
buzzer.duty_u16(10000)
time.sleep(0.5)
buzzer.duty_u16(0)
time.sleep(0.5)
def measure_temp():
dht.measure()
return dht.temperature()
def warning(temp):
if temp > 30 and temp < 37:
if room["AC"] == False:
warm_warn.value(1)
cold_warn.value(0)
buzz()
print("buzzed")
else:
warm_warn.value(1)
cold_warn.value(0)
elif temp > 37:
warm_warn(1)
cold_warn(0)
buzz()
elif temp < 15:
if room["Heater"] == False:
warm_warn.value(0)
cold_warn.value(1)
buzzer.duty_u16(10000)
time.sleep(0.5)
buzzer.duty_u16(0)
print("buzzed")
else:
warm_warn.value(0)
cold_warn.value(1)
else:
warm_warn.value(0)
cold_warn.value(0)
buzzer.duty_u16(0)
def RegulateTemp(temp):
room["heat"] = temp
warning(temp)
if temp > 30:
room["AC"] = True
room["Heater"] = False
elif temp < 15:
room["Heater"] = True
room["AC"] = False
else:
room["AC"] = False
room["Heater"] = False
# display what is on and off
print(f"AC is : {room["AC"]}")
print(f"HEATER is : {room["Heater"]}")
def windows(temp):
if temp > 30 and temp < 35:
servos[0].write_angle(90)
servos[1].write_angle(90)
room["windows"] = 0
elif temp < 20 :
servos[0].write_angle(180)
servos[1].write_angle(0)
room["windows"] = 1
elif temp > 20:
servos[0].write_angle(90)
servos[1].write_angle(90)
room["windows"] = 1
elif temp > 35:
servos[0].write_angle(180)
servos[1].write_angle(0)
room["windows"] = 0
def stausOLED():
display.fill(0)
display.text(f"Temp is {room["heat"]}",0,10)
display.text(f"AC is {on_off[room["AC"]]}",0,20)
display.text(f"Heater is {on_off[room["Heater"]]}",0,30)
display.text(f"Windows are {open_closed[room["windows"]]}",0,40)
display.show()
# Connect to WiFi
def connect_wifi():
"""เชื่อมต่อ WiFi"""
wifi = network.WLAN(network.STA_IF) # เปิดใช้งานโหมด Station
wifi.active(True) # เปิดใช้งาน WiFi
wifi.connect(SSID, PASSWORD) # เชื่อมต่อ WiFi ด้วย SSID และ Password
print("Connecting to WiFi...", end="")
while not wifi.isconnected(): # รอจนกว่าจะเชื่อมต่อสำเร็จ
print(".", end="")
time.sleep(0.5) # หน่วงเวลาเล็กน้อย
print("\nWiFi connected:", wifi.ifconfig()) # แสดงข้อมูลการเชื่อมต่อ
# MQTT Callback
def mqtt_callback(topic, msg):
"""ฟังก์ชันเรียกกลับเมื่อได้รับข้อความ MQTT"""
print("Received message:", topic.decode(), msg.decode()) # แสดงหัวข้อและข้อความที่ได้รับ
if topic.decode() == TOPIC_CONTROL: # ตรวจสอบว่าข้อความมาจากหัวข้อควบคุม
if msg.decode() == "ON":
led_On.value(1) # เปิด LED
print("LED ON")
elif msg.decode() == "OFF":
led_On.value(0) # ปิด LED
print("LED OFF")
#main loop
while True:
temp = measure_temp()
RegulateTemp(temp)
windows(temp)
stausOLED()
# tried making a class
"""
class Room():
def __init__(self,heat,AC_state,Heater_state):
self.atr = {
"heat" : heat,
"AC" : AC_state,
"Heater" : Heater_state
},
self.dht = None,
self.warm_warn = None
self.cold_warn = None
self.buzzer = None
self.oledscreen = None
def ShowStatus(self):
for key in self.atr.keys():
print(self.atr[key])
"""
sound warning
heat sensor
light warnings