micropython
M5stack

M5Stack MicroPython API調査記録 RTC編

※ 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 どちらに反応するかを指定