print("Hello, ESP32!")
print ("This is pond monitoring for phase test")
#import all nescessary library
from machine import Pin, SoftI2C, PWM,I2C
import ssd1306
from utime import sleep
import HCSR04 #sensor library
import dht
from ds1307 import DS1307
#declare pin connection
sensor = dht.DHT22(Pin(15))
ultrasonic_sensor= HCSR04.HCSR04(trigger_pin=27, echo_pin=26)
i2c = SoftI2C(scl=Pin(22), sda=Pin(21))
buzzer = PWM(Pin(2),Pin.OUT)
sclPin = Pin(32) # serial clock pin
sdaPin = Pin(33) # serial data pin
i2c_object = I2C(0, # positional argument - I2C id
scl = sclPin, # named argument - serial clock pin
sda = sdaPin, # named argument - serial data pin
freq = 400000 )# named argument - i2c frequency
result = I2C.scan(i2c_object) # scan i2c bus for available devices
print("I2C scan result : ", result)
if result != []:
print("I2C connection successfull")
else:
print("retry")
clockObject = DS1307(i2c_object)
clockObject.halt(False) # 32 khz crystal enable
buzzer.freq (4186)
buzzer.duty(0)
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
choice = input("Would you like to change the default date time data ( y / n ) : ")
while True:
if choice == "y":
print("set the default date time data")
year = int(input("Year : "))
month = int(input("month (Jan --> 1 , Dec --> 12): "))
date = int(input("date : "))
day = int(input("day (1 --> monday , 2 --> Tuesday ... 0 --> Sunday): ")) # 1 --> monday , 2 --> Tuesday ... 0 --> Sunday
hour = int(input("hour (24 Hour format): "))
minute = int(input("minute : "))
second = int(input("second : "))
now = (year,month,date,day,hour,minute,second,0)
clockObject.datetime(now)
else:
print("Default data is not changed ")
print("Default date time settings : ")
default = clockObject.datetime()
print("Year : ",default[0])
print("month : ",default[1])
print("date : ",default[2])
print("day : ",default[3])
print("hour : ",default[4])
print("minute : ",default[5])
print("second : ",default[6],"\n")
#sleep(2) # time for user to read serial data properly
break
while True:
(year,month,date,day,hour,minute,second,p1)=clockObject.datetime()
#sleep(1)
#print(clockObject.datetime())
sleep(2)
sensor.measure()
temp = sensor.temperature()
hum = sensor.humidity()
print('Temperature: %3.1f C' %temp)
print('Humidity: %3.1f %%' %hum)
objectincm = ultrasonic_sensor.distance_cm()
objectinmm = ultrasonic_sensor.distance_mm()
#sleep(3)
print("Water Level=",objectincm)
print("--------------------------------------------")
print(clockObject.datetime())
#sleep(3)
oled.fill(0)
oled.text('Water Level:',0,0,1)
oled.text('Humidity:',0,20,1)
oled.text(str(hum),70,20,1)
oled.text("Temp:",0,30,1)
oled.text(str(temp),70,30,1)
oled.text("%",110,20,1)
oled.text("C",100,30,1)
oled.text(str(year),0,40,1)
oled.text(',',30,40,1)
oled.text(str(month),45,40,1)
oled.text(',',60,40,1)
oled.text(str(date),70,40,1)
oled.text(str(hour),00,50,1)
oled.text(',',15,50,1)
oled.text(str(minute),25,50,1)
oled.text(',',40,50,1)
oled.text(str(second),50,50,1)
oled.show()
if objectincm >= 150:
oled.text("Low",0,10,1)
oled.show()
buzzer.duty(512)
elif objectincm <= 50:
oled.text("High",0,10,1)
buzzer.duty(1023)
oled.show()
else:
oled.text('Normal',0,10,1)
oled.show()
buzzer.duty(0)
sleep(2)