ESP32-based word clock firmware with extensive IoT capabilities, featuring Home Assistant integration, OTA updates, and a comprehensive web interface.
- Download the latest release binary from the GitHub releases page.
- Flash the ESP32:
esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 \ write_flash -z 0x1000 wordclock-v26.1.5.bin
- Power-cycle the clock and connect to the temporary Wi-Fi network
Wordclock_APto finish setup.
- β Actively developed - Regular updates and improvements
- β Stable releases - Production-ready firmware available
- β Auto-updates - Nightly firmware checks (configurable)
β οΈ Breaking changes - Possible between major versions
- π Multi-language support: Dutch, English (extensible)
- π Multiple grid variants: 11x11, 20x20, 50x50 layouts
- π¨ RGBW LEDs: Full color customization
- β¨ Smooth animations: Classic and smart animation modes
- π Night mode: Scheduled dimming or display off
- π‘ WiFi: WPA2 with configuration portal
- π Home Assistant: Full MQTT discovery integration
- π OTA Updates: Wireless firmware and UI updates
- π Web UI: Complete configuration interface
- π Logging: File-based logs with retention
- β° NTP Time Sync: Automatic timezone support
- π Authentication: Web UI and MQTT security
- π― Sell Mode: Demo display (10:47)
- π Diagnostics: System health monitoring
- π§ Customizable: Extensive configuration options
- ESP32 development board (4 MB flash recommended)
- WS2812B or SK6812 RGBW LED strip
- 5V power supply (3-5A depending on LED count)
- Optional: Light sensor for auto-brightness
- PlatformIO (recommended) or Arduino IDE
- USB cable for initial programming
-
Clone the repository:
git clone https://github.com/lumetric-io/Wordclock.git cd Wordclock -
Configure:
# Copy example configuration cp include/secrets_template.h include/secrets.h # Edit secrets.h with your settings
-
Build and upload:
# Using PlatformIO pio run -t upload # Upload filesystem pio run -t uploadfs
-
Connect:
- Connect to
Wordclock_APWiFi network - Navigate to http://192.168.4.1
- Configure WiFi credentials
- Clock will restart and connect
- Connect to
-
Access:
- Web UI: http://wordclock.local
- MQTT: Configure in web UI settings
For detailed setup instructions, see DEPLOYMENT.md.
Refer to docs/setup/BuildInstruction.md for wiring notes. At minimum you need:
- ESP32 DevKit or equivalent (4 MB flash recommended)
- 5 V power supply tied to
VINandGND - NeoPixel/WS2812 LED matrix connected to GPIO
D4(default)
LED Mounting Pattern:
- Start at upper-right corner
- Skip the first LED (index 0)
- Leave four LED gaps when turning corners
See LED_MAPPING.md for detailed grid layouts.
- Pre-built binary: Each tagged release publishes
wordclock-<product>-<version>.binplus afirmware.jsonmanifest that OTA clients consume. - Local build: Use PlatformIO (
platformio run -t upload) after cloning the repository and configuring secrets (see below). - OTA bundles: Static dashboard assets live under
data/; they are uploaded withplatformio run -t uploadfsor via the web-based upgrader.
- Copy
include/secrets_template.htoinclude/secrets.hand set Wi-Fi credentials and optional MQTT details. - Duplicate
upload_params_template.iniasupload_params.inifor per-device OTA and serial upload parameters. - Adjust grid layout defaults in
src/wordclock_system_init.cppif you ship with a non-default language layout.
- Access the dashboard at
http://wordclock.localor by IP to adjust brightness, animations, and scheduling. - The admin UI exposes Wi-Fi reset, password management, manual firmware upload, and live logs.
- Time synchronizes automatically via NTP; no RTC battery is required.
- Nightly OTA checks occur at 02:00 local device time. Override the manifest URL in
src/config.hif you host your own updates.
| Path | Purpose |
|---|---|
src/ |
Core firmware modules (main.cpp, subsystems, grid layouts) |
data/ |
Web dashboard and admin static assets (served from SPIFFS) |
include/ |
Public headers, secrets template, feature flags |
lib/ |
External and custom reusable libraries |
tools/ |
Utility scripts such as OTA deployment helpers |
docs/ |
Comprehensive documentation (release, development, technical, setup) |
Key modules to inspect first:
src/main.cppbootstraps networking, OTA, web, and display subsystems.src/grid_layout.cppcontains the available word-clock layouts and helper lookups.src/wordclock_system_init.cppwires settings, authentication, and web routes together.
Comprehensive documentation is organized by topic:
- π Architecture Overview - System design and components
- π Deployment Guide - Installation and configuration
- π Home Assistant Integration - MQTT setup
- π‘ LED Mapping - Grid variant system
- π Troubleshooting - Common issues
- π οΈ Development Guide - Building and contributing
- π API Reference - Code documentation (generate with Doxygen)
- π€ Contributing Guidelines - How to contribute
- π Changelog - Release history
- QuickStart Guide - End-user setup walkthrough
- Build Instructions - Physical assembly and wiring
- Release Pipeline β - Creating and managing releases
- Full Documentation Index - Complete documentation overview
The word clock provides full MQTT discovery for Home Assistant:
Entities:
- Light control (brightness, color)
- Animation toggle
- Night mode settings
- System sensors (version, IP, RSSI)
- Diagnostic buttons
See MQTT_INTEGRATION.md for setup guide.
Key settings in src/config.h:
FIRMWARE_VERSION- Current versionDATA_PIN- LED strip data pin (default: GPIO 4)DEFAULT_BRIGHTNESS- Initial brightness (0-255)CLOCK_NAME- Device nameTZ_INFO- Timezone string
See docs/DEPLOYMENT.md for full configuration reference.
# Install dependencies
pio lib install
# Build
pio run
# Run tests
pio test -e nativeWe welcome contributions! Please see CONTRIBUTING.md for:
- Code style guidelines
- Pull request process
- Development workflow
# Unit tests (native)
pio test -e native
# Integration tests (on-device)
pio test -e esp32_test
# All tests
pio testClock not connecting to WiFi:
- Hold reset for 10 seconds to clear credentials
- Connect to
Wordclock_APnetwork - Reconfigure WiFi
LEDs not lighting:
- Check
DATA_PINin config.h - Verify power supply voltage (5V)
- Test with single LED first
MQTT not connecting:
- Verify broker settings in web UI
- Check network connectivity
- Review logs at http://wordclock.local/logs
For more issues, see TROUBLESHOOTING.md.
We use Semantic Versioning:
- Major: Breaking changes
- Minor: New features (backwards compatible)
- Patch: Bug fixes
See CHANGELOG.md for release history.
Getting Help:
- π Report a bug
- π‘ Request a feature
- β Ask a question
Contributing:
Bug reports and feature requests are welcome in the issue tracker. Please include device details, firmware version, and logs from /logs.html where possible. Pull requests should target the main branch and include relevant tests or reproduction steps.
See CONTRIBUTING.md for detailed guidelines.
- ESP32 Arduino Core
- WiFiManager by tzapu
- ArduinoJson by Benoit Blanchon
- Adafruit NeoPixel Library
- Home Assistant Community
To be determined. Until then, assume the code is proprietary to the project maintainers.
Made with β€οΈ for the DIY community
