import machine
import time
import ssd1306
import dht
## DEFINE PINS ##
#############################################################
i2c = machine.I2C(0, scl=machine.Pin(23), sda=machine.Pin(22))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
pir_pin = machine.Pin(19, machine.Pin.IN)
## OLED DISPLAY MAIN FUNCTION ##
##################################################
def msg_oled(msg, x=0, y=0, clear=True):
if clear not in (False, True):
print('clear must be True/False')
elif clear:
oled.fill(0) # Clears the display (if fill(1), fullfills the display)
else:
None
if len(msg) >= 15:
msg_list = msg.split(' ') # if number of characters in message > 15, splits
else: # at existing spaces and returns a list
msg_list = [msg] # else returns the list single element
for i, message in enumerate(msg_list):
oled.text(message, x, y + i*10) # writes message with 10 pixel space between rows.
oled.show() # (0,0)=top-left corner of display
## MENU ##
################################
main_menu = ['Temperature', 'Humidity', 'PIR']
## DHT22 ##
############################################
def sensor_read():
while True:
sensor = dht.DHT22(machine.Pin(12))
sensor.measure()
print(sensor.temperature())
print(sensor.humidity())
time.sleep(1)
sensor_read()
## PIR SENSOR FUNCTION ##
###############################################
def pir_sensor():
while True:
if pir_pin.value()==1:
msg_oled('Motion Detected!', 20, 20)
elif pir_pin.value()==0:
msg_oled('No Motion Detected', 20, 20)
else:
print('PIR sensor error')
time.sleep(2)
def default():
msg_oled('Nothing')
## FUNCTIONS ##
function_temperature = [default]
function_humidity = [default]
function_pir = [pir_sensor]