esp8266/scripts/ntptime: Add simple NTP client.
.time() returns seconds since MicroPython epoch (2000-01-01 00:00UTC), .settime() sends current system time, assuming UTC timezone.
This commit is contained in:
parent
5d05993f10
commit
f873a5005a
|
@ -0,0 +1,34 @@
|
|||
try:
|
||||
import usocket as socket
|
||||
except:
|
||||
import socket
|
||||
try:
|
||||
import ustruct as struct
|
||||
except:
|
||||
import struct
|
||||
|
||||
# (date(2000, 1, 1) - date(1900, 1, 1)).days * 24*60*60
|
||||
NTP_DELTA = 3155673600
|
||||
|
||||
def time():
|
||||
NTP_QUERY = bytearray(48)
|
||||
NTP_QUERY[0] = 0x1b
|
||||
addr = socket.getaddrinfo('pool.ntp.org', 123)[0][-1]
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
s.settimeout(1)
|
||||
res = s.sendto(NTP_QUERY, addr)
|
||||
msg = s.recv(48)
|
||||
s.close()
|
||||
val = struct.unpack("!I", msg[40:44])[0]
|
||||
return val - NTP_DELTA
|
||||
|
||||
# There's currently no timezone support in MicroPython, so
|
||||
# utime.localtime() will return UTC time (as if it was .gmtime())
|
||||
def settime():
|
||||
t = time()
|
||||
import machine
|
||||
import utime
|
||||
tm = utime.localtime(t)
|
||||
tm = tm[0:3] + (0,) + tm[3:6] + (0,)
|
||||
machine.RTC().datetime(tm)
|
||||
print(utime.localtime())
|
Loading…
Reference in New Issue