from machine import Pin, SoftI2C, Timer
from ssd1306 import SSD1306_I2C
from dht import DHT22 # Importing DHT22 module
sda_pin = Pin(0)
scl_pin = Pin(1)
button_pin = Pin(10, Pin.IN, Pin.PULL_DOWN)
dht_pin = Pin(28, Pin.OPEN_DRAIN)
WIDTH = 128
HEIGHT = 64
OLED_ADDR = 0x3d
display_enabled = True
i2c = SoftI2C(scl=scl_pin, sda=sda_pin, freq=400000)
oled = SSD1306_I2C(WIDTH, HEIGHT, i2c)
dht = DHT22(dht_pin)
def display(pin):
global display_enabled
if display_enabled == True:
display_enabled = False
elif display_enabled == False:
display_enabled = "temperature"
elif display_enabled == "temperature":
display_enabled = "humidity"
elif display_enabled == "humidity":
display_enabled = True
def read_values(timer):
global display_enabled
if display_enabled == True:
dht.measure()
temperature = dht.temperature()
oled.fill(0)
oled.text("Temp. = {:.2f}C".format(temperature), 0, 0, 1)
oled.show()
elif display_enabled == "temperature":
dht.measure()
temperature = dht.temperature()
oled.fill(0)
oled.text("Temp. = {:.2f}C".format(temperature), 0, 0, 1)
oled.show()
elif display_enabled == "humidity":
dht.measure()
humidity = dht.humidity()
oled.fill(0)
oled.text("Humidity = {:.2f}%".format(humidity), 0, 0, 1)
oled.show()
else:
oled.fill(0)
oled.text("Display Off", 0, 0, 1)
oled.show()
button_pin.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=display)
timer = Timer()
timer.init(period=100, mode=Timer.PERIODIC, callback=read_values)