Releases: Keralots/SmallOLED-PCMonitor
Release list
v1.6.1
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.96inchimage. 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
clockStyledropdown. - Asset URLs are cache-busted with a version query so browsers always fetch the matching CSS/JS after an update.
v1.6.0
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.96inchimage. 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
clockStyledropdown. - 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
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.96inchimage. 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 2inuser_config.h, or flash the dedicated1.54inchbuild. 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_ENABLEDis 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.has 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
2is 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 type0(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.mdandSTRUCTURE_How_to_modify.mdto 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
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 type2. Updated the comments inuser_config.h,display.handmain.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
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
curlcommand — 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 / onGET /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 animationGET /api/status— read the current display/mode state as JSONGET /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-096andoled-13) instead of editingDEFAULT_DISPLAY_TYPEinuser_config.hbefore each build. create_firmware.pynow compiles the matching variant itself and can build both OLED variants in a single run.- Related commits:
7182993,0338b5a
v1.5.4
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.YYYYdate format option, for example09.05.2026(Requested in: #45 ) - The new format is selectable from the web UI alongside the existing options:
DD/MM/YYYYMM/DD/YYYYYYYY-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_MSsafety window to avoid cutting off slow user-configured animations - Related commits:
8d6ed3a,eb9076f
v1.5.3
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-hoursetting 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/PMindicators for animated clock styles when 12-hour format is enabled - Large Clock keeps its existing layout, with the
AM/PMindicator 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 AM11:59 -> 12:00 PM12:59 -> 01:00 PM23:59 -> 12:00 AM
Touch-Gated OLED Off + Temporary Wake
- Display brightness
0now means true OLED off, but only on builds withTOUCH_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
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
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 0inuser_config.h) - Requires
min_spiffs.csvpartition table (already configured inplatformio.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_PASSWORDinuser_config.hif 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 provisioningsrc/network/ble_setup.h- BLE setup header and declarations
Configuration Changes
user_config.h: AddedBLE_SETUP_ENABLED,BLE_DEVICE_NAME,AP_PASSWORDoptionsconfig.h: AddeddeviceName[32]field to Settings structsettings.cpp: Added device name persistence (NVS key:deviceName)
v1.5.0
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_INTERFACEswitch to use SPI instead of I2C. Configurable SPI pins inuser_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- Usesstrncpywith 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.