from machine import Pin, I2C
import time
import dht
import HCSR04
import I2cLcd
# Set up I2C for LCD
i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
lcd = I2cLcd(i2c, 0x27, 2, 16) # Change address if necessary
# Set up DHT22 sensor
dht_sensor = dht.DHT22(Pin(2))
# Set up HC-SR04 ultrasonic sensor
ultrasonic = HCSR04(trigger_pin=9, echo_pin=8)
# LED pins
green_led = Pin(10, Pin.OUT)
orange_led = Pin(11, Pin.OUT)
red_led = Pin(12, Pin.OUT)
buzzer = Pin(13, Pin.OUT)
def read_sensors():
dht_sensor.measure()
temperature = dht_sensor.temperature()
humidity = dht_sensor.humidity()
distance = ultrasonic.distance_cm()
return temperature, humidity, distance
while True:
temperature, humidity, distance = read_sensors()
# Display on LCD
lcd.clear()
lcd.putstr(f"Temp: {temperature}C\nHum: {humidity}%")
time.sleep(1)
# Water level alerts
if distance < 10: # Red alert if water level is very high
lcd.putstr("Red Alert! Flooding")
red_led.on()
orange_led.off()
green_led.off()
buzzer.on()
time.sleep(1)
buzzer.off()
elif distance < 20: # Orange alert if water level is moderate
lcd.putstr("Orange Alert! Caution")
orange_led.on()
red_led.off()
green_led.off()
else: # Green alert if water level is safe
lcd.putstr("Safe Level")
green_led.on()
orange_led.off()
red_led.off()
time.sleep(5) # Delay before next reading