ESP32 時計まわり
ESP32をWi-Fiにてネットワークにつなぎましたので、次は時計まわりを整備します。
ESP32にはリアルタイムクロック(RTC)が実装されていますので、まずはどのような反応が出るか見ます。
1 2 3 4 |
>>> from machine import RTC >>> rtc=RTC() >>> rtc.datetime() (2000, 1, 1, 5, 0, 2, 41, 237515) |
2000年1月1日ですね。これでは時計として使えませんので、NTPサーバーに接続して現在時刻(UTC)に合わせます。
1 2 3 4 |
>>> import ntptime >>> ntptime.settime() >>> rtc.datetime() (2021, 2, 22, 0, 22, 6, 52, 654317) |
2021年2月22日22時6分52秒ですか、4個目の0は多分曜日を表しており月曜日、654317は・・・
1 2 3 |
>>> import utime >>> utime.localtime() (2021, 2, 22, 22, 16, 34, 0, 53) |
utimeでローカルタイム表示で見てみましょう。
2021年2月22日22時16分34秒月曜日、年内の通算日数53日目(31+22=53)これはUTCですので、JSTに合わせます。
1 2 3 4 5 6 7 |
>>> utime.mktime(utime.localtime()) 667355194 >>> utime.mktime(utime.localtime())+(9*3600) 667387595 >>> utime.localtime(utime.mktime(utime.localtime())+(9*3600)) (2021, 2, 23, 9, 26, 38, 1, 54) |
9時間進めますutime.mktime()関数でローカルタイムを秒数の整数に戻します。この整数にJSTは9時間進んでいますので9時間×3600秒を足してあげます。この整数をutime.localtime()関数で時間に戻します。すると2021年2月23日9時26分38秒火曜日54日経過と日本時間に変更できました。
全体のプログラムです
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
from time import sleep_ms import ntptime import utime UTC_OFFSET=9 def do_connect(): import network wlan = network.WLAN(network.STA_IF) wlan.active(True) if not wlan.isconnected(): print('connecting to network...') wlan.connect('essid', 'password') while not wlan.isconnected(): pass print('network config:', wlan.ifconfig()) def get_jst(): sleep_ms(1000) ntptime.settime() tm=utime.localtime(utime.mktime(utime.localtime())+UTC_OFFSET*3600) jst = str(tm[0])+'/'+str(tm[1])+'/'+str(tm[2])+' '+str(tm[3])+':'+str(tm[4])+':'+str(tm[5]) return(jst) do_connect() print(get_jst()) |
実行経過です。
1 2 3 |
C:\Users\>ampy -p com4 run c:\micropython\timetest1.py network config: ('192.168.11.25', '255.255.255.0', '192.168.11.1', '192.168.11.1') 2021/2/23 9:39:41 |