前回記事にてジャイロセンサのプログラムを組んでみました。
今回は日時を扱うRTC(リアルタイムクロック)を使った プログラムの組み方について紹介します。
RTCとは
リアルタイムクロック(real-time clock、RTCと略記)は、コンピュータなどが内蔵する時計や、その機能が実装されている集積回路(IC)のことを指す。リアルタイムクロックはシステムの電源が切られていてもバッテリバックアップなどにより「時刻」を刻み続けることが特徴である。
出典:ウィキペディア
というわけで時計の機能を持ったICの事でM5Stack Core2にもこのICが載っています。
RTCのブロック
RTCに関するブロックは[ハードウェア]-[RTC]に格納されています。
Set time by NTP host [cn.pool.ntp.org] timezone [8]
ネットから日時の取得が出来ます。
ホストとタイムゾーンの指定が可能です。(日本のタイムゾーンは「9」です)
年、月、日、Weekday、時、分、秒
それぞれ設定された年、月、日、曜日、時、分、秒を取得できます。
形式は数値です。(「Weekday」の数値は 0:月、1:火、2:水、3:木、4:金、5:土、6: 日 に対応しているようです)
set ~
任意の日時を設定する事が出来ます。
「set year」は0~99までしか指定できません。(2000年未満と2100年以降の指定は出来ません)
「set month」は1~12までしか指定できません。
「set date」は1~31までしか指定できません。(31日まで無い月を指定しても31を指定する事は出来ます)
「set Weekday」は0~6までしか指定できません。
「set hour」は0~23までしか指定できません。
「set minute」は0~59までしか指定できません。
「set second」は0~59までしか指定できません。
Get RTC time
年月日曜日時分秒を一度に取得します。
形式は配列?(ラベルにそのまま出力すると「([年], [月], [日], [曜日], [時], [分], [秒])」の文字列で出力する)
Print RTC time
年月日曜日時分秒を一度に取得します。
形式は文字列です。(「[年]-[月]-[日] [時]:[分]:[秒] [曜日(英語)]」の形式で出力する)
現在日時を表示する
それでは早速RTCのブロックを使って現在日時を表示するプログラムを組んでみましょう。
と言ってもラベルを配置して取得した情報をそのラベルで表示するだけですが。
UIFlowにLabelをドラッグアンドドロップで画面内に配置します。
[RTC]の「Set time by NTP host [cn.pool.ntp.org] timezone [8]」ブロックを「Setup」ブロックに繋げ、タイムゾーンを「9」に変更します。(ホストはそのまま)
[イベント]の「ずっと」ブロックを「Set time by ~」ブロックに繋げます。
「ずっと」ブロックにラベルへ現在日時を表示させる[RTC]の「Print RTC time」ブロックを繋げます。
これで現在日時がラベルに表示されるプログラムが完成です。
プログラムをM5Stack Core2へ送って動かしてみましょう。
作ったプログラムは以下からダウンロードできます。
RTCtest
まとめ
という事でRTCのブロックについて紹介しました。
内容的には日時を単純に表示するだけの簡単なプログラムなので物足りなかったと思います。
本当はアナログ時計を作ったのですがそこまでやると長くなってしまうので今回はやめておきました。
また今度そのプログラムについて記事を書きたいと思います。
コメント
質問になってすいません、ご存じでしたら教えてください。
wifi経由 時間セット可能なのですが
uiflow の
setyear~の ブロックが認識されない様でマニュアルセット出来ません
pytuonで見ると
# global params pass と出ています何かグローバル関数セット必要なのでしょうか?
def touch_button13_pressed():
# global params
pass
touch_button13.pressed(touch_button13_pressed)
返信遅くなり申し訳ありません。
> setyear~の ブロックが認識されない様でマニュアルセット出来ません
「認識されない」とはどんな状態ですか?
・「RTC」グループにブロックが見当たらない
・ブロックは配置できても値が変わらない
・実行するとエラーで止まる
など
> pytuonで見ると
> # global params pass と出ています何かグローバル関数セット必要なのでしょうか?
「setyear~」のブロックをUIFlowに配置して表示をPythonに切り替えてみましたが僕の環境では「# global params」の表記は見つからないです。
今実機をすぐ触れない状態なのでまた後日実機を使って色々試してみます。