venerdì 6 maggio 2016

NTP Server con Ublox M8T e Arduino Yun

Avevo gia' fatto qualcosa di simile, ma in questo esempio mostrero' come usare una Arduino Yun ed un modulo Ublox M8T per creare un server NTP che utilizza il segnale GPS per avere l'informazione del tempo




Prima di tutto si deve collegare l'Ublox alla Yun mediante la porta USB. Se si effettua tale operazione da dmesg si vede che il dispositivo e' riconosciuto ma non viene creata la porta seriale corrispondente. Questo e' dovuto al fatto che Linino e' un sistema Linux ridotto all'osso e pochi moduli del kernel sono montati di default

Si deve quindi scaricare il pacchetto kmod.usb-acm mediante le seguenti istruzioni

opkg update
opkg install kmod-usb-serial kmod-usb-acm

a questo punto viene creata una porta seriale virtuale in /dev/ttyACM0
Si scarica e si installa quindi il demone gpsd

opkg update
opkg install gpsd gpsd-clients ntpdate


e si attiva mediante il comando
gpsd /dev/ttyACM0 -n -F /var/run/gpsd.sock
per verificare se il flusso dati proveniente dal GPS e' interpretato in modo corretto si puo' digitare
cgps -s



si installa quindi il server ntp
opkg update
opkg install ntpd ntp-utils

e si modifica il file di configurazione in /etc/ntp.conf aggiungendo queste linee
-----------------------------------------
server 127.127.28.0 minpoll 4 maxpoll 4 
fudge 127.127.28.0 time1 0.0 refid GPS 
server 127.127.28.1 minpoll 4 maxpoll 4 prefer 
fudge 127.127.28.1 refid PPS
-----------------------------------------

e si lancia il servizio
/etc/init.d/sysntpd disable
/etc/init.d/ntpd enable
/etc/init.d/ntpd start

a questo punto digitando
ntpq -p
si vedra' apparire il GPS tra la sorgente delle fonti dati (e visto che sara' anche con quello di minor latenza) sara' il preferito. La Yun e' preconfigurata per usare il tempo UTC (come quello del GPS) e non ha di default configurate le timezone