Made working app; updated README with instructions on how to flash
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
import network
|
||||
import ntptime
|
||||
import time
|
||||
from machine import Pin, I2C
|
||||
import ssd1306
|
||||
|
||||
# --- Configuration ---
|
||||
try:
|
||||
import config as Config
|
||||
except ImportError:
|
||||
print("ERROR: config.py not found.")
|
||||
print("Create config.py on the device with your Wi-Fi and NTP settings.")
|
||||
while True:
|
||||
time.sleep(2)
|
||||
|
||||
# --- Hardware Setup ---
|
||||
i2c = I2C(0, sda=Pin(16), scl=Pin(17), freq=400000)
|
||||
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
|
||||
|
||||
|
||||
def display_message(line1, line2=""):
|
||||
oled.fill(0)
|
||||
oled.text(line1, 0, 16)
|
||||
oled.text(line2, 0, 32)
|
||||
oled.show()
|
||||
|
||||
|
||||
# --- Wi-Fi Connection ---
|
||||
display_message("Connecting to", "Wi-Fi...")
|
||||
wlan = network.WLAN(network.STA_IF)
|
||||
wlan.active(True)
|
||||
wlan.connect(Config.WIFI_SSID, Config.WIFI_PASSWORD)
|
||||
|
||||
timeout = 20
|
||||
while not wlan.isconnected() and timeout > 0:
|
||||
time.sleep(1)
|
||||
timeout -= 1
|
||||
|
||||
if not wlan.isconnected():
|
||||
display_message("Wi-Fi Error", "Check settings")
|
||||
raise RuntimeError("Failed to connect to Wi-Fi")
|
||||
|
||||
# --- NTP Synchronization ---
|
||||
display_message("Syncing time...", "NTP server")
|
||||
try:
|
||||
ntptime.settime() # Sets the Pico internal RTC to UTC
|
||||
except Exception as e:
|
||||
display_message("NTP Failed", str(e))
|
||||
time.sleep(3)
|
||||
|
||||
# Disconnect Wi-Fi to conserve power once time is synchronized
|
||||
wlan.active(False)
|
||||
|
||||
# --- Main Loop ---
|
||||
DAYS = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
|
||||
|
||||
while True:
|
||||
# Apply UTC offset to local epoch
|
||||
local_epoch = time.time() + (Config.UTC_OFFSET * 3600)
|
||||
year, month, day, hour, minute, second, weekday, _ = time.localtime(local_epoch)
|
||||
|
||||
time_str = f"{hour:02d}:{minute:02d}:{second:02d}"
|
||||
date_str = f"{DAYS[weekday]} {year}-{month:02d}-{day:02d}"
|
||||
|
||||
oled.fill(0)
|
||||
# Center-align roughly for 8x8 font
|
||||
oled.text(time_str, 32, 20)
|
||||
oled.text(date_str, 12, 38)
|
||||
oled.show()
|
||||
|
||||
time.sleep(0.5)
|
||||
Reference in New Issue
Block a user