LoginSignup
13
6

More than 5 years have passed since last update.

M5Stack MicroPython API調査記録 RTC編

Last updated at Posted at 2018-01-07

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

13
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
6