-
-
Save aallan/581ecf4dc92cd53e3a415b7c33a1147c to your computer and use it in GitHub Desktop.
import network | |
import socket | |
import time | |
import struct | |
from machine import Pin | |
NTP_DELTA = 2208988800 | |
host = "pool.ntp.org" | |
led = Pin("LED", Pin.OUT) | |
ssid = 'A NETWORK' | |
password = 'A PASSWORD' | |
def set_time(): | |
NTP_QUERY = bytearray(48) | |
NTP_QUERY[0] = 0x1B | |
addr = socket.getaddrinfo(host, 123)[0][-1] | |
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) | |
try: | |
s.settimeout(1) | |
res = s.sendto(NTP_QUERY, addr) | |
msg = s.recv(48) | |
finally: | |
s.close() | |
val = struct.unpack("!I", msg[40:44])[0] | |
t = val - NTP_DELTA | |
tm = time.gmtime(t) | |
machine.RTC().datetime((tm[0], tm[1], tm[2], tm[6] + 1, tm[3], tm[4], tm[5], 0)) | |
wlan = network.WLAN(network.STA_IF) | |
wlan.active(True) | |
wlan.connect(ssid, password) | |
max_wait = 10 | |
while max_wait > 0: | |
if wlan.status() < 0 or wlan.status() >= 3: | |
break | |
max_wait -= 1 | |
print('waiting for connection...') | |
time.sleep(1) | |
if wlan.status() != 3: | |
raise RuntimeError('network connection failed') | |
else: | |
print('connected') | |
status = wlan.ifconfig() | |
print( 'ip = ' + status[0] ) | |
led.on() | |
set_time() | |
print(time.localtime()) | |
led.off() |
You're welcome
You guys have any idea on how to use this on an SSD1306 OLED screen? Nevermind figured it out!!
Thank you for sharing this code.
I've been hitting a error if I I rerun the script. I cannot see why.
I've added a little at the end but do not see why that should cause the upset. I've updated to the current latest uf2s and run on several different boards.
Extra code:
`
print(" ")
year,mon,day,h,m,s,weekday,x = time.localtime()
now = str(h)+":"+str(m)+":"+str(s)
date = str(year)+" "+months[mon]+" "+str(year)
print(now)
print(date)
print(wd[weekday])
`
ERRORs below
`
MPY: soft reboot
connected
ip = 192.168.0.79
(2025, 3, 8, 13, 40, 38, 5, 67)
13:40:38
2025 Apr 2025
Sat
%Run -c $EDITOR_CONTENT
MPY: soft reboot
connected
ip = 192.168.0.79
Traceback (most recent call last):
File "", line 53, in
File "", line 25, in set_time
OSError: [Errno 110] ETIMEDOUT
`
I tried this change: s.settimeout(5) but it did not help.
@tonygo . Did you add this try: ___ except: block into your code?
(From my post/reaction: Jul 18, 2022)
This fixed it for me. Thank you! I had to do "+ 21_600" to get to North America Central Time. Thank you again!