from machine import Pin, SoftI2C, Timer
import time
import ntptime
import ssd1306
import framebuf
from font24x24 import weekA, weekB, weekday as picWeekday
from font16x16 import number as picNumber
do_connect('Wokwi-GUEST', '') # 在Wokwi中WIFI名稱為Wokwi-GUEST
# 校正時間
ntptime.settime()
# OLED顯示模組
i2c = SoftI2C(scl=Pin(22), sda=Pin(21))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
def display(self):
oled.fill(0) #清除畫面
# 台北時間為 UTC+8, 即需將校正的時間再加上8小時
ctime = time.localtime(time.mktime(time.localtime())+ 8 * 60 * 60 )
"""
0:年份(例如:2024)
1:月份(1-12)
2:日期(1-31)
3:小時(0-23)
4:分鐘(0-59)
5:秒鐘(0-59)
6:星期幾(0-6,0代表星期一)
"""
oled.fill(0) # 清空OLED顯示器
# 日期
oled.text("{0}-{1:02d}-{2:02d}".format(ctime[0], ctime[1], ctime[2]), 10, 1)
# 星期
oled.blit(framebuf.FrameBuffer(bytearray(weekA), 24, 24, framebuf.MONO_VLSB), 10, 16) # 星
oled.blit(framebuf.FrameBuffer(bytearray(weekB), 24, 24, framebuf.MONO_VLSB), 36, 16) # 期
weekday = int(ctime[6])
oled.blit(framebuf.FrameBuffer(bytearray(picWeekday[weekday]), 24, 24, framebuf.MONO_VLSB), 62, 16)
# 小時
hour = '{0:02d}'.format(ctime[3])
hourTens = int(hour[0])
hourUnits = int(hour[1])
oled.blit(framebuf.FrameBuffer(bytearray(picNumber[hourTens]), 16, 16, framebuf.MONO_VLSB), 4, 45)
oled.blit(framebuf.FrameBuffer(bytearray(picNumber[hourUnits]), 16, 16, framebuf.MONO_VLSB), 22, 45)
# ..
oled.fill_rect(40,50,2,2,1)
oled.fill_rect(40,55,2,2,1)
# 分鐘
minute = '{0:02d}'.format(ctime[4])
minuteTens = int(minute[0])
minuteUnits = int(minute[1])
oled.blit(framebuf.FrameBuffer(bytearray(picNumber[minuteTens]), 16, 16, framebuf.MONO_VLSB), 46, 45)
oled.blit(framebuf.FrameBuffer(bytearray(picNumber[minuteUnits]), 16, 16, framebuf.MONO_VLSB), 64, 45)
# ..
oled.fill_rect(82,50,2,2,1)
oled.fill_rect(82,55,2,2,1)
# 秒鐘
second = '{0:02d}'.format(ctime[5])
secondTens = int(second[0])
secondUnits = int(second[1])
oled.blit(framebuf.FrameBuffer(bytearray(picNumber[secondTens]), 16, 16, framebuf.MONO_VLSB), 88, 45)
oled.blit(framebuf.FrameBuffer(bytearray(picNumber[secondUnits]), 16, 16, framebuf.MONO_VLSB), 106, 45)
oled.show()
timer1=Timer(1)
timer1.init(period=1000, mode=Timer.PERIODIC, callback=display) # 每隔1秒執行