Raspberry Pi NTP Server
Configurarea Raspberry Pi ca server NTP folosint NEO-7M
Un server NTP asigura sincronizarea corecta a orei pentru toate dispozitivele dintr-o retea, prevenind erori în loguri, autentificari sau servicii care depind de timp precis. Folosind un modul GPS cu PPS, un Raspberry Pi poate deveni o sursa Stratum‑1 foarte stabila și independenta de internet. Acest proiect prezinta configurarea unui astfel de server NTP simplu și fiabil pentru uz local.
Configurare UART și activare PPS
Pe Raspberry Pi, consola seriala este activa implicit, ceea ce blocheaza utilizarea interfetei UART pentru modulul GPS. Pentru a putea folosi portul serial și semnalul PPS, este necesara dezactivarea consolei și activarea manuala a suportului UART și PPS.
Dezactivarea consolei seriale
Pentru dezactivarea consolei seriale editam fisierul /boot/firmware/cmdline.txt de unde stergem segmentul care contine consola, de obicei ceva de forma:
console=serial0,115200
Lasam restul liniei pe un singur rand, exact cum era.
Verificarea activarii UART
Editam fisierul /boot/firmware/config.txt unde ne asiguram ca exista:
[all]
enable_uart=1
Activarea modulului PPST
Incarcam modulul PPS executand:
echo 'pps-gpio' >> /etc/modules
Pentru configurarea pinului PPS (GPIO 18) editam din nou fisierul /boot/firmware/config.txt iar in partea de jos adaugam:
dtoverlay=pps-gpio,gpiopin=18
Aceasta indica kernelului ca semnalul PPS este conectat la GPIO 18.
Dupa ce efectuam aceste modificari, oprim systemul in vederea conectarii modului de GPS.
Conectarea modului GPS
Dupa dezactivarea consolei seriale și activarea suportului PPS, interfața UART a Raspberry Pi devine libera pentru comunicarea cu modulul GPS. Conectarea se face direct pe pinii GPIO, folosind alimentarea de 5V, masa comuna și liniile de date RX/TX, plus semnalul PPS.
Schema de conectare

- Conectam pinul de 5V al Raspberry Pi la pinul de alimentare al modulului GPS.
- Conectam GND la masa modulului GPS.
- Conectam TX0 de pe Raspberry Pi la RX al modulului GPS (Pi transmite → GPS primește).
- Conectam RX0 de pe Raspberry Pi la TX al modulului GPS (GPS transmite → Pi primește).
- Conectam GPIO 18 la pinul PPS al modulului GPS, conform configurarii din config.txt
Test pentru UART si PPS
Dupa conectarea modulului GPS si configurarea UART/PPS, putem verifica functionarea celor doua interfete direct din sistem.
Test UART (NMEA)
Pentru a verifica daca modulul GPS transmite date NMEA prin UART:
cat /dev/serial0
to be added
to be added
to be added
Acest rezultat confirma faptul ca Pi-ul primeste date GPD de la modul Daca totul este configurat corect, ar trebui sa apara siruri NMEA. In cazul in care nu apare asemenator mai sus, verificati conexiunile RX/TX si setarile UART.
Instalare unelte PPS si testare
Pentru testarea semnalului PPS, instalati pachetul necesar:
- apt install pps-tools
Dupa instalare, verificam semnalul PPS:
ppstest /dev/pps0
to be added
to be added
to be added
Un rezultat corect va afisa impulsuri detectate la fiecare secunda.
Configurare gpsd
Instalam pachetele necesare pentru gestionarea modulului GPS:
- apt install gpsd gpsd-clients
Startup config pentru gpsd
Editam fisierul de configurare gpsd:
# nano /etc/default/gpsd
START_DAEMON="true"
DEVICES="/dev/serial0 /dev/pps"
GPSD_OPTIONS="-n"
USBAUTO="false"
GPSD_SOCKET="/var/run/gpsd.sock"
- START_DAEMON -> Porneste automat serviciul gpsd la boot. Daca este "false", gpsd nu se lanseaza singur.
- DEVICES -> Aceasta linie indica gpsd sa deschida doua dispozitive simultan
- /dev/serial0 → fluxul NMEA provenit de pe UART (datele GPS clasice: GGA, RMC, sateliti etc.)
- /dev/pps → semnalul PPS hardware folosit pentru sincronizare precisa la nivel de secunda
- GPSD_OPTIONS -> Porneste gpsd chiar daca nu exista clienti conectati. Fara "-n", gpsd asteapta un client inainte sa initializeze modulul GPS.
- USBAUTO -> Dezactiveaza detectarea automata a dispozitivelor GPS USB; necesar cand folosim un modul pe UART.
- GPSD_SOCKET -> Definește socket-ul UNIX prin care aplicatiile (cgps, chrony etc.) comunica cu gpsd.
Repornim serviciul executand:
- service gpsd restart
Testare gpsd
Testam functionarea modulului GPS:
# cgps -s
to be added
Configurarea serverului NTP
Acest server foloseste un modul GPS cu suport PPS pentru a furniza timp de inalta precizie, transformand sistemul intr-o sursa NTP stratum 1. In pasii urmatori configuram Chrony astfel incat sa foloseasca exclusiv GPS si PPS ca referinte de timp.
Instalare Chrony
Inainte de instalare ne asiguram ca sistemul foloseste un singur serviciu NTP (Chrony va deveni sursa principala).
- apt install chrony
Verificarea surselor NTP initiale
# chronyc sources
to be added
- 32;# chronyc tracking
to be added
chronyc sources afiseaza sursele NTP publice pe care sistemul le foloseste implicit, inainte de configurarea GPS‑ului. chronyc tracking arata ca sistemul functioneaza momentan ca stratum 3, fiind doar un client NTP obisnuit.
Editare configuratie Chrony
In aceasta etapa eliminam sursele NTP publice si configuram Chrony sa foloseasca exclusiv GPS (NMEA) si PPS ca referinte de timp. Ajustam parametrii de corectie initiala si stabilim PPS ca sursa principala, astfel incat serverul sa poata functiona ca stratum 1. Rezultatul final este un server NTP autonom, sincronizat direct din semnal GPS cu precizie sub‑microsecunda.
# nano /etc/chrony/chrony.conf
makestep 0.1 -1
initstepslew 1.0 GPS
# GPS serial time (NMEA)
refclock SHM 0 delay 0.2 refid GPS poll 4 noselect
# PPS precise time
refclock PPS /dev/pps0 refid PPS lock GPS poll 4 prefer
makestep permite corectii mari de timp atunci cand diferenta este prea mare pentru slew. Modificam din initialul "1.0 3" pentru a permite corectii oricand, cu limita mai mica. initstepslew corecteaza timpul la boot daca diferenta fata de GPS este mai mare de 1 secunda.
refclock SHM (NMEA)
NMEA este fluxul de timp citit din GPS prin gpsd și expus către Chrony printr-un segment SHM (shared memory). Acest semnal conține ora completă, dar are o întârziere naturală de aproximativ 200 ms și o precizie relativ slabă. Îl folosim cu noselect pentru că nu vrem ca NMEA să fie sursa principală de timp; rolul lui este doar să ofere context temporal pentru PPS, astfel încât impulsul PPS să poată fi „legat” corect de ora GPS.
refclock PPS
PPS este semnalul hardware de precizie foarte mare (sub‑microsecundă), generat o dată pe secundă de modulul GPS. Spre deosebire de NMEA, PPS nu conține ora, ci doar impulsul exact, motiv pentru care îl „blocăm” pe GPS (lock GPS) pentru a-i oferi contextul temporal. Îl marcăm ca prefer deoarece PPS trebuie să fie sursa principală de sincronizare, fiind cea mai precisă referință disponibilă.