Made working app; updated README with instructions on how to flash
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
# Pico Time
|
# Pico Time
|
||||||
|
|
||||||

|

|
||||||

|

|
||||||
|
|
||||||
A [MicroPython](https://micropython.org/) app to display local time on an SSD1306 display.
|
A [MicroPython](https://micropython.org/) app to display local time on an SSD1306 display.
|
||||||
|
|
||||||
@@ -33,13 +33,24 @@ These are not necessary to run the app, but can be useful for testing and/or fla
|
|||||||
### Requirements
|
### Requirements
|
||||||
|
|
||||||
* [MicroPython](https://micropython.org/download/) - MicroPython downloads
|
* [MicroPython](https://micropython.org/download/) - MicroPython downloads
|
||||||
|
* [mpremote](https://docs.micropython.org/en/latest/reference/mpremote.html) - MicroPython remote serial tool
|
||||||
|
* (Linux users) Your user should be a part of the `dialout` group
|
||||||
|
|
||||||
### Steps
|
### Steps
|
||||||
|
|
||||||
1. Flash your Raspberry Pi Pico with MicroPython.
|
1. Connect your SSD1306 display to your Pico.
|
||||||
2. Copy `config.example.py` to `config.py` and edit the settings to match your environment.
|
2. Connect your Pico to your PC via a micro-USB to USB type-A cable.
|
||||||
3. Copy `main.py` and `config.py` to the root of the filesystem on the Pico.
|
3. [Flash your Raspberry Pi Pico with MicroPython](https://docs.micropython.org/en/latest/rp2/tutorial/reset.html).
|
||||||
4. Connect the SSD1306 display to your Pico and power on.
|
a. This has been tested with MicroPython 1.29, but other versions should work.
|
||||||
|
4. Clone this git repository: `git clone https://git.metaunix.net/BitGoblin/pico-time`.
|
||||||
|
5. `cd` into the repo: `cd pico-time`.
|
||||||
|
6. Copy `config.example.py` to `config.py` and edit the settings to match your environment.
|
||||||
|
7. Copy the Python code over to the Pico:
|
||||||
|
a. `mpremote cp main.py :main.py`
|
||||||
|
b. `mpremote cp config.py :config.py`
|
||||||
|
8. Reset the Pico: `mpremote reset`
|
||||||
|
|
||||||
|
If it worked you should see the display show a message about connecting to WiFi, then syncing time and finally displaying the local time. If it failed, you can monitor the app via `mpremote repl` or using an IDE like [Thonny](https://thonny.org/).
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -1,6 +1,6 @@
|
|||||||
# Wi-Fi credentials
|
# Wi-Fi credentials
|
||||||
WIFI_SSID = "YourSSID" # Set this to your Wi-Fi network name
|
WIFI_SSID = "YourSSID" # Set this to your Wi-Fi network name
|
||||||
WIFI_PASS = "YourPassword" # Set this to your Wi-Fi network password
|
WIFI_PASSWORD = "YourPassword" # Set this to your Wi-Fi network password
|
||||||
|
|
||||||
# NTP settings
|
# Timezone settings
|
||||||
NTP_HOST = "time.google.com" # Set this to your desired NTP server
|
UTC_OFFSET = -5 # Set this to your desired NTP server
|
||||||
|
|||||||
@@ -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)
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
ssd1306
|
||||||
Reference in New Issue
Block a user