from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
import framebuf, sys
import dht
import time
import utime
oled_width = 128
oled_height = 64
def init_i2c(scl_pin, sda_pin):
i2c_dev = I2C(1, scl=Pin(scl_pin), sda=Pin(sda_pin), freq=200000)
i2c_addr = [hex(ii) for ii in i2c_dev.scan()]
if not i2c_addr:
print('No I2C Display Found')
sys.exit()
else:
print("I2C Address : {}".format(i2c_addr[0]))
print("I2C Configuration: {}".format(i2c_dev))
return i2c_dev
def display_logo(oled):
buffer = bytearray(b'\x00\x08\x00\x00\x00\x1c\x00\x00\x00\x14\x00\x00\x006\x00\x00\x00"\x00\x00\x00c\x00\x00\x00A\x00\x00\x00\x00\x80\x00\x00\x80\x80\x00\x00\x00@\x00\x03\x00`\x00\x02\x00 \x00\x06`0\x00\x04\xf2\x10\x00\x0c\x94\x10\x00\x0c\xec\x18\x00\x08\x08\x08\x00\x08\x1b\x18\x00\x0c\x17\x98\x00\x044\x90\x00\x04\'\xb0\x00\x02\x00 \x00\x03\x00`\x00\x00\xc1\x80\x00\x00\x7f\x00\x00')
buffer1 = bytearray(b'\x00\x00\x00\x00\x00<\x00\x00\x00f\x00\x00\x00f\x00\x00\x00n\x00\x00\x00b\x00\x00\x00f\x00\x00\x00n\x00\x00\x00z\x00\x00\x00r\x00\x00\x00z\x00\x00\x00r\x00\x00\x00z\x00\x00\x00z\x00\x00\x00z\x00\x00\x00{\x00\x00\x00\xdd\x80\x00\x00\xbe\x80\x00\x00\xbe\x80\x00\x00\xbe\x80\x00\x00\xbe\x80\x00\x00\xdd\x80\x00\x00c\x00\x00\x00>\x00\x00\x00\x00\x00\x00')
fb_d = framebuf.FrameBuffer(buffer, 25, 25, framebuf.MONO_HLSB)
fb_d1 = framebuf.FrameBuffer(buffer1, 25, 25, framebuf.MONO_HLSB)
oled.blit(fb_d, 90, 20)
oled.blit(fb_d1, 111, 0)
oled.show()
def main():
i2c = init_i2c(22, 21)
oled = SSD1306_I2C(oled_width, oled_height, i2c)
sensor = dht.DHT22(Pin(13))
led1= Pin(15, Pin.OUT)
led2= Pin(2, Pin.OUT)
led3= Pin(4, Pin.OUT)
t1 = 0
h1 = 0
while True:
sensor.measure()
t = int(sensor.temperature())
h = int(sensor.humidity())
if t1 !=t or h1 !=h:
oled.fill(0)
oled.text(f"Temperature {t}", 0, 10)
oled.text(f"Humidity {h}", 0, 30)
display_logo(oled)
oled.show()
time.sleep(0.1)
t1 = t
h1 = h
if t<30:
led1.on()
else:
led1.off()
if h<40:
led2.on()
else:
led2.off()
if h>50 and t>60:
led3.on()
else:
led3.off()
if __name__ == '__main__':
main()