Captures everything needed to redeploy the two-display clock (hour on I2C 0x61, minute on I2C 0x63) on a fresh Pi: - Both systemd units (matrix0x61.service, matrix0x63.service) - Deployed Pimoroni script tree, including the local %I (12-hour) clock customization - Vendored upstream sources (ltp305-python, breakout-garden) so restore is fully offline-capable - Boot config snippet enabling I2C - install.sh that wires it all back up idempotently - Inventory doc cross-referencing every live-system path Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
51 lines
1.2 KiB
Python
51 lines
1.2 KiB
Python
import sys
|
|
import time
|
|
from ltp305 import LTP305
|
|
|
|
|
|
print("""clock.py - clock segment example.
|
|
|
|
Usage: python3 clock.py <hour/minute/second> <i2c-address>
|
|
|
|
This simple clock example will display the hour, minute or second on a single matrix display breakout.
|
|
|
|
Press Ctrl+C to exit.
|
|
|
|
""")
|
|
|
|
fmt = "%M"
|
|
address = 0x61
|
|
available = {
|
|
"hour": "%H",
|
|
"minute": "%M",
|
|
"second": "%S"
|
|
}
|
|
|
|
if len(sys.argv) > 1:
|
|
try:
|
|
fmt = available[sys.argv[1]]
|
|
except KeyError:
|
|
raise ValueError("{} is not supported!".format(sys.argv[1]))
|
|
|
|
if len(sys.argv) > 2:
|
|
address = int(sys.argv[2], 16)
|
|
if address not in [0x61, 0x62, 0x63]:
|
|
raise ValueError("Invalid i2c address: 0x{:02x}. Run `i2c-detect -y 1` to discover breakouts.".format(address))
|
|
|
|
|
|
try:
|
|
display = LTP305(address=address)
|
|
display.clear()
|
|
display.show()
|
|
except OSError:
|
|
raise OSError("Unable to find LTP305 on i2c address: 0x{:02x}. Run `i2c-detect -y 1` to discover breakouts".format(address))
|
|
|
|
|
|
while True:
|
|
minute = time.strftime(fmt)
|
|
left, right = minute
|
|
display.set_character(0, left)
|
|
display.set_character(5, right)
|
|
display.show()
|
|
time.sleep(1.0 / 60)
|