桁合わせのためにformat文を使いたかったのですが、ブロックにはなかったので、直接Pythonコードを記述しました。直接コードを書けば何でもできるので、ビジュアルプログラミングでも安心です。
import os, sys, io
import M5
from M5 import *
import m5ui
import lvgl as lv
import time
from hardware import RTC
import network
import ntptime
AlibabaPuHuiTi_3_55_Regular_60px = None
AlibabaPuHuiTi_3_55_Regular_96px = None
AlibabaPuHuiTi_3_55_Regular_128px = None
page0 = None
l_month = None
l_gatu = None
l_mday = None
l_nichi = None
l_wday = None
l_time = None
l_date = None
rtc = None
wlan_sta = None
w = None
t = None
t_date = None
t_time = None
t_month = None
t_mday = None
# Describe this function...
def wdaykanji(w):
global t, t_date, t_time, t_month, t_mday, AlibabaPuHuiTi_3_55_Regular_60px, AlibabaPuHuiTi_3_55_Regular_96px, AlibabaPuHuiTi_3_55_Regular_128px, page0, l_month, l_gatu, l_mday, l_nichi, l_wday, l_time, l_date, rtc, wlan_sta
if w == 0:
return '月'
if w == 1:
return '火'
if w == 2:
return '水'
if w == 3:
return '木'
if w == 4:
return '金'
if w == 5:
return '土'
return '日'
def setup():
global AlibabaPuHuiTi_3_55_Regular_60px, AlibabaPuHuiTi_3_55_Regular_96px, AlibabaPuHuiTi_3_55_Regular_128px, page0, l_month, l_gatu, l_mday, l_nichi, l_wday, l_time, l_date, rtc, wlan_sta, t, w, t_date, t_time, t_month, t_mday
M5.begin()
Widgets.setRotation(1)
m5ui.init()
AlibabaPuHuiTi_3_55_Regular_60px = lv.binfont_create("S:/flash/res/font/AlibabaPuHuiTi-3-55-Regular-60px.bin")
AlibabaPuHuiTi_3_55_Regular_96px = lv.binfont_create("S:/flash/res/font/AlibabaPuHuiTi-3-55-Regular-96px.bin")
AlibabaPuHuiTi_3_55_Regular_128px = lv.binfont_create("S:/flash/res/font/AlibabaPuHuiTi-3-55-Regular-128px.bin")
page0 = m5ui.M5Page(bg_c=0xffffff)
l_month = m5ui.M5Label("12", x=0, y=8, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=AlibabaPuHuiTi_3_55_Regular_96px, parent=page0)
l_gatu = m5ui.M5Label("月", x=107, y=31, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=AlibabaPuHuiTi_3_55_Regular_60px, parent=page0)
l_mday = m5ui.M5Label("28", x=162, y=8, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=AlibabaPuHuiTi_3_55_Regular_96px, parent=page0)
l_nichi = m5ui.M5Label("日", x=264, y=29, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=AlibabaPuHuiTi_3_55_Regular_60px, parent=page0)
l_wday = m5ui.M5Label("土", x=96, y=108, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=AlibabaPuHuiTi_3_55_Regular_128px, parent=page0)
l_time = m5ui.M5Label("23:59:59", x=258, y=218, text_c=0xaaaaaa, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_14, parent=page0)
l_date = m5ui.M5Label("2099/12/31(X)", x=4, y=216, text_c=0xaaaaaa, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_14, parent=page0)
page0.screen_load()
page0.set_flag(lv.obj.FLAG.SCROLLABLE, False)
rtc = RTC()
wlan_sta = network.WLAN(network.STA_IF)
for count in range(10):
if wlan_sta.isconnected():
try:
ntptime.settime()
time.timezone('GMT+9')
print("NTP sucess")
break
except:
print("NTP failed")
time.sleep(1)
def loop():
global AlibabaPuHuiTi_3_55_Regular_60px, AlibabaPuHuiTi_3_55_Regular_96px, AlibabaPuHuiTi_3_55_Regular_128px, page0, l_month, l_gatu, l_mday, l_nichi, l_wday, l_time, l_date, rtc, wlan_sta, t, w, t_date, t_time, t_month, t_mday
M5.update()
t = time.localtime()
t_date = "{:4d}/{:2d}/{:2d}({:d})".format(t[0],t[1],t[2],t[6])
l_date.set_text(str(t_date))
t_time = "{:2d}:{:02d}:{:02d}".format(t[3],t[4],t[5])
l_time.set_text(str(t_time))
t_month = "{:2d}".format(t[1])
l_month.set_text(str(t_month))
t_mday = "{:2d}".format(t[2])
l_mday.set_text(str(t_mday))
l_wday.set_text(str(wdaykanji(t[6])))
time.sleep_ms(500)
if __name__ == '__main__':
try:
setup()
while True:
loop()
except (Exception, KeyboardInterrupt) as e:
try:
m5ui.deinit()
from utility import print_error_msg
print_error_msg(e)
except ImportError:
print("please update to latest firmware")
今回は手元にあったM5Stack Core2を使ったのですが、電子ペーパーだと年単位で電池駆動できそうですね。カレンダーのためだけにM5Paperを買うのももったいないので、よさそうなデバイスがあったらトライしてみたいです。