Skip to content

Releases: Keralots/SmallOLED-PCMonitor

v1.6.1

Choose a tag to compare

@Keralots Keralots released this 15 Jun 18:44

Download Instructions

Make sure you download the correct version for your screen size!

Use Case File to Download
New device (first time flashing) firmware-v1.6.1-OLED_0.96inch.bin, firmware-v1.6.1-OLED_1.3inch.bin or firmware-v1.6.1-OLED_1.54inch.bin
Existing device (OTA update via web interface) OTA_ONLY_firmware-v1.6.1-OLED_0.96inch.bin, OTA_ONLY_firmware-v1.6.1-OLED_1.3inch.bin or OTA_ONLY_firmware-v1.6.1-OLED_1.54inch.bin

0.96" SSD1306 and 2.42" SSD1309 share the 0.96inch image. 1.3" SH1106 and 1.54" CH1116 each have their own image - do not mix them up.

You can also flash directly from your browser (no tools to install): https://keralots.github.io/SmallOLED-PCMonitor/

Heads up for older devices: the firmware has grown and is now close to the OTA size limit on devices still using the original partition layout. If an OTA update ever fails with a "size" or "no space" error, export your config from the Maintenance page, re-flash once with the browser flasher (this updates the storage layout automatically), then import your backup. After that, OTA updates work normally again.

v1.6.1 - Changelog

Fixes

  • Pac-Man clock: digits no longer lose their dots after a digit changes. The stale eaten-pellet mask is now cleared so the rebuilt digit is drawn complete.

This is a small patch on top of v1.6.0. If you have not updated yet, everything from v1.6.0 is included below - you do not need to install v1.6.0 separately.


Everything from v1.6.0

New Features

Redesigned configuration web portal

  • The on-device web portal has a completely new "paper docs" look in a master-detail layout: a left section navigation (Clock, Display, Display layout, Visible metrics, Network, Timezone, Maintenance), content cards, and a sticky save bar.
  • Top-right accent picker (green/amber) and a light/dark toggle, both remembered per browser. An inline head script applies your theme before the page paints, so there is no flash of the wrong colours.
  • The portal's CSS and JavaScript are now served as their own cached routes (/portal.css, /portal.js) instead of being inlined, so the main page is smaller and reloads are faster.

Visible metrics - live 1:1 OLED preview with chip-tray placement

  • The Visible metrics page now shows a pixel-exact 1:1 render of your OLED that updates live from the device.
  • A compact chip tray sits right under the preview, one chip per metric showing its name and current slot. Place a metric by dragging its chip onto a slot, or tap the chip then tap a slot (works on touch, where drag-and-drop does not).
  • Remove a metric by clicking it on the preview (or dragging its chip off the screen); this also clears its progress bar so nothing is left behind. Cancel a selection with Esc, by tapping empty tray space, or by tapping the chip again.
  • Per-metric details (custom label, pairing, progress bar) live in a collapsible card whose heading reflects your custom label live.

Two new animated clocks

  • Asteroids (style 10): a wireframe vector clock - the ship drifts with inertia and splits tumbling rocks while idle, then aims at and shoots each changed digit into spinning line shards at the minute change.
  • Dino Runner (style 11): a Chrome T-Rex homage - the dino runs and auto-jumps cacti over a scrolling ground with parallax clouds; at the minute change a pterodactyl swoops in, snatches the old digit and the new one drops in from above.

Mobile-friendly portal

  • On narrow screens the sidebar collapses into a hamburger menu.
  • Factory reset moved into a dedicated Maintenance section alongside OTA update and configuration backup.

OTA partition-limit warning

  • Devices still on the original 4 MB partition layout now show a clear warning on the Maintenance page when the firmware is close to the OTA size limit, with step-by-step recovery guidance (export config, re-flash once via the browser flasher to repartition, import config). Devices already on the larger layout don't see the warning.

Companion App (beta)

  • The PC companion app folder was renamed to PC-Companion-App-v3-beta.
  • Its layout engine and layout editor were split into separate modules with unit tests.
  • The Customize window gained a pixel-exact 1:1 device preview and live push to the device.
  • Customize editor rework: layout backup/restore, name-safe push, and a fix for live values not updating in the preview.

Internal / Docs Changes

  • The web portal markup remains a chunk-streamed PROGMEM document with %TOKEN% substitution; only the static CSS/JS were split out to cached routes, keeping peak heap low on the ESP32-C3.
  • Per-clock-style settings panels are shown/hidden generically off the clockStyle dropdown.
  • Asset URLs are cache-busted with a version query so browsers always fetch the matching CSS/JS after an update.

v1.6.0

Choose a tag to compare

@Keralots Keralots released this 14 Jun 10:17

Download Instructions

Make sure you download the correct version for your screen size!

Use Case File to Download
New device (first time flashing) firmware-v1.6.0-OLED_0.96inch.bin, firmware-v1.6.0-OLED_1.3inch.bin or firmware-v1.6.0-OLED_1.54inch.bin
Existing device (OTA update via web interface) OTA_ONLY_firmware-v1.6.0-OLED_0.96inch.bin, OTA_ONLY_firmware-v1.6.0-OLED_1.3inch.bin or OTA_ONLY_firmware-v1.6.0-OLED_1.54inch.bin

0.96" SSD1306 and 2.42" SSD1309 share the 0.96inch image. 1.3" SH1106 and 1.54" CH1116 each have their own image - do not mix them up.

You can also flash directly from your browser (no tools to install): https://keralots.github.io/SmallOLED-PCMonitor/

Heads up for older devices: the firmware has grown and is now close to the OTA size limit on devices still using the original partition layout. If an OTA update ever fails with a "size" or "no space" error, export your config from the Maintenance page, re-flash once with the browser flasher (this updates the storage layout automatically), then import your backup. After that, OTA updates work normally again.

v1.6.0 - Changelog

New Features

Redesigned configuration web portal

  • The on-device web portal has a completely new "paper docs" look in a master-detail layout: a left section navigation (Clock, Display, Display layout, Visible metrics, Network, Timezone, Maintenance), content cards, and a sticky save bar.
  • Top-right accent picker (green/amber) and a light/dark toggle, both remembered per browser. An inline head script applies your theme before the page paints, so there is no flash of the wrong colours.
  • The portal's CSS and JavaScript are now served as their own cached routes (/portal.css, /portal.js) instead of being inlined, so the main page is smaller and reloads are faster.

Visible metrics - live 1:1 OLED preview with chip-tray placement

  • The Visible metrics page now shows a pixel-exact 1:1 render of your OLED that updates live from the device.
  • A compact chip tray sits right under the preview, one chip per metric showing its name and current slot. Place a metric by dragging its chip onto a slot, or tap the chip then tap a slot (works on touch, where drag-and-drop does not).
  • Remove a metric by clicking it on the preview (or dragging its chip off the screen); this also clears its progress bar so nothing is left behind. Cancel a selection with Esc, by tapping empty tray space, or by tapping the chip again.
  • Per-metric details (custom label, pairing, progress bar) live in a collapsible card whose heading reflects your custom label live.

Two new animated clocks

  • Asteroids (style 10): a wireframe vector clock - the ship drifts with inertia and splits tumbling rocks while idle, then aims at and shoots each changed digit into spinning line shards at the minute change.
  • Dino Runner (style 11): a Chrome T-Rex homage - the dino runs and auto-jumps cacti over a scrolling ground with parallax clouds; at the minute change a pterodactyl swoops in, snatches the old digit and the new one drops in from above.

Mobile-friendly portal

  • On narrow screens the sidebar collapses into a hamburger menu.
  • Factory reset moved into a dedicated Maintenance section alongside OTA update and configuration backup.

OTA partition-limit warning

  • Devices still on the original 4 MB partition layout now show a clear warning on the Maintenance page when the firmware is close to the OTA size limit, with step-by-step recovery guidance (export config, re-flash once via the browser flasher to repartition, import config). Devices already on the larger layout don't see the warning.

Companion App (beta)

  • The PC companion app folder was renamed to PC-Companion-App-v3-beta.
  • Its layout engine and layout editor were split into separate modules with unit tests.
  • The Customize window gained a pixel-exact 1:1 device preview and live push to the device.
  • Customize editor rework: layout backup/restore, name-safe push, and a fix for live values not updating in the preview.

Internal / Docs Changes

  • The web portal markup remains a chunk-streamed PROGMEM document with %TOKEN% substitution; only the static CSS/JS were split out to cached routes, keeping peak heap low on the ESP32-C3.
  • Per-clock-style settings panels are shown/hidden generically off the clockStyle dropdown.
  • Asset URLs are cache-busted with a version query so browsers always fetch the matching CSS/JS after an update.

Related commits: 430775e (portal redesign), ded6168 (mobile nav + Maintenance + cache-busting), 8795e34 (1:1 live preview + drag-and-drop), ae0fcfb (OTA partition warning), 9727e5a (chip-tray drag/tap placement), 8985004 (Asteroids clock), fef5369 (Dino Runner clock), c452f7c / 6baac3e / 5403419 / 48f5b02 (companion app v3 beta rework), c7cf0a2 (version bump).

v1.5.7

Choose a tag to compare

@Keralots Keralots released this 06 Jun 14:20

Download Instructions

Make sure you download the correct version for your screen size!

Use Case File to Download
New device (first time flashing) firmware-v1.5.7-OLED_0.96inch.bin, firmware-v1.5.7-OLED_1.3inch.bin or firmware-v1.5.7-OLED_1.54inch.bin
Existing device (OTA update via web interface) OTA_ONLY_firmware-v1.5.7-OLED_0.96inch.bin, OTA_ONLY_firmware-v1.5.7-OLED_1.3inch.bin or OTA_ONLY_firmware-v1.5.7-OLED_1.54inch.bin

0.96" SSD1306 and 2.42" SSD1309 share the 0.96inch image. 1.3" SH1106 and 1.54" CH1116 each have their own image - do not mix them up.

You can also flash directly from your browser (no tools to install): https://keralots.github.io/SmallOLED-PCMonitor/

v1.5.7 - Changelog

New Features

1.54" CH1116 display support (new display type)

  • Added support for 1.54" 128x64 OLED panels built on the CH1116 controller, selectable as display type 2.
  • The CH1116 is SH1106-compatible but maps its visible area directly to GDDRAM columns 0..127 (no column offset), unlike the SH1106's 2-column offset. Flashing the SH1106 image onto a CH1116 left a stale column on the left edge and clipped the right border (most visible as a missing right side on the Snake clock's arena frame). The new driver corrects the offset so the panel renders edge to edge.
  • Use it by setting DEFAULT_DISPLAY_TYPE 2 in user_config.h, or flash the dedicated 1.54inch build. New PlatformIO build environment: oled-154.
  • Example panel: https://aliexpress.com/item/1005006579037427.html

Browser web flasher with in-browser WiFi setup

  • New GitHub Pages flasher lets you install or update the firmware straight from Chrome or Edge over USB - no PlatformIO or esptool needed. Pick your OLED variant and click Install.
  • On first boot the device offers Improv-Serial provisioning, so the flasher can push your home WiFi credentials right after flashing. The WiFiManager AP portal stays available as a fallback.
  • Includes a built-in serial monitor so you can watch the device boot from the same page.

Tetris clock - Smooth Play mode

  • New option for the Tetris Block Game clock that smooths out the piece animation for a more fluid look.

Clock setting descriptions show defaults

  • The animation setting descriptions in the web portal now show each option's default value, so it is easier to get back to stock behaviour.

Bug Fixes

  • Timezone / DST accuracy (#54): corrected several timezone database offsets and DST transition rules.
  • LED night light (#55): the brightness slider is now hidden/guarded when LED_PWM_ENABLED is 0, so builds without the LED no longer show a dead control.
  • Clock stuck at 00:00: fixed the clock freezing at 00:00 when the first NTP sync landed during a minute-change window.
  • Snake clock freeze: fixed the Snake clock freezing on the pellet frame during a digit change.

Internal / Docs Changes

  • The web config page is now streamed from a PROGMEM template (src/web/web_pages.h), reducing RAM pressure on the ESP32-C3.
  • Web flasher moved from /flasher/ to the GitHub Pages site root.
  • The CH1116 driver lives in src/display/ch1116.h as a thin subclass of the Adafruit SH1106 driver (Adafruit_CH1116); it reuses the SH1106 init/draw path and only overrides the column offset (CH1116_COL_OFFSET, default 0). No Adafruit library edits required.
  • Display type 2 is now CH1116. This supersedes the v1.5.6 note that there was "no display type 2" - that note was about 2.42" SSD1309, which still uses type 0 (the SSD1306 driver).
  • Release tooling (create_firmware.py, release.py) and the web flasher now build and offer all three firmware images: SSD1306 (0.96" / 2.42"), SH1106 (1.3") and CH1116 (1.54").
  • Updated user_config.h, display.h, main.cpp, README.md and STRUCTURE_How_to_modify.md to document the new display type.

Related commits: 84cba3e (web flasher + Improv), 5ee5ba7 (#54 timezone/DST), 9f29e91 (#55 LED slider guard), 4f98f0c (PROGMEM web page), 583a803 (Tetris Smooth Play), af91ac3 (flasher to site root), dabe347 (setting default labels), 8e80f93 (NTP 00:00 fix), debcaa9 (Snake freeze fix).

v1.5.6

Choose a tag to compare

@Keralots Keralots released this 01 Jun 18:59

Download Instructions

Make sure you download the correct version for your screen size!

Use Case File to Download
New device (first time flashing) firmware-v1.5.6-OLED_0.96inch.bin or firmware-v1.5.6-OLED_1.3inch.bin
Existing device (OTA update via web interface) OTA_ONLY_firmware-v1.5.6-OLED_0.96inch.bin or OTA_ONLY_firmware-v1.5.6-OLED_1.3inch.bin

v1.5.6 - Changelog

New Features

Snake Clock (new animation)

  • A Nokia-style snake roams the screen chasing food and steering around both the clock digits and its own body.
  • On each minute change the changed digits crumble into pellets; the snake hunts them down one by one before the new digit drops in.
  • Optional Arena Border (Nokia-style frame) and optional date row, configurable in the web portal under Clock Settings.

Tetris Clock (new animation)

  • Block-grid numerals sit low on the screen, with a blinking block colon and the occasional tumbling tetromino during the idle gap.
  • On each minute change the changed digits are rebuilt one at a time (left to right) in one of two styles: Drop-in Slabs (old digit bursts into fragments, new digit locks in as three slabs) or Falling Dots (the digit is assembled dot by dot from the bottom up).
  • Block style (LCD grid or solid), animation style, dot order, and date position (top/bottom) are all configurable.

Cycle All Styles mode

  • New clock style that automatically rotates through every animation, switching to the next one every 5 minutes.
  • Selectable like any other clock style in the web portal. Contributed via #52.

Internal / Docs Changes

  • Clarified that 2.42" SSD1309 panels use display type 0 (the SSD1306 driver) and that there is no separate display type 2. Updated the comments in user_config.h, display.h and main.cpp. Addresses #53.
  • New clock styles bring the HTTP control API range to /api/clock/style?id=0-9 (7 = Snake, 8 = Tetris, 9 = Cycle All Styles).

Related commits: 4031acb (Snake + Tetris + Cycle All), e09a9e5 (Snake pathfinding), 156d0c4 (#53 display-type docs).

v1.5.5

Choose a tag to compare

@Keralots Keralots released this 31 May 13:04

Download Instructions

Make sure you download the correct version for your screen size!

Use Case File to Download
New device (first time flashing) firmware-v1.5.5-OLED_0.96inch.bin or firmware-v1.5.5-OLED_1.3inch.bin
Existing device (OTA update via web interface) OTA_ONLY_firmware-v1.5.5-OLED_0.96inch.bin or OTA_ONLY_firmware-v1.5.5-OLED_1.3inch.bin

v1.5.5 - Changelog

New Features

HTTP Control API for Remote Automation

  • Added lightweight HTTP endpoints so the device can be controlled remotely from home automation (Home Assistant, Node-RED) or a simple curl command — handy for turning the display off while away to help extend OLED lifetime.
  • All endpoints are plain HTTP GET and return JSON:
    • GET /api/display/off / GET /api/display/on — turn the panel off / on
    • GET /api/display/brightness?value=0-100 — set display brightness (percent)
    • GET /api/mode/clock / GET /api/mode/auto — force the clock, or resume automatic mode (PC stats when online, clock when offline)
    • GET /api/clock/style?id=0-6 — switch the clock animation
    • GET /api/status — read the current display/mode state as JSON
    • GET /api/reboot — soft restart (settings preserved)
  • These controls are runtime-only and reset to your configured behavior after a reboot, so frequent toggling from automations causes no flash wear.
  • Scheduled night dimming now respects a display that has been turned off via HTTP, so the periodic brightness check no longer switches the panel back on.
  • See the new HTTP Control API section in the README for usage examples and a Home Assistant snippet.
  • Addresses #49.

Internal Changes

  • Release builds now select the OLED display type via a build flag (new PlatformIO environments oled-096 and oled-13) instead of editing DEFAULT_DISPLAY_TYPE in user_config.h before each build.
  • create_firmware.py now compiles the matching variant itself and can build both OLED variants in a single run.
  • Related commits: 7182993, 0338b5a

v1.5.4

Choose a tag to compare

@Keralots Keralots released this 09 May 09:38

Download Instructions

Make sure you download the correct version for your screen size!

Use Case File to Download
New device (first time flashing) firmware-1.5.4-OLED_0.96inch.bin or firmware-1.5.4-OLED_1.3inch.bin
Existing device (OTA update via web interface) OTA_ONLY_firmware-1.5.4-OLED_0.96inch.bin or OTA_ONLY_firmware-1.5.4-OLED_1.3inch.bin

v1.5.4 - Changelog

New Features

Additional Date Display Format

  • Added a new DD.MM.YYYY date format option, for example 09.05.2026 (Requested in: #45 )
  • The new format is selectable from the web UI alongside the existing options:
    • DD/MM/YYYY
    • MM/DD/YYYY
    • YYYY-MM-DD
  • The new date format is supported across all clock displays:
    • Standard Clock
    • Large Clock
    • Mario Animation
    • Space Invaders
    • Arkanoid / Pong
    • Pac-Man Clock

Bug Fixes

Animated Clock Time Drift After Long Uptime

  • Fixed animated clocks drifting several minutes behind real time after long uptime
  • The issue affected cached-time animated clocks such as Pac-Man and Arkanoid / Pong, while Standard and Large clocks stayed correct
  • Added shared override maintenance so Mario, Pac-Man, Space, and Pong all clear stale animated-time overrides consistently
  • Pong now clears inherited time overrides instead of displaying a stale cached time indefinitely
  • Touch-button clock cycling, web saves, and config imports now reset animated clock state cleanly when the clock style changes
  • The animated-time timeout is no longer extended by every digit update, preventing long-running animations from sliding the safety window forward indefinitely

Internal Changes

  • Added centralized maintainTimeOverride() logic for animated clock time synchronization
  • Added centralized resetClockAnimationState() logic for clock-style changes
  • Preserved the existing 60 second TIME_OVERRIDE_MAX_MS safety window to avoid cutting off slow user-configured animations
  • Related commits: 8d6ed3a, eb9076f

v1.5.3

Choose a tag to compare

@Keralots Keralots released this 04 Apr 14:10
053a964

Download Instructions

Make sure you download the correct version for your screen size!

Use Case File to Download
New device (first time flashing) firmware-v1.5.3-OLED_0.96inch.bin or firmware-v1.5.3-OLED_1.3inch.bin
Existing device (OTA update via web interface) OTA_ONLY_firmware-v1.5.3-OLED_0.96inch.bin or OTA_ONLY_firmware-v1.5.3-OLED_1.3inch.bin

v1.5.3 - Changelog

New Features

Full 12-Hour Format Support for Offline Clocks

  • Fixed the 12-hour / 24-hour setting so it now works consistently across all offline/manual clock styles
  • Animated clock styles now respect the selected time format:
    • Mario Animation
    • Space Invaders
    • Arkanoid / Pong
    • Pac-Man Clock
  • Added AM/PM indicators for animated clock styles when 12-hour format is enabled
  • Large Clock keeps its existing layout, with the AM/PM indicator moved to avoid overlapping the large minute digits
  • Shared time formatting logic was unified so midnight/noon transitions behave correctly across styles:
    • 00:xx -> 12:xx AM
    • 11:59 -> 12:00 PM
    • 12:59 -> 01:00 PM
    • 23:59 -> 12:00 AM

Touch-Gated OLED Off + Temporary Wake

  • Display brightness 0 now means true OLED off, but only on builds with TOUCH_BUTTON_ENABLED
  • Added temporary tap-to-wake when the display is off:
    • short press wakes the OLED for 10 seconds
    • after timeout, brightness returns to the scheduled/current target level
  • This behavior is limited to devices that actually have the touch/button hardware enabled

Bug Fixes

Brightness Safety for No-Button Builds

  • Devices built without touch button support can no longer set display brightness to 0
  • The same safety rule now applies to scheduled dim brightness
  • Protection is enforced in multiple places:
    • Web UI sliders
    • form save handling
    • persisted settings loaded from NVS
  • Prevents users from configuring a fully dark screen on hardware that has no input method to wake it

Mario Clock - Koopa Facing Direction

  • Fixed Koopa Troopa in Mario idle encounters walking with its head on the wrong side
  • Koopa sprite now faces the actual movement direction during encounters

UI Improvements

Display Settings Page

  • Brightness help text now changes depending on whether the build supports the touch button
  • Builds with touch/button explain that 0% can be used with tap-to-wake
  • Builds without touch/button explain that the minimum brightness is 1%

Internal Changes

  • Unified offline clock time formatting and rendered-time state handling for 12h/24h mode
  • Added shared brightness sanitization helpers in settings persistence
  • Refactored display brightness handling to work correctly across supported OLED driver types
  • Added temporary wake handling inside the display module instead of relying on display-type-specific shortcuts

v1.5.2

Choose a tag to compare

@Keralots Keralots released this 05 Mar 17:36
ed3d952

Download Instructions

Make sure you download the correct version for your screen size!

Use Case File to Download
New device (first time flashing) firmware-v1.5.2-OLED_0.96inch.bin or firmware-v1.5.2-OLED_1.3inch.bin
Existing device (OTA update via web interface) OTA_ONLY_firmware-v1.5.2-OLED_0.96inch.bin or OTA_ONLY_firmware-v1.5.2-OLED_1.3inch.bin

v1.5.2 - Changelog

New Features

Mario Clock - Idle Enemy Encounters

  • Between minute changes, Mario encounters enemies during the ~56-second idle gap
  • All encounters auto-abort at second :56 to ensure minute-change animation always has priority
  • Disabled by default — enable via web interface: Mario Clock Settings > Idle Encounters

Encounter Configuration (Web Interface)

  • Idle Encounters checkbox to enable/disable
  • Encounter Frequency dropdown:
    • Rare (25-35s)
    • Normal (15-25s)
    • Frequent (8-15s)
    • Chaotic (2-5s)
  • Encounter Speed dropdown: Slow / Normal / Fast

Timezone Database Additions

  • Added Pakistan (Karachi, Islamabad) timezone (UTC+5, no DST)
  • Added Central Asia (Tashkent, Uzbekistan) timezone (UTC+5, no DST)
  • Added UTC+5 default mapping for automatic migration from old GMT offset format

v1.5.1

Choose a tag to compare

@Keralots Keralots released this 23 Feb 19:37
d811c60

Download Instructions

Make sure you download the correct version for your screen size!

Use Case File to Download
New device (first time flashing) firmware-v1.5.1-OLED_0.96inch.bin or firmware-v1.5.1-OLED_1.3inch.bin
Existing device (OTA update via web interface) OTA_ONLY_firmware-v1.5.1-OLED_0.96inch.bin or OTA_ONLY_firmware-v1.5.1-OLED_1.3inch.bin

v1.5.1 - Changelog

New Features

mDNS Discovery

  • Device is now discoverable on local network via http://smalloled.local
  • No more memorizing IP addresses - just type the hostname in your browser
  • Configurable device name (default: smalloled) via web interface Settings > Device Name
  • mDNS name updates automatically when device name is changed

BLE WiFi Provisioning (Experimental)

  • New Bluetooth Low Energy setup option for the upcoming SmallOLED Android app
  • On first boot (no saved WiFi), device advertises as BLE GATT server
  • Android app connects, sends WiFi credentials, device connects and saves them
  • Falls back to AP mode automatically if BLE times out (2 min) or fails
  • Disabled by default (BLE_SETUP_ENABLED 0 in user_config.h)
  • Requires min_spiffs.csv partition table (already configured in platformio.ini)

Android App API Endpoints

  • Added new REST API endpoints to support the upcoming SmallOLED Android companion app
  • Device discovery and configuration management from mobile

Configurable AP Password

  • WiFi setup Access Point is now open (no password) by default for easier first-time setup
  • Password can be set via AP_PASSWORD in user_config.h if security is needed

Factory Reset

  • "Reset WiFi Settings" button replaced with full Factory Reset
  • Erases all settings (WiFi, display, metrics, animations, network) and restarts in AP setup mode
  • Two-step confirmation with backup reminder before proceeding

Bug Fixes

  • Fixed mDNS UDP socket error on startup
  • Fixed LED initialization timing issue
  • Fixed LED PWM brightness jump at 100% duty cycle, gamma output capped at 254 to keep LED drivers in PWM dimming mode (avoids visible jump when using constant-current driver boards)

Documentation

README.md Updates

  • Added new Advanced / Optional Features section covering:
    • SPI display interface (alternative to I2C, faster refresh)
    • LED PWM night light with TTP223 touch gestures
    • QR code WiFi setup display
    • BLE provisioning (experimental)
    • Scheduled dimming / night mode
    • OTA firmware updates

Dependencies

  • Added h2zero/NimBLE-Arduino@^1.4.2 (BLE provisioning library, dead-stripped when disabled)
  • Changed partition table to min_spiffs.csv (supports OTA + BLE)

New Files

  • src/network/ble_setup.cpp - BLE GATT server for WiFi provisioning
  • src/network/ble_setup.h - BLE setup header and declarations

Configuration Changes

  • user_config.h: Added BLE_SETUP_ENABLED, BLE_DEVICE_NAME, AP_PASSWORD options
  • config.h: Added deviceName[32] field to Settings struct
  • settings.cpp: Added device name persistence (NVS key: deviceName)

v1.5.0

Choose a tag to compare

@Keralots Keralots released this 14 Feb 09:37
f0cc52b

Download Instructions

Make sure you download the correct version for your screen size!

Use Case File to Download
New device (first time flashing) firmware-v1.4.3-OLED_0.96inch.bin or firmware-v1.4.3-OLED_1.3inch.bin
Existing device (OTA update via web interface) OTA_ONLY_firmware-v1.4.3-OLED_0.96inch.bin or OTA_ONLY_firmware-v1.4.3-OLED_1.3inch.bin

v1.5.0 Release Notes

New Features

  • Automatic Timezone & DST - Replaced manual GMT offset + DST checkbox with a region-based timezone selector (~50 regions). DST transitions happen automatically using POSIX timezone strings. Old settings are auto-migrated.
  • Large Text Display Modes - Two new row modes: Large 2-Row and Large 3-Row with double-size text in single-column layout for better readability at a distance.
  • SPI Display Interface - Compile-time DISPLAY_INTERFACE switch to use SPI instead of I2C. Configurable SPI pins in user_config.h.
  • LED Gesture Control - Redesigned TTP223 touch gestures: quick tap (< 500ms) toggles mode/cycles clocks, medium press (500ms-1s) toggles LED on/off, long hold (> 1s) ramps LED brightness with gamma correction.
  • Show IP at Boot - New setting to show/hide the IP address on OLED at startup (configurable via web interface).
  • QR Code WiFi Setup - Optional compile-time feature (QR_SETUP_ENABLED) that shows a scannable QR code on the OLED during WiFi AP setup.

Bug Fixes

  • Fixed clock drifting ~3 hours after days of uptime - WiFi reconnection now restarts the SNTP client and reapplies timezone. Added periodic hourly NTP re-sync as safety net.
  • Fixed animated clock digit revert - Animation trigger changed from :55 to :56 seconds in Mario, Space Invaders, and Pac-Man clocks, preventing digits from briefly showing the old value.
  • Fixed Pong ball diagonal speed - Balls moving diagonally no longer exceed maximum speed (clamped by magnitude instead of per-axis).
  • Fixed timezone dropdown showing wrong region - Multiple regions sharing the same timezone rules (Central European, Scandinavian, Central Balkan) now correctly display the user's actual selection.
  • Fixed UDP oversized packet handling - Packet size is validated before reading, preventing processing of truncated data.
  • Fixed Pac-Man eaten pellets initialization - Prevents visual glitches from uninitialized memory on first display.
  • Fixed scheduled dimming edge case - Same start/end hour now correctly treated as "no dim period".
  • Fixed progress bar off-screen drawing - Bars outside display bounds are now skipped.
  • Fixed SH1106 initialization - Now properly checks return value of display.begin().
  • Fixed WiFi disconnect not marking PC offline - Display correctly shows offline status when WiFi drops.
  • Fixed buffer overflow in safeCopyString - Uses strncpy with explicit null termination.

Improvements

  • Smoother animations - Auto-boost refresh rate increased from 40 Hz to 60 Hz.
  • Faster touch response - Button debounce reduced from 200ms to 50ms.
  • More reliable NTP sync - Retry attempts increased from 10 to 30; SNTP client restarted on failure.
  • Metrics API uses ArduinoJson - Proper JSON escaping for metric names/labels.
  • Code cleanup - ~50 lines of redundant forward declarations removed.

Breaking Changes

  • Timezone setting format - Old GMT offset dropdown replaced by region selector. Existing configs auto-migrate.
  • Touch gesture timing - Short press threshold reduced from 1000ms to 500ms. Medium press (500ms-1s) now toggles LED.