※ 2018年3月2日現在
本家MicroPythonのESP32版ではまだESP8266版にあるようなmachine.RTCクラスが実装されていませんが、M5Stack版では実装されています。
M5Stack版はPycom版のAPI仕様がベースになっているようで、NTPによる時刻同期ができます。また、ピン入力でディープスリープから起こす設定のAPIが拡張されています。
クラス machine.RTC
リアルタイムクロックのためのクラス。
from machine import RTC
rtc = RTC()
rtc.init((2018, 1, 7, 23, 13, 0, 0, 0))
print(rtc.now())
コンストラクタ
class machine.RTC()
RTCオブジェクトを作成する。
from machine import RTC
rtc = RTC()
メソッド
rtc.init(datetime)
RTCを指定した日時 datetime で初期化する。
datetime - RTCに設定する現在日時。次の形式のタプルで指定する: (year, month, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]])
tzinfo は指定しても無視される。したがって日時は標準時で与えること。
rtc.now()
現在日時をローカルタイムで返す。返す形式は次の形式のタプル: (year, month, day, hour, minute, second, microsecond)
ローカルタイムは現状、常に UTC+8 になってしまう。
rtc.ntp_sync(server, update_period=3600, tz=CST-8)
NTP (SNTP)を使って時刻同期を行う。
server - NTP サーバ
update_period - 更新間隔(秒)。最小間隔は60秒
tz - タイムゾーン。日本時間の場合は 'JST-9' を指定しておけばよい。
rtc.ntp_sync('ntp.nict.jp', tz='JST-9')
※時刻同期できていなくても時刻を更新してしまうのはいまいち。
rtc.synced()
直前の ntp_sync() による時刻同期が完了していれば True を返す。
rtc.ntp_sync('ntp.nict.jp')
for _ in range(100):
if rtc.synced():
break
rtc.wake_on_ext0(pin=None, level=False)
ピンからのデジタル入力でディープスリープから起こす設定を行う。
pin - デジタル入力に設定した machine.Pin オブジェクト
level - デジタル入力の False/True どちらに反応するかを指定
# ボタンCを押したらディープスリープから起きるようにする
rtc.wake_on_ext0(machine.Pin(37, machine.Pin.IN), False)
# 60秒間のディープスループに入る
machine.deepsleep(60000)
rtc.wake_on_ext1(pins=None, level=False)
複数ピンからのデジタル入力でディープスリープから起こす設定を行う。
pins - デジタル入力に設定した machine.Pin オブジェクトのリスト
level - デジタル入力の False/True どちらに反応するかを指定