ESP32 DoomsDay Firmware 4.2.6 — Phase 4.2
Phase 4.2 is a UI/UX and connectivity overhaul on top of the app platform, personalization system, and serviceability foundation built across the 3.x and early 4.x series for the ESP32-S3 Super Mini V2. The two headline additions are a native, on-device App Store that installs and updates apps straight from the web catalog over Wi-Fi, and online firmware updates that fetch a validated release without ever touching an SD card by hand.
Hardware target
- ESP32-S3FH4R2: 4 MB QIO flash and 2 MB QSPI PSRAM
- 128 × 128 GC9107/ST7735-compatible TFT
- six-button D-pad, SELECT, and BACK input
- AHT20 and BMP280 environmental sensors
- FAT32 microSD storage
- GPIO7 battery-divider ADC and GPIO45 activity LED
- expansion header: 15, 14, 12, 13, 11, GND, 3.3V
- ATGM336H GPS: module TX → GPIO14, module RX → GPIO15
The authoritative pin and timing definitions are in include/config.h. Read CLAUDE.md before firmware work and APP_DEVELOPER_GUIDE.md or GAME_CONVENSIONS.md before creating an SD application.
Phase 4.2 highlights
- App Store: a native system screen browses the live web catalog as a readable four-row list with explicit
GET,UPDATE, andREADYstates. A rolling previous/current/next page cache makes later catalog pages appear as one continuous list without repeated loading screens; serialized background network work prevents catalog, icon, and weather TLS sessions from competing for ESP32 memory. Selecting an app opens a full-screen detail view with a wrapped store summary and contextual Install/Update/Remove actions. Transfers keep phase, bar, percentage, byte count, and power warning in separate rows. - Online firmware updates: Settings → Firmware Update → Online Update is the first/default route. It checks automatically with an animated, non-blocking loading screen, wraps current/update/error messages to the display, and, if newer, downloads the
.binstraight into the same/OTA-Firmware-Update/folder the manual SD path already used before handing off to the independently bootable recovery updater. See App Store & online updates for the full flow and the small public API behind both features. - Settings overhaul: the landing screen now groups preferences into Appearance, Connections, Time & Weather, Storage, and Firmware Update, with live summaries for the active theme, radios, clock/weather source, SD state, and installed firmware. Consistent chevrons, switches, adjustment arrows, compact action rows, selection restoration, and bounded scrolling make the full hierarchy readable on the 128 × 128 display.
- Chromatic 3D power identity: startup now travels through a perspective star tunnel and holographic grid into a rotating core, particle detonation, extruded DOOMSDAY wordmark, and a held by Eftakhar creator signature. Soft power-off reverses the composition into a core collapse and guaranteed black panel frame before deep sleep; any device button still skips the boot sequence for fast development cycles.
- Apps are real Lua now. The API 3 app contract runs actual Lua 5.4 (
main.lua), packaged as.eftarchives viatools/build_eft.py, with a proper sprite/streaming-background graphics system, a permissioned service API (sensors, system stats, Wi-Fi results, radio channel, and read-only internet fetches vianet.*), and two independent persistence stores (kvand a 2048-bytesaveblob) per app. The 65 reference apps inexamples/appsinclude a live-data instrument suite — Flight Radar (ADS-B), Weather Station, Spectrum Analyzer, and Signal Compass — built on that internet API. See App & game development for the complete language and packaging reference. - Personalization now spans 80 themes and 6 hand-authored icon art packs (Candy Gloss, Vivid Flat, Retro LCD, Neon Wire, Pastel Soft, Gem Bright), each with its own icon-focus animation choice (None, 3D Tilt, Bounce, Glow Pulse, Spin In, Lift). 13 home/lock screen styles are available, from the original Classic and Cards layouts through Aurora Lock, Widget Lock, Orbit Lock, Glass Lock, Focus Lock, Metro Lock, Pulse Wave, and Neon Horizon.
- WiFi Security Lab consolidates the device's wireless-audit tools into one guided menu: inventory and rogue-AP review, router service scanning, channel congestion and signal stability checks, deauth/attack monitoring with frame capture, and controlled, clearly-labeled active tools (WPA handshake and PMKID capture, SSID cloning, beacon spam, Evil Twin) for authorized testing on networks you own or have permission to test.
- Web Portal and File Manager remain the browser-facing and on-device answers to bulk data movement — multi-file upload/download, folder navigation, and package (
.eft) install detection straight from a browsed file. - Expansion accessories: the header auto-probes and supports NRF24L01, CC1101, SX127x LoRa, MFRC522 RFID, generic SPI flash, MAX6675 thermocouple, ADXL345 accelerometer, W5500 Ethernet, BMP/BME280, MPU6050, SSD1306, generic I2C devices, NMEA GPS, and a guarded RGB light sensor mode — see Hardware & expansion.
Website/is the companion Next.js/MongoDB product platform: commercial pages, a searchable App Store catalog with screenshots, a firmware release center, owner/developer documentation, accounts, developer submissions, admin review and publishing, support, and GitHub-backed binary storage.
Build firmware
PlatformIO redirects its build output to a short path outside the repository to avoid Windows MAX_PATH failures with some vendored headers:
& "$env:USERPROFILE\.platformio\penv\Scripts\platformio.exe" run -e esp32-s3-supermini-v2
The main image is produced at:
C:\pio-build\doomsday\esp32-s3-supermini-v2\firmware.bin
Install recovery once, then use SD or online updates
The current partition table gives the device a 2,424,832-byte main application partition and an independent 655,360-byte recovery partition at 0x260000, which is what makes both SD-card and online firmware updates power-loss-safe on a 4 MB flash device that can't hold two full copies of the firmware. Perform the one-time USB migration with the included script:
.\tools\install_ota_recovery.ps1 -Port COM5
Replace COM5 with the device's port. This installs the partition table, current main firmware, and the small recovery updater. Neither the SD update path nor Online Update will proceed until this one-time operation has succeeded.
For later updates, either:
- open Settings → Firmware Update → Online Update and let the device fetch and stage the latest release itself, or
- copy the main application
.bininto /OTA-Firmware-Update/ on the SD card yourself and open Settings → Firmware Update → From SD Card.
Both paths converge on the same validated install: the updater checks the ESP image header, ESP32-S3 target, app descriptor, file size, recovery availability, and full image completion before selecting the new main image. See Firmware update & recovery for what to do if an update is interrupted.
Build and test apps
python tools/build_eft.py --all
python tools/test_app_sdk.py
python tools/stress_lua.py examples/apps/<slug> --frames 6000 --seed 1
Copy desired .eft files from dist/apps to a user-managed SD directory, then install them through the device File Manager — or publish them and let devices pull them from the App Store instead. Packages are deterministic ZIP-STORE archives; do not create them manually. See App & game development for the full guide, and GAME_CONVENSIONS.md at the repository root for game-specific craft notes and known bug classes worth avoiding.
Offline maps
Use tools/offline_map_builder.py to create named DMT2 packages. Place each area folder below /Offline-Map/map list/ on the SD card. GPS Navigator can select a package manually or choose the highest-detail package covering the current fix. See Offline maps.
Documentation
- CLAUDE.md — complete maintainer architecture and contracts
- APP_DEVELOPER_GUIDE.md / GAME_CONVENSIONS.md — complete Lua app/game tutorial and reference
- HARDWARE_DEVELOPER_DOCUMENTATION.md — electrical and physical design
- OFFLINE_MAP_GUIDE.md — map package creation and GPS use
- Website/README.md — website deployment, operations, security, and go-live
- App Store & online updates — the device-facing API behind both online features