Getting GPS working on a Raspberry Pi
http://blog.retep.org/2012/06/18/getting-gps-to-work-on-a-raspberry-pi/
saving content:
One of the tasks I want to use a Raspberry PI for is to take over the duties of an existing ITX based linux box running my weather station. Now in theory that should be pretty simple as the current setup uses pywws to connect to the station and as that’s written in python it should work.
Now the Raspberry PI has no onboard Real time clock – which means it needs to use an NTP server
to get the time when it starts. Usually you would use the default
settings and allow the PI to connect to thenet for it’s time. Now this
is fine if you have a working net connection but what if you are not
connected to the net? You might be in the field running the PI on
batteries.
As the other projects I have lined up for it is to connect my Meade
LX200GPS telescope to the local network or to work with my (in
prototype) radio telescopes so having an accurate clock is going to be
required.
Now the obvious solution here is to use GPS
as a time source. GPS works by having a constellation of satellites in
orbit and each one carries a highly accurate atomic clock &
broadcast both their current position and the time. A GPS receiver
then receives these signals and, as long as it has enough satellites
and workout where you are by comparing the times from those clocks.
So this article shows how to use A GPS receiver with the Rasperry PI – although these instructions are not specific to the PI.
The hardware
For this experiment I’m using a USB GPS receiver from Maplin – product code A73KF. I bought this several months ago when they had it on special offer for £19.99 – it usually retails for £29.99.
Now it comes with a CD for Windows machines but we don’t need it – as
the majority of GPS receivers I know of use serial & this is no
exception. When plugged in it appears as a serial port.Plug it in and run lsusb
1
2
3
4
5
| pi@raspberrypi:~$ sudo lsusb Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 004: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub |
Using the PI as a GPS Receiver
Now the next step is to get the pi receiving data from the satellites. Now there is a suite of tools available for Linux called gpsd which we’ll install:
1
| pi@raspberrypi:~$ sudo apt-get install gpsd gpsd-clients python-gps |
1
| pi@raspberrypi:~$ sudo gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock |
Viewing whats in the sky & your location
Now GPS doesn’t work indoors – as it needs a clear view of the sky so for this I’ve placed the PI on the window sill. Next I ssh into the pi and run cgps.
1
| pi@raspberrypi:~$ cgps -s |
You should then get the following output:
┌───────────────────────────────────────────┐┌─────────────────────────────────┐ │ Time: 2012-06-18T15:05:10.0Z ││PRN: Elev: Azim: SNR: Used: │ │ Latitude: 51.231848 N ││ 14 43 249 40 Y │ │ Longitude: 0.514014 E ││ 25 75 283 37 Y │ │ Altitude: 132.3 m ││ 2 26 085 31 Y │ │ Speed: 0.0 kph ││ 12 56 070 18 Y │ │ Heading: 0.0 deg (true) ││ 9 19 133 22 Y │ │ Climb: 0.0 m/min ││ 27 09 133 17 Y │ │ Status: 3D FIX (1 secs) ││ 4 17 045 31 Y │ │ GPS Type: ││ 32 05 321 20 Y │ │ Longitude Err: +/- 8 m ││ 29 41 192 18 Y │ │ Latitude Err: +/- 9 m ││ 31 28 304 42 Y │ │ Altitude Err: +/- 27 m ││ │ │ Course Err: n/a ││ │ │ Speed Err: +/- 68 kph ││ │ │ ││ │ │ ││ │ │ ││ │ │ ││ │ │ ││ │ └───────────────────────────────────────────┘└─────────────────────────────────┘Here you can see it’s receiving from 10 satellites and it has the time and your location. The 3D FIX section tells you it has enough data for a 3D fix on your location (i.e. altitude). The Err lines tell you the error in your position. If you leave it running you should see the Err values change every second or so.
Viewing GPS under X-Windows
Now above I showed how the GPS looks from an SSH connection but you
can get a graphical display as well using the xgps client thats also
been installed. Now if you have a monitor connected to the pi simply
open a terminal and run xgps. However as I’ve not got a monitor against
the window I’ve used ssh to connect to it from another machine. To get
this to work you need to add -Y to the ssh command.
1
2
| peter@somehost:~ $ ssh -Y pi@raspberrypi pi@raspberrypi:~$ xgps |
Setting the computer time using GPS
Now we have a working GPS we can now get the PI to use it for setting the time. To do this we need to configure ntp to use the GPS satellites as a time source. Now you should already have ntp installed but if not then you need to install it:
1
| pi@raspberrypi:~$ sudo apt-get install ntp |
1
2
3
4
5
| # gps ntp server 127.127.28.0 minpoll 4 fudge 127.127.28.0 time1 0.183 refid NMEA server 127.127.28.1 minpoll 4 prefer fudge 127.127.28.1 refid PPS |
1
| pi@raspberrypi:~$ sudo service ntp restart |
1
2
3
4
5
6
7
8
9
| pi@raspberrypi:~$ ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== *ns1.luns.net.uk 33.117.170.50 2 u 54 64 7 65.454 2.666 5.800 +resntp-b-vip.lo 127.151.91.34 3 u 45 64 17 55.704 -5.169 8.482 +bart.nexellent. 194.242.34.149 2 u 17 64 17 76.585 -4.271 57.595 +v01.s01.be.it2g 193.190.230.65 2 u 20 64 37 86.464 -2.374 228.460 xSHM(0) .NMEA. 0 l 11 16 377 0.000 144.714 3.026 SHM(1) .PPS. 0 l - 16 0 0.000 0.000 0.000 |
A couple of notes:
You might find that ntp doesn’t connect to the gps at first. It appears that it starts gpsd up without the link to the serial port. What I find I have to do is:
1
2
3
| pi@raspberrypi:~$ sudo killall gpsd pi@raspberrypi:~$ sudo gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock pi@raspberrypi:~$ sudo service ntp restart |
I don’t know why this happens but it’s an issue I’ve yet to solve.
Keine Kommentare:
Kommentar veröffentlichen
comments are moderated, to prevent spam and trolls: