Stratum-1 Time Server Built From Scratch-GNSSTimeServer
-
WiFi enabled, GNSS fed, NTP/RDATE server based on ESP8266/ESP32 and Arduino
🎖️ Featured by Hackaday
🎖️ Selected for Maker Faire Rome 2023
Functionalities:
- Internal RTC synched from GNSS (Global Navigation Satellite System) satellites constellation (currently GPS and BeiDou; backed by CR2032 battery)
- RTOS multi-tasking (when used with ESP32); core tasks (GNSS synching, Clock updating, processing NTP/RFC868 requests) running with a higher priority than common tasks (display update, PPS led blinking, web page serving)
- Rich dashboard with information about MCU, RTC, GNSS, WiFi (uptime, free heap, minimum heap, temperature, version, ip, mac address, network name, network type, signal strength, timestamp lat, long, lock status, sats, precision, etc)
- Highly optimized web page (minimalistic, embedded graphics, gzip-compressed - Python conversion/compression script supplied), requiring a password for critical functions
- Over-The-Air (OTA) Web Based firmware upgrade
- Dual voltage powered
- Backup battery for the whole unit (18650)
- NTP and RDATE (RFC868) protocols supported
- WiFi functionality as a client or access point
- Syslog logging
- Configuration webpage for WiFi and Syslog, saving to persistent storage (LittleFS)
- Informative display with a timestamp, satellites in view, accuracy, WiFi server, IP address
- Dual function button, short press switch information on display, long press disables WiFi
- Status at a glance, with dedicated 5mm LEDs for GPS lock, PPS signal, and WiFi status, as well as visible internal leds for charging and GPS module statuses
- Yellow led will be on or off to indicate respective WiFi status
- Green led will blink/pulsate at different rates to indicate a lock is being acquired and stay steady green when locked
- Red led will blink once a second once lock is acquired, in sync with the PPS signal
Note
Please note that some functionalities are available only on ESP32, due to either ESP8266 limitation or the functionality not being backported yet.
Parts list:
- Amica NodeMCU (ESP8266 / ESP-12) or ESP32Duino (ESP32-WROOM-32)
- DS3231 RTC
- Neo-6m V2 or ATGM336H GPS
- 1.3" SH1106 OLED Display
- For mains powered:
- Hi-Link 5V/3W
- Mini-360 DC-DC Buck converter
- TP4056 Module
- 18650 battery holder
- For power adapter powered:
- 18650 battery shield
- 5.5mm x 2.1 mm or any other suitable socket
- Red, Green and Yellow LEDs
- Resistors (150, 100 and 150 Ohms respectively for above leds)
- Switch key and momentary push button
- 0.5A/230v fuse
- 10D561K varistor
New dashboard screenshot:
Check also the Dual Display PIR Enabled branch option: https://github.com/Montecri/GPSTimeServer/tree/Dual-Display
Several DS3231 modules being sold today contain a hazardous design flaw in which it supplies a voltage to the battery cradle regardless if it came with a rechargeable battery or not. If it came with a CR2032 battery (non-rechargeable) the consequence is that it will swell, explode, or worse. If it came with a LIR2032 battery (rechargeable), the module is fed with 5v will generate an unsafe charging voltage for that battery.
There are workarounds for that so you don't need to toss your module away, the most popular being removing a diode and/or resistor.
There's a long discussion on the thread below about the root cause and possible fixes:
https://forum.arduino.cc/t/zs-042-ds3231-rtc-module/268862/33
Libraries:
- paulstoffregen/Time@^1.6
- makuna/RTC@^2.3.5
- mikalhart/TinyGPSPlus@^1.0.3
- olikraus/U8g2@^2.28.8
- arcao/Syslog@^2.0.0
Source code based on:
Contributions from:
@mmarkin @sjthespian
https://www.linkedin.com/pulse/iot-maker-tale-stratum-1-time-server-built-from-scratch-monteiro/



