Skip to content

Instantly share code, notes, and snippets.

@codepope
Created June 13, 2021 13:04
Show Gist options
  • Save codepope/f861f6f9b931caffc21dac1a8e9c89e4 to your computer and use it in GitHub Desktop.
Save codepope/f861f6f9b931caffc21dac1a8e9c89e4 to your computer and use it in GitHub Desktop.
Lilygo clock from 12 Jun session at Makeroni
import struct
import board
import displayio
import terminalio
import wifi
import socketpool
import time
import rtc
from adafruit_bitmap_font import bitmap_font
from adafruit_display_text import label
# Get wifi details and more from a secrets.py file
try:
from secrets import secrets
except ImportError:
print("WiFi secrets are kept in secrets.py, please add them there!")
raise
print("My MAC addr:", [hex(i) for i in wifi.radio.mac_address])
print("Connecting to %s"%secrets["ssid"])
wifi.radio.connect(secrets["ssid"], secrets["password"])
print("Connected to %s!"%secrets["ssid"])
print("My IP address is", wifi.radio.ipv4_address)
# NTP Code from https://gist.github.com/netroy/d1bff654fa58b884d63894ca2c890fc6
TZ_OFFSET = 3600
NTP_SERVER = "pool.ntp.org"
NTP_PORT = 123
def get_ntp_time(pool):
packet = bytearray(48)
packet[0] = 0b00100011
for i in range(1, len(packet)):
packet[i] = 0
with pool.socket(pool.AF_INET, pool.SOCK_DGRAM) as sock:
sock.sendto(packet, (NTP_SERVER, NTP_PORT))
sock.recvfrom_into(packet)
destination = time.monotonic_ns()
seconds = struct.unpack_from("!I", packet, offset=len(packet) - 8)[0]
monotonic_start = seconds - 2_208_988_800 - (destination // 1_000_000_000)
return time.localtime(time.monotonic_ns() // 1_000_000_000 + monotonic_start + TZ_OFFSET)
pool = socketpool.SocketPool(wifi.radio)
now = get_ntp_time(pool)
rtc.RTC().datetime = now
print("Synced with NTP")
display=board.DISPLAY
text="__:__:__"
font=bitmap_font.load_font("/font/Helvetica-Bold-36.bdf")
color=0xFF00FF
text_area=label.Label(font,text=text,color=color)
text_area.x=20
text_area.y=20
display.show(text_area)
last_time=time.localtime()
def update_time(text_label):
global last_time
now = time.localtime()
if now.tm_sec>last_time.tm_sec or now.tm_sec==0:
text_label.text = "%02d:%02d:%02d" % (now.tm_hour, now.tm_min, now.tm_sec)
last_time=now
while True:
update_time(text_area)
time.sleep(0.1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment