The Raspberry Pi, when isn't connected to the Internet can not synchronize its clock (date and time). So for a Raspberry Pi isolated synchronize the date and time can be achieved by GPS satellite synchronization. In this example we use a GPS receiver with a USB connection.
Any GPS should head, insofar as it sending data to the NMEA standard. The time and date are provided in the frame GPRMC
, we use a model VK-162, available from Banggood
Then check if it sends back NMEA sentences, i.e. using cat: (CTRL-C to quit)
cat /dev/ttyACM0 $GPRMC,191745.80,V,,,,,,,160314,,,N*7B $GPVTG,,,,,,,,,N*30 ...
For your information, the GPRMC
frame is decoded by this way.
$GPRMC,hhmmss.ss,A,llll.ll,a,yyyyy.yy,a,x.x,x.x,ddmmyy,x.x,a*hh 1 = UTC of position fix 2 = Data status (V=navigation receiver warning) 3 = Latitude of fix 4 = N or S 5 = Longitude of fix 6 = E or W 7 = Speed over ground in knots 8 = Track made good in degrees True 9 = UT date 10 = Magnetic variation degrees (Easterly var. subtracts from true course) 11 = E or W 12 = Checksum
Download the ZIP archive or fetch source code using git:
git clone https://github.com/adamheinrich/gpsdate
To build the project, simply navigate to project's directory and call make:
cd gpsdate make all
Now you can use the gpsdate tool to change your local time. Simply call
sudo ./gpsdate /dev/ttyACM0 Local datetime was: 2014-03-16 20:19:06 (CET) GPS datetime is: 2014-03-16 19:19:07 (UTC) Succesfully updated local time.
For autoupdated daily you need addd line in CRON files CRON
sudo crontab -e
Clock updated every day at 11h30pm, add folowed lines:
30 23 * * * /home/pi/gpsdate/gpsdate /dev/ttyACM0
You can save and quit using CTRL-X, Y and ENTER.