import network
import time
import dht
from machine import Pin
# ---------------- WIFI SETTINGS ----------------
SSID = "Staff"
PASSWORD = "Sta@2025"
# ---------------- LCD DRIVER ----------------
class GPIO_LCD:
def __init__(self, rs, e, d4, d5, d6, d7):
self.rs = Pin(rs, Pin.OUT)
self.e = Pin(e, Pin.OUT)
self.d4 = Pin(d4, Pin.OUT)
self.d5 = Pin(d5, Pin.OUT)
self.d6 = Pin(d6, Pin.OUT)
self.d7 = Pin(d7, Pin.OUT)
self.init_lcd()
def pulse_e(self):
self.e.value(0)
time.sleep_us(1)
self.e.value(1)
time.sleep_us(1)
self.e.value(0)
time.sleep_us(100)
def send_nibble(self, val):
self.d4.value((val >> 0) & 1)
self.d5.value((val >> 1) & 1)
self.d6.value((val >> 2) & 1)
self.d7.value((val >> 3) & 1)
self.pulse_e()
def send_byte(self, val, mode):
self.rs.value(mode)
self.send_nibble(val >> 4)
self.send_nibble(val & 0x0F)
def init_lcd(self):
time.sleep_ms(50)
self.send_nibble(0x03)
time.sleep_ms(5)
self.send_nibble(0x03)
self.send_nibble(0x03)
self.send_nibble(0x02)
self.send_byte(0x28, 0)
self.send_byte(0x0C, 0)
self.send_byte(0x06, 0)
self.send_byte(0x01, 0)
time.sleep_ms(2)
def putstr(self, string):
for char in string:
self.send_byte(ord(char), 1)
def move_to(self, col, row):
addr = col + (0x40 if row else 0x00)
self.send_byte(0x80 | addr, 0)
def clear(self):
self.send_byte(0x01, 0)
time.sleep_ms(2)
# ---------------- INIT LCD ----------------
lcd = GPIO_LCD(16, 17, 18, 19, 20, 21)
lcd.putstr("Connecting WiFi")
# ---------------- WIFI CONNECT ----------------
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
timeout = 10
while not wlan.isconnected() and timeout > 0:
time.sleep(1)
timeout -= 1
lcd.clear()
if wlan.isconnected():
ip = wlan.ifconfig()[0]
lcd.putstr("WiFi Connected")
lcd.move_to(0,1)
lcd.putstr(ip)
time.sleep(3)
else:
lcd.putstr("WiFi Failed")
time.sleep(3)
# ---------------- SENSOR ----------------
sensor = dht.DHT22(Pin(2))
led = Pin(14, Pin.OUT)
buzzer = Pin(13, Pin.OUT)
TEMP_LIMIT = 30
# ---------------- MAIN LOOP ----------------
while True:
try:
sensor.measure()
t = sensor.temperature()
h = sensor.humidity()
lcd.clear()
lcd.move_to(0,0)
lcd.putstr("Temp:{:.1f}C".format(t))
lcd.move_to(0,1)
if t > TEMP_LIMIT:
lcd.putstr("ALARM! HOT!")
led.value(1)
buzzer.value(1)
time.sleep(0.2)
buzzer.value(0)
else:
lcd.putstr("Hum:{:.1f}%".format(h))
led.value(0)
print("Temp:", t, "Hum:", h)
except Exception as e:
lcd.clear()
lcd.putstr("Sensor Error")
print("Error:", e)
time.sleep(2)