Open Source · Emily.Clock

Built for my daughter.
Runs .NET on a microcontroller.

Emily.Clock is a custom nightlight clock I built as a personal project — WiFi-connected, web-configurable, and running entirely on .NET nanoFramework and CCSWE libraries.


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 services
CCSWE.nanoFramework.ConfigurationPersistent configuration with file-system backend
CCSWE.nanoFramework.WebServerWeb UI and REST API endpoints
CCSWE.nanoFramework.MdnsServerService discovery as emily-clock-{serial}.local
CCSWE.nanoFramework.DhcpServerAccess point mode for initial WiFi setup
CCSWE.nanoFramework.NeoPixelNightlight and indicator LED control
Explore the library collection →

Browse the source on GitHub

MIT licensed. Includes 3D-printable case files, hardware notes, and the full application source.

View on GitHub