from machine import Pin, I2C
import ssd1306
from lopy_lcd import *
import sys, machine, os
from machine import Pin, Timer
import micropython, time
# ESP32 Pin assignment
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
displayType = kDisplayI2C128x64
initialize(displayType)
if isConnected():
set_contrast(128) # 1-255
displayOn()
clearBuffer()
addString(0, 0, sys.platform + " " + sys.version)
addString(0, 1, "---")
#addString(0, 2, "CPU: {} MHz".format(machine.freq()[0]/1000000))
#addString(0, 4, "Version: {}".format(os.uname().release))
addString(0, 5, "LoPy font test")
addString(0, 6, "AaBbCcDdEeFfGgHhIi")
addString(0, 7, "0123456789012345")
drawBuffer()
else:
print("Error: LCD not found")
def pin10_handler(arg):
print("got an interrupt in pin10 %s" % (arg.id()))
button = Pin(26, mode=Pin.IN, pull=Pin.PULL_UP)
micropython.alloc_emergency_exception_buf(100)
old_button_value = 1
timer_tick = 0
button_start = 0
CURRENT_SCREEN = 0
def long_p():
print('long p')
class Start_Screen:
def draw(self):
clearBuffer()
addString_dd(0, 1, "ECO2")
addString_dd(0, 4, "12.44")
drawBuffer()
def short_push(self):
set_screen(Screen_1())
def long_push(self):
long_p()
class Screen_1:
def draw(self):
clearBuffer()
addString_ds(0, 0, "TVOC")
addString_ds(0, 1, "1.44")
drawBuffer()
def short_push(self):
set_screen(Screen_2())
def long_push(self):
long_p()
class Screen_2:
def draw(self):
clearBuffer()
addString_dd(0, 0, "PM2.5")
addString_dd(0, 1, "41.44")
drawBuffer()
def short_push(self):
set_screen(Screen_3())
def long_push(self):
long_p()
class Screen_3:
def draw(self):
clearBuffer()
addString(0, 0, " 0.3 23232323")
addString(0, 1, " 0.5 32232232")
addString(0, 2, " 1.0 32232232")
addString(0, 3, " 2.5 32232232")
addString(0, 4, "10.0 32232232")
drawBuffer()
def short_push(self):
set_screen(Start_Screen())
def long_push(self):
long_p()
def set_screen(scr):
global CURRENT_SCREEN
CURRENT_SCREEN = scr
CURRENT_SCREEN.draw()
def short_push():
CURRENT_SCREEN.short_push()
def long_push():
CURRENT_SCREEN.long_push()
set_screen(Start_Screen())
def timer_func(timer):
global old_button_value
global timer_tick
global button_start
if button.value()==0 and old_button_value == 1:
button_start = timer_tick
if button.value()==1 and old_button_value == 0:
if (timer_tick - button_start)>8 :
long_push()
else:
short_push()
old_button_value = button.value()
timer_tick = timer_tick + 1
#print(button.value())
timer=Timer(-1)
timer.init(period=50,mode=Timer.PERIODIC, callback=timer_func)
#oled_width = 128
#oled_height = 64
#oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
#oled.text('Hello, Wokwi!', 10, 10)
#oled.show()