import machine
from machine import SoftI2C, Pin ,PWM
from lcd_api import LcdApi
from i2c_lcd import I2cLcd
from ssd1306 import SSD1306_I2C
from time import sleep
import dht
sensor = dht.DHT22(Pin(14))
I2C_ADDR_LCD = 0x27
I2C_ADDR_OLED = 0x3c
oled_width = 128
oled_height = 64
lcd_Rows = 2
lcd_Columns = 16
buzzer_pin = Pin(4, Pin.OUT)
buzzer_pwm = PWM(buzzer_pin)
buzzer_pwm.freq(500) # Set PWM frequency
i2c = SoftI2C(scl=Pin(22), sda=Pin(21), freq=10000) #initializing the I2C method for ESP32
lcd = I2cLcd(i2c, I2C_ADDR_LCD, lcd_Rows, lcd_Columns)
oled = SSD1306_I2C(oled_width, oled_height, i2c, I2C_ADDR_OLED)
lcd.move_to(1,0)
def activate_buzzer():
buzzer_pwm.duty(512) # 50% duty cycle
def deactivate_buzzer():
buzzer_pwm.duty(0) # Turn off the buzzer
def print_large_text(text, x, y):
scale = 3 # You can adjust this value to change the size of the text
for char in text:
oled.text(char, x, y, 1)
x += 12 * scale # 8 pixels wide for each character, adjust if using a different font
oled.text('ESP32 with OLED', 3, 6, 1)
oled.show()
while True:
try:
sleep(2)
sensor.measure()
temp = sensor.temperature()
hum = sensor.humidity()
temp_f = temp * (9/5) + 32.0
print('Temperature: %.1f C' %temp)
print('Temperature: %.1f F' %temp_f)
print('Humidity: %.1f %%' %hum)
print('Temp in C:',temp,'C')
print('')
if temp > 55: # If an object is closer than 100cm
activate_buzzer()
else:
deactivate_buzzer()
lcd.move_to(0,0)
lcd.putstr('temp:'+str(temp)+'C')
lcd.move_to(0,1)
lcd.putstr('hum:'+str(hum)+'%')
oled.text('Temperature:'+str(temp)+'C', 0, 26,1)
oled.text('Humidity: '+str(hum)+'%' , 0, 36,1)
oled.show()
oled.fill(0) #to clear the screen
except OSError as e:
print('Failed to read sensor.')