Move RTC to display instance

This commit is contained in:
Gabriel Augendre 2023-03-10 21:59:00 +01:00
parent e643f531f1
commit 3d7d12bf88
3 changed files with 39 additions and 47 deletions

View file

@ -1,11 +1,8 @@
import machine
import urequests import urequests
import jpegdec import jpegdec
from pimoroni_i2c import PimoroniI2C from pcf85063a import PCF85063A
from pcf85063a import PCF85063A, MONDAY
import ntptime
from badger2040w import WIDTH, Badger2040W, UPDATE_NORMAL, UPDATE_FAST from badger2040w import WIDTH, Badger2040W, UPDATE_NORMAL, UPDATE_FAST, ENABLE_3V3
import secrets import secrets
from secrets import HA_BASE_URL, HA_ACCESS_TOKEN from secrets import HA_BASE_URL, HA_ACCESS_TOKEN
@ -16,8 +13,6 @@ display.led(128)
jpeg = jpegdec.JPEG(display.display) jpeg = jpegdec.JPEG(display.display)
i2c = PimoroniI2C(sda=4, scl=5)
rtc = PCF85063A(i2c)
BLACK = 0 BLACK = 0
WHITE = 15 WHITE = 15
@ -151,43 +146,31 @@ class HAPlant:
def main(): def main():
display.connect() display.connect()
set_clocks() display.set_clocks()
# Call halt in a loop, on battery this switches off power.
# On USB, the app will exit when A+C is pressed because the launcher picks that up.
while True:
fetch_and_display()
print("Halting")
display.halt()
display.rtc.clear_timer_flag()
def fetch_and_display():
display.set_pen(WHITE) display.set_pen(WHITE)
display.clear() display.clear()
display_image() display_image()
display_header("Chargement...") display_header("Chargement...")
display.set_update_speed(UPDATE_FAST) display.set_update_speed(UPDATE_FAST)
display.update() display.update()
plant = HAPlant() plant = HAPlant()
plant.fetch_states() plant.fetch_states()
plant.display_state() plant.display_state()
display.rtc.set_timer(
rtc.set_timer(
secrets.REFRESH_INTERVAL_MINUTES, ttp=PCF85063A.TIMER_TICK_1_OVER_60HZ secrets.REFRESH_INTERVAL_MINUTES, ttp=PCF85063A.TIMER_TICK_1_OVER_60HZ
) )
# Call halt in a loop, on battery this switches off power.
# On USB, the app will exit when A+C is pressed because the launcher picks that up.
while True:
display.halt()
def set_clocks():
ntptime.settime()
(
year,
month,
day,
weekday,
hours,
minutes,
seconds,
_,
) = machine.RTC().datetime()
rtc.datetime((year, month, day, hours, minutes, seconds, weekday))
def display_image(): def display_image():
# Display image # Display image
@ -207,7 +190,7 @@ def display_header(text):
display.text(text, 3, 4) display.text(text, 3, 4)
# Display time # Display time
_, _, _, hour, minute, _, _ = rtc.datetime() _, _, _, hour, minute, _, _ = display.rtc.datetime()
hour = (hour + 1) % 24 hour = (hour + 1) % 24
time = f"{hour:02d}:{minute:02d}" time = f"{hour:02d}:{minute:02d}"
time_offset = display.measure_text(time) time_offset = display.measure_text(time)

View file

@ -1,6 +1,9 @@
import machine import machine
import micropython import micropython
from picographics import PicoGraphics, DISPLAY_INKY_PACK from picographics import PicoGraphics, DISPLAY_INKY_PACK
from pimoroni_i2c import PimoroniI2C
from pcf85063a import PCF85063A
import ntptime
import network import network
from network_manager import NetworkManager from network_manager import NetworkManager
import WIFI_CONFIG import WIFI_CONFIG
@ -83,6 +86,8 @@ class Badger2040W:
self._led.freq(1000) self._led.freq(1000)
self._led.duty_u16(0) self._led.duty_u16(0)
self._update_speed = 0 self._update_speed = 0
i2c = PimoroniI2C(sda=4, scl=5)
self.rtc = PCF85063A(i2c)
def __getattr__(self, item): def __getattr__(self, item):
# Glue to redirect calls to PicoGraphics # Glue to redirect calls to PicoGraphics
@ -116,7 +121,7 @@ class Badger2040W:
time.sleep(0.05) time.sleep(0.05)
enable = machine.Pin(ENABLE_3V3, machine.Pin.OUT) enable = machine.Pin(ENABLE_3V3, machine.Pin.OUT)
enable.off() enable.off()
while not self.pressed_any(): while not self.pressed_any() and not self.rtc.read_timer_flag():
pass pass
def pressed(self, button): def pressed(self, button):
@ -177,3 +182,17 @@ class Badger2040W:
network_manager.client(WIFI_CONFIG.SSID, WIFI_CONFIG.PSK) network_manager.client(WIFI_CONFIG.SSID, WIFI_CONFIG.PSK)
) )
gc.collect() gc.collect()
def set_clocks(self):
ntptime.settime()
(
year,
month,
day,
weekday,
hours,
minutes,
seconds,
_,
) = machine.RTC().datetime()
self.rtc.datetime((year, month, day, hours, minutes, seconds, weekday))

View file

@ -45,30 +45,20 @@ def initial_setup(c: Context, board_id: str):
if MICROPYTHON_DEPENDENCIES: if MICROPYTHON_DEPENDENCIES:
deps = " ".join(MICROPYTHON_DEPENDENCIES) deps = " ".join(MICROPYTHON_DEPENDENCIES)
c.run( c.run(
f"mpremote connect id:{board_id} " f"mpremote connect id:{board_id} " f"mip install {deps}",
f"mip install {deps} + "
"cp -r . : + "
"reset",
pty=True,
echo=True,
)
else:
c.run(
f"mpremote connect id:{board_id} " "cp -r . : + " "reset",
pty=True, pty=True,
echo=True, echo=True,
) )
update_code(c, board_id)
@task @task
def update_code(c: Context, board_id: str): def update_code(c: Context, board_id: str):
"""Update code on the board.""" """Update code on the board."""
# mpremote connect id:e6614864d3269c34 \
# cp -r . : + \
# reset
with c.cd(SRC_DIR): with c.cd(SRC_DIR):
c.run("find . -name '.DS_Store' -delete", pty=True, echo=True)
c.run( c.run(
f"mpremote connect id:{board_id} " "cp -r . : + " "reset", f"mpremote connect id:{board_id} cp -r . : + reset",
pty=True, pty=True,
echo=True, echo=True,
) )