from machine import Pin, I2C, PWM
import ssd1306
import ultrasonic_lib
from utime import sleep
print("Hello, ESP32!")
echo_pin = Pin(14, Pin. IN)
trigger_pin = Pin(12, Pin.IN)
led_r = Pin (27, Pin.OUT)
buzzer_pin = PWM(Pin(26, Pin.OUT))
HCSR04 = ultrasonic_lib.HCSR04 (trigger_pin, echo_pin, echo_timeout_us=500*2*30)
rled = Pin(15, Pin.OUT) #LED SETUP PIN
gled = Pin(2, Pin.OUT)
bled = Pin(4, Pin.OUT)
btnr = Pin(12, Pin.IN) #BUTTON SETUP PIN
servopwm = PWM(Pin(5), freq=50, duty=75) #SERVO SETUP PIN
servopwm2 = PWM(Pin(18), freq=50, duty=75)
#OLED SETUP
i2c = I2C(0, scl=Pin(22), sda=Pin(21)) #OLED SETUP PIN
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
#SERVO SETUP
def Servo(servo, angle):
servopwm.duty(int(((angle)/180 *2 + 0.5) / 20 * 1023))
def Servo2(servo, angle):
servopwm2.duty(int(((angle)/180 *2 + 0.5) / 20 * 1023))
while True:
distance_from_wall = HCSR04.distance_cm()
print('\t\nJAROK BONET KETO', distance_from_wall, 'cm daripada dinding\n')
if distance_from_wall <= 100:
for i in range (5):
buzzer_pin.init(freq=400 , duty=70)
sleep(0.5)
buzzer_pin.init(freq=400 , duty=0)
sleep(0.5)
led_r.on()
sleep(0.5)
led_r.off()
sleep(0.5)
elif 101 <= distance_from_wall<= 200:
for i in range (5):
buzzer_pin.init(freq=400 , duty=70)
sleep(1)
buzzer_pin.init(freq=400 , duty=0)
sleep(1)
else:
buzzer_pin.init(freq=400 , duty=0)
sleep(0.5)
buzzer_pin.init(freq=400 , duty=0)
sleep(1)
led_r.off()
#READ BUTTON PARAMETER
rbtn = btnr.value()
#ALWAYS SHOW DISPLAY
oled.fill(0)
oled.text('CLIMATE ACTION', 9, 0)
oled.text('by Luuth', 30, 10)
oled.text('Temp: {:.1f} C'.format(temp) , 10, 25)
oled.text('Humi: {:.1f} %'.format(humi), 10, 35)
oled.show()
#LOOP FOR SENSOR READINGS
if temp > 34:
gled.off()
rled.on()
sleep(0.1)
rled.off()
bled.on()
sleep(0.1)
bled.off()
Servo(2, 180)
oled.text('Temp is HOT', 10, 45)
oled.show()
if humi < 80:
gled.off()
rled.on()
sleep(0.1)
rled.off()
bled.on()
sleep(0.1)
bled.off()
Servo(2, 180)
oled.text('Humi is LOW', 10, 55)
oled.show()
if temp < 33.9 and humi > 80.1:
gled.on()
oled.text('GOOD ENVIRONMENT', 0, 50)
oled.show()
buzzer.duty(0)
Servo(2, 90)
#FUNCTION LOOP FOR BUTTON READINGS
if rbtn == True:
Servo(2, 180)
print("rbtn pushed")
#if rbtn == False:
# Servo(2,90)
sleep(2)