The project
Why I built it
I built Emily.Clock for my daughter. She wanted a nightlight she could control herself — specific colors, specific brightness, something that knew when it was bedtime and when it was time to wake up. Nothing off the shelf did exactly what she wanted, so I built it.
The result is a real embedded application: WiFi-connected, web-configurable, with a REST API and mDNS service discovery. It runs the same CCSWE.nanoFramework libraries I develop and maintain — which means it also serves as a proof that those libraries work in a real device with real requirements.
What it does
A proper embedded application
Nightlight & indicators
Seven nightlight colors and five brightness levels. Sun and moon LEDs respond to configured bedtime and wake times.
Time & sync
Syncs time over WiFi. Falls back to the onboard DS3231 RTC when WiFi isn't available. No wrong clocks.
Web-configurable
Full web UI and REST API for remote configuration. Discoverable via mDNS as emily-clock-{serial}.local.
Hardware
What's inside
Built on a LILYGO TTGO T4 V1.3 — an ESP32 board with an integrated display. Audio feedback through a MAX98357A amplifier. A DS3231 RTC module keeps time when WiFi is offline.
- LILYGO TTGO T4 V1.3 (ESP32 + integrated display)
- MAX98357A I2S audio amplifier
- DS3231 real-time clock module
- WS2812B RGB LEDs for nightlight and indicators
- 3D-printable case — Fusion 360 and STEP files in the repo
Built with CCSWE.nanoFramework
The stack in practice
Emily.Clock uses the full CCSWE.nanoFramework library stack assembled into a single device application. It's the clearest demonstration of how these libraries work together in practice.
CCSWE.nanoFramework.HostingDevice startup, DI container, hosted servicesCCSWE.nanoFramework.ConfigurationPersistent configuration with file-system backendCCSWE.nanoFramework.WebServerWeb UI and REST API endpointsCCSWE.nanoFramework.MdnsServerService discovery as emily-clock-{serial}.localCCSWE.nanoFramework.DhcpServerAccess point mode for initial WiFi setupCCSWE.nanoFramework.NeoPixelNightlight and indicator LED controlBrowse the source on GitHub
MIT licensed. Includes 3D-printable case files, hardware notes, and the full application source.
View on GitHub