14 Commits
Author SHA1 Message Date
Juli 222888bf1f Multi-SSID Wi-Fi with a saved-network list; fix could-not-save
Wi-Fi credentials now live in the widget's own NVS (up to 8 networks)
instead of the driver's single slot. The save handler just appends to
the list and reboots, so it no longer calls esp_wifi_set_config in
APSTA mode -- the source of the intermittent could-not-save. A connect
task cycles the saved networks newest-first and holds the first that
connects, re-scanning on drop, so the widget follows you between
locations. The portal lists saved networks with a Forget button and an
add form. An existing driver-stored credential is migrated on first
boot. Verified end to end over the LAN: save persists across reboot,
forget removes.
2026-09-17 20:12:13 +02:00
Juli 78df0e4163 Keep the Wi-Fi setup portal open when opened on purpose
Choosing Wi-Fi setup (or holding BOOT) while already connected used to
fall straight through: run_portal waited for a connection, which the
existing Wi-Fi satisfied at once. A forced portal now stays open until
new credentials are saved (which restarts the device); the no-connection
fallback still proceeds on auto-reconnect.
2026-09-17 19:50:57 +02:00
Juli cde3478337 Fix opentopia cameras replaying back-to-back
Cached opentopia stream URLs go stale, and the stored-URL retry path
re-showed the same camera (sometimes a full second time via the history
interaction), which read as frequent repeats. Now opentopia cameras
re-resolve their stream URL on every play and the retry dance is gone; a
last-drawn guard also prevents any camera being drawn twice in a row.
Verified: 29 consecutive cameras, 29 distinct, 0 repeats.
2026-09-17 16:16:34 +02:00
Juli 33089b95ab Wheel side setting: rotate the display 180° for left-handed use
Hardware mirror in the ST7789 (rotation 3 <-> rotation 1); the 35-px
window offset is the same both ways. Stored in settings v3.
2026-09-17 15:52:56 +02:00
Juli 836e815f30 100 favourite slots; Random skips recently shown cameras
Random mode keeps a ring of the last 1200 cameras (provider|id) and
skips them, giving up after four fully-seen pages. Opentopia pages now
contribute all 19 cameras instead of the first six.
2026-09-17 15:19:49 +02:00
Juli e82f0ac137 Require the button to confirm a knob wake
A knob turn still wakes the chip (the RTC can't tell gestures apart), but
the firmware now stays dark and checks the button: held while turning it
boots at once; otherwise the ring glows for 2.5 s waiting for a click and
goes back to deep sleep if none comes. Screen and Wi-Fi never start for
an accidental nudge.
2026-09-17 15:12:53 +02:00
Juli 3bdfcba6fb Selectable UI themes and a Popular source
Themes (Phosphor, Pink, Amber, Ice, Terminal) restyle the menu, boot
page and toasts live from the menu; all but Terminal use readable
Montserrat text. Source gains Popular: the top-rated listings walked in
rank order from page 1, alternating providers when mixed.
2026-09-17 03:11:25 +02:00
Juli 1ea7b13bc7 50 favourite slots; favourite lists show only used slots
Save-to-slot preselects the first empty slot; the favourites cache lives
in PSRAM.
2026-09-17 03:00:19 +02:00
Juli 89dfdf09a6 24 favourite slots and a Power off menu entry
Power off drops the peripheral rail (PWR_ON low), sleeps the panel and
puts the chip into deep sleep with ext1 wake armed on the encoder pins,
choosing any-low or any-high from the knob's resting state so a single
detent wakes it. The button (GPIO0) is not a wake source on purpose.
2026-09-17 02:20:48 +02:00
Juli bd05fca812 Add opentopia.com as a second camera provider
Listing pages (rated/newest) and per-camera pages are fetched over HTTPS
with the certificate bundle; the camera page's Live Feed mode yields the
camera's own MJPEG URL (Current Still as fallback), resolved just before
playing and cached in favourites. New Provider menu row: insecam /
opentopia / mixed. cam_info_t gains provider + title fields and the
settings blob a version byte; older favourites and settings still load.
2026-09-17 02:04:57 +02:00
Juli f238cfc9bf Battery/USB readout and wrap-around menu scrolling
BAT_ADC (GPIO4) sits between two 100k resistors on the switched supply
rail, so it reads the cell on battery and ~4.4 V on USB; above 4.25 V is
reported as USB power. On battery the caption shows a glyph + percentage
from a LiPo OCV table; the menu shows voltage and source. Menu lists now
wrap at both ends.
2026-09-17 01:28:59 +02:00
Juli d92a2e53cc On-device menu, persistent settings and 12 favourite slots
Hold the knob to open a six-row menu: save/remove the playing camera as
a favourite (12 NVS slots), play or forget favourites, choose the
source (random insecam or favourites), time per camera, listing,
screen and ring brightness, caption, and reboot into Wi-Fi setup.
Settings live in NVS and override the Kconfig first-boot defaults.
Camera URLs are stored with their COUNTER placeholder so favourites get
a fresh cache-buster on every visit.
2026-09-17 00:57:02 +02:00
Juli eff9e5dfaa Decode with esp_new_jpeg; fully decode double-encoded camera URLs
esp_new_jpeg scales inside the decoder and is 5-6x faster than tjpgd on
the S3 (1280x800 frame: ~100 ms instead of ~600 ms), so MJPEG streams
now play at a few fps. insecam double-encodes some URLs (&amp;amp;); the
entity decoder now loops until stable.
2026-09-17 00:45:27 +02:00
Juli 65a391940b insecam desk widget for the LilyGO T-Embed
ESP-IDF 5.5 + LVGL 9 firmware that plays random public cameras from
insecam.org on the T-Embed's 320x170 screen, live MJPEG where available,
a new camera every 20 seconds. Knob steps through cameras, LED ring shows
the countdown. Auto-detects the original vs CC1101 board, reuses Wi-Fi
credentials from NVS and falls back to a captive-portal setup hotspot.
2026-09-17 00:38:09 +02:00