Skip to content

Instantly share code, notes, and snippets.

@aallan
Last active October 23, 2024 17:29
Show Gist options
  • Save aallan/581ecf4dc92cd53e3a415b7c33a1147c to your computer and use it in GitHub Desktop.
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()
@P135928
Copy link

P135928 commented Oct 22, 2024

You guys have any idea on how to use this on an SSD1306 OLED screen? Nevermind figured it out!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment