from machine import Pin, I2C, RTC, Timer
import ssd1306
import network
import time
import ntptime
# ESP32 Pin assignment
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
oled.text("WiFi Connect", 0, 0)
oled.show()
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST','')
x = 0
while not sta_if.isconnected():
oled.text(". ", x, 10)
oled.show()
x += 3
x %= 128
time.sleep(0.1)
oled.fill(0)
oled.text("WiFi OK :)", 0, 00)
oled.text("Connect to NTP", 0, 10)
oled.show()
ntptime.NTP_DELTA = 3155644800
hasNTP = False
x=0
while not hasNTP:
try:
ntptime.settime()
oled.fill(0)
oled.show()
hasNTP = True
except:
oled.text(". ", x, 20)
oled.show()
x += 3
if x >= 3*30:
break
time.sleep(1)
rtc = RTC()
def show_time(t):
t = rtc.datetime()
date_str = '/'.join(map(str,t[0:3]))
time_str = f"{t[4]:02}:{t[5]:02}:{t[6]:02}"
oled.fill(0)
oled.text("Date "+ date_str, 0, 10)
oled.text("Time "+ time_str, 0, 20)
oled.show()
enable_timer1 = False
if hasNTP:
timer1 = Timer(1)
timer1.init(period=500, mode=Timer.PERIODIC, callback=show_time)
enable_timer1 = True
def toggle_t1(pin):
global enable_timer1
if (enable_timer1):
timer1.deinit()
enable_timer1 = False
else:
timer1.init(period=500, mode=Timer.PERIODIC, callback=show_time)
enable_timer1 = True
#print(enable_timer1)
sw1 = Pin(23, Pin.IN, Pin.PULL_UP) #腳位23,輸入,提升電阻
sw1.irq(trigger=Pin.IRQ_FALLING, handler=toggle_t1) #下緣觸發中斷,中斷服務函式 = callback