Satellite Clock is an LED word clock that displays time using illuminated words instead of digital digits. The device automatically synchronizes with GPS satellites for precise timekeeping and falls back to NTP over WiFi when GPS is unavailable. It features a web-based configuration interface for easy setup and customization.
- Dual Time Source: Primary GPS synchronization with NTP WiFi fallback
- LED Word Display: Time displayed using illuminated words (hours and minutes)
- Web Configuration Interface: Easy setup via browser dashboard
- Automatic Time Updates: Daily synchronization at 1:00 AM
- Customizable Schedule: Configure on/off times for automatic LED control
- Timezone Support: UTC offset configuration
- Real-time Monitoring: Satellite count and connection status via web interface
- ESP32 WROVER Board (or compatible ESP32 with sufficient GPIO pins)
- GPS Module connected to Serial2
- LEDs for word display (connected to specific GPIO pins)
- WiFi Connection for initial time sync and web interface
- Wooden box frame (optional, for aesthetic purposes)
The project uses 21 GPIO pins for LED control:
- Hour LEDs: Pins 33, 26, 13, 2, 1, 5, 25, 27, 12, 17, 16
- Minute LEDs: Pins 3, 23, 19, 21, 18, 22, 0
- Special Indicators: Pin 32 (midday), Pin 14 (midnight), Pin 4 (hour indicator)
- Connect your GPS module to ESP32 Serial2
- Wire LEDs to the specified GPIO pins
- Power the ESP32 board
- Install PlatformIO in VS Code
- Clone this repository:
git clone https://github.com/SilvaUnCompte/satellite-clock.git cd satellite-clock - Build and upload to your ESP32:
pio run --target upload
- Upload the web interface files:
pio run --target uploadfs
- The device creates a WiFi access point on first boot
- Connect to the ESP32's WiFi network
- Open your browser and navigate to the device's IP address
- Configure your WiFi credentials and preferences:
- SSID & Password: Your WiFi network credentials
- UTC Offset: Your timezone offset from UTC
- Operation Hours: Set when LEDs should be active (e.g., 7.0 to 23.0 for 7 AM to 11 PM)
Access the web dashboard to:
- Configure WiFi credentials
- Set timezone (UTC offset)
- Define operating hours
- Test WiFi connectivity
- Monitor GPS satellite count
- Update time synchronization
- The clock automatically displays the current time using illuminated words
- Updates displayed every 10 seconds
- Synchronizes with GPS satellites when available (priority)
- Falls back to NTP over WiFi when GPS signal is weak
- Automatically updates time daily at 1:00 AM
- Respects configured on/off schedule
- TinyGPSPlus: GPS data parsing
- ESP Async WebServer: Web interface
- AsyncTCP: Asynchronous TCP communication
- SPIFFS: File system for web assets
The system intelligently manages time sources:
- Primary: GPS satellites (when satellite available)
- Fallback: NTP over WiFi
- Offline: Maintains time using ESP32's internal clock
- Word-based time display
- Automatic brightness control based on schedule
- Individual LED control for precise word illumination
All settings are stored in ESP32's NVRAM and persist across reboots:
| Setting | Description | Default |
|---|---|---|
ssid |
WiFi network name | - |
password |
WiFi password | - |
utc |
Timezone offset from UTC | 0 |
on_off |
Enable/disable LEDs | 1 (enabled) |
on_start |
LED start time (24h format) | 0.0 |
on_end |
LED end time (24h format) | 24.0 |
The web server provides REST API endpoints:
GET /- Main dashboardGET /get-config- Retrieve current configurationGET /update-config- Update configuration parametersGET /update-time- Force time synchronizationGET /get-connection-status- Check WiFi statusGET /get-satellite-count- Get GPS satellite count
- Check GPS module connection to Serial2
- Verify WiFi credentials in web interface
- Ensure device has internet access for NTP
- Check if device is connected to your WiFi network
- Look for device IP in router's DHCP client list
- Try connecting directly to device's access point
- Verify GPIO pin connections
- Check power supply capacity for all LEDs
- Review pin configuration in
LEDManager.cpp
Contributions are welcome! Please feel free to:
- Report bugs or issues
- Suggest new features
- Submit pull requests
- Improve documentation
This project is open source. Please check the repository for license details.
- SilvaUnCompte - Initial work and development
Note: The LED arrangement and word patterns are optimized for French time representation but can be easily adapted for other languages.