曜日が大きなカレンダー

M5Stack Core2で曜日が大きなカレンダーを作りました。

画面イメージ

UIFlow2を使ってみたのですが、画面作成は楽でした。処理部分もAIに聞きながらだと、それほど詰まることもなく作ることができました。

ただ、UIFlow2の保存がいまいち分からなくて、完成したものを一から作り直すことに。2度目は公開までしたので、無事に保存できたと思います。

UIFlow 2.0

 

WiFi接続してNTP取得後にRTCを設定しています。電源オン時しか設定してないので、時刻が狂ったら電源を入れなおします。

setupコード

桁合わせのためにformat文を使いたかったのですが、ブロックにはなかったので、直接Pythonコードを記述しました。直接コードを書けば何でもできるので、ビジュアルプログラミングでも安心です。

UIFlow2ではタプルの添え字が1始まりなので、Pythonコードと比較する際は注意が必要です。

loopコード

関数も簡単に作ることができました。

関数コード

以下、Pythonコードの全文です。

```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を買うのももったいないので、よさそうなデバイスがあったらトライしてみたいです。

diredのサブディレクトリ(iコマンド)

diredのサブディレクトリ(iコマンド)
http://www.geocities.co.jp/SiliconValley-Bay/9285/EMACS-JA/emacs_376.html

$で展開/収納を切り替えられる
http://www.7key.jp/software/dired.html

ディレクトリのパスが書いてある行で C-u k で消える。
http://d.hatena.ne.jp/a666666/20110310/1299692676

全部隠す(M-$)
http://anought.tumblr.com/post/16334758357/dired-hide-subdir-esc

正規表現でマーク(* %)
http://d.hatena.ne.jp/mooz/20090730