print("AUTOMATIC WATERING PLANT SYSTEM ")
print("CREATE BY : FAISAL ")
print("DATE : 29/4/2024")

from machine import Pin, ADC, SoftI2C, PWM
from utime import sleep
import dht
import ssd1306_library
import servo_library
import ultrasonic_library

# Pin declaration
DHT_PIN = 4  # DHT22 sensor pin
SERVO_PIN = 13  # Servo pin
BUZZER_PIN = 14  # Buzzer pin
LED_PIN = 12  # LED pin
TRIGGER = 18  # Ultrasonic trigger pin
ECHO = 19  # Ultrasonic echo pin
oled_pin = SoftI2C(scl=Pin(22), sda=Pin(21))

# Initialize OLED display
display = ssd1306_library.SSD1306_I2C(128, 64, i2c=oled_pin)

# Initialize DHT22 sensor
dht_sensor = dht.DHT22(Pin(4))

# Initialize servo
water = servo_library.Servo(pin=SERVO_PIN)
servo_motor = servo_library.Servo(pin=SERVO_PIN)

# Initialize buzzer and LED
buzzer = PWM(Pin(14, Pin.OUT), freq=1000)  # Initialize buzzer as PWM pin
red_led = Pin(12, Pin.OUT)  # Initialize LED as digital output pin

# Initialize ultrasonic distance sensor
volume = ultrasonic_library.HCSR04(trigger_pin=TRIGGER,echo_pin=ECHO)
trigger = Pin(TRIGGER, Pin.OUT)
echo = Pin(ECHO, Pin.IN)

while True:
    dht_sensor.measure()
    temperature = dht_sensor.temperature()
    humidity = dht_sensor.humidity()

    distance_mm = volume.distance_mm()
    distance_cm = volume.distance_cm()
    red_led.off()
    #blue_led.off()
    buzzer.init(freq=1, duty=0)

    print(temperature)
    print(humidity)

    if(temperature > 30) : 
        red_led.on()
        buzzer.init(freq=2500, duty=200)
        sleep(1)
        red_led.off()
        buzzer.init(freq=1, duty=0)
        sleep(1)
        water.move(angle=90)
        display.fill(0)
        display.text("NEED TO WATER", 0, 0)
        display.text("Water your", 0, 30, 1)
        display.text("plant", 0, 40, 1)
        display.show()

        sleep(5)

    elif (temperature < 30) :
        #blue_led.on()
        water.move(angle=0)
        #print("Soil moisture is optimal.")
        display.fill(0)
        display.text("Soil moisture", 0, 0)
        display.text("is optimal", 0, 10, 1)
        display.show()


    if (distance_cm < 20) :
        display.fill(0)
        display.text("INSECT", 0, 0)
        display.show()
        red_led.on()
        buzzer.init(freq=2500, duty=200)
        sleep(1)
        red_led.off()
        buzzer.init(freq=1, duty=0)
        sleep(1)
        
    sleep(3)
Loading
esp32-devkit-v1