Instalar un GPS en una Raspberry Pi

Aunque instalar un GPS en una Raspberry Pi no es complicado, hacerlo sin recurrir a algún tipo de manual puede convertir una proyecto muy divertido en una experiencia frustrante.

Para evitar que os ocurra esto último he decidido publicar este manual / tutorial explicándolo paso a paso sin ningún margen de error.

Lo primero que necesitaréis es un dispositivo GPS, los hay de varios tipos. En mi caso me decidí por uno del tipo HAT por ser la solución más compacta, al ir pinchado directamente sobre el puerto GPIO de la Raspberry, además de contar con PPS, una funcionalidad imprescindible si pensáis en usar ese equipo como servidor NTP.

Los del tipo HAT, conectados al puerto GPIO, transmiten la información a través del puerto serie ttyAMA0, mientras que los externos, conectables a través del USB lo hacen através del puerto USB0. En este ejemplo me centro en el tipo HAT (ttyAMA0).

¿CUÁL ELEGIR?

De entre las opciones disponibles he probado tanto  el de Adafruit como el  HAB de Uputronics , con resultados muy parecidos, aunque mi preferido ha sido este último.

hab-nevis

Respecto a la antena, hay muchas disponibles por precios que van desde los 15 a los 30 euros. Si finalmente optáis por comprar el GPS HAB de Uputronics tenéis la opción de comprar una en su misma Web de Nevis computers, ahorrando gastos de envío.

antenagps

INSTALACIÓN Y CONFIGURACIÓN DEL SOFTWARE

Actualizaremos el sistema con:

sudo apt-get update
sudo apt-get dist-upgrade
sudo rpi-update

Reiniciándolo a continuación para que los cambios tomen efecto con:

sudo reboot

Instalaremos los paquetes necesarios para el correcto funcionamiento del gps y el acceso a las librerías necesarias:

sudo apt-get install pps-tools
sudo apt-get install libcap-dev
sudo apt-get install gpsd gpsd-clients python-gps

Después editaremos el fichero config.txt:

sudo nano /boot/config.txt

Y al final del fichero añadiremos:

dtoverlay=pps-gpio,gpiopin=18

Para guardar y salir pulsaremos ctrl + x , pulsaremos Y y enter

Seguidamente editaremos el fichero /etc/modules:

sudo nano /etc/modules

y añadiremos la siguiente línea

pps-gpio

Para guardar y salir pulsaremos ctrl + x , pulsaremos Y y enter

Forzaremos el reinicio del sistema:

sudo reboot

Editaremos su fichero de configuración:

sudo nano /etc/default/gpsd

Al abrirlo aparecen los paremetros de configuración que al margen de los comentarios han de quedar así:

START_DAEMON=”true”
GPSD_OPTIONS=”-n”
DEVICES=”/dev/ttyAMA0″
USBAUTO=”true”
GPSD_SOCKET=”/var/run/gpsd.sock”

Una mez modificado, grabaremos como de costumbre, ctrl +x , Y, y Enter.

Reiniciaremos el sistema con

sudo reboot

A continuación teclearemos

sudo gpsd /dev/ttyAMA0 -F /var/run/gpsd-sock

Y, dando por hecho que el gps tiene cobertura, probaremos que el gps funciona y recibe señal:

Para ver que el gps envia información al puerto:

sudo cat /dev/ttyAMA0

saldrán ristras de caracteres en las que se puede leer fechas, horas, coordenadas… no os asustéis es totalmente normal, confirmando el buen funcionamiento y recepción del Gps.

Interrumpiremos la ejecución de la prueba con ctrl + c

Seguido comprobaremos los datos que llegan a la aplicación gpsd con:

cgps -s

deberemos ver un cuadro en el que figurarán, fecha, hora, latitud, longitud…

cgps-s

¿CÓMO GESTIONAR LA INFORMACIÓN A TRAVÉS DE UN PROGRAMA?

Con el gps funcionando y recibiendo datos tan solo nos queda empezar a gestionar la información recibida, para lo cual os adjunto un pequeño script de Python que os servirá para recabar la información más importante tratarla con una finalidad u otra.

Os recomiendo crearlo con:

sudo nano testgps.py

pegar en su interior el siguiente script:

import gps

session = gps.gps("localhost", "2947")
session.stream(gps.WATCH_ENABLE | gps.WATCH_NEWSTYLE)
x= 1

while x == 1:
 report = session.next()
 if report['class'] == 'TPV':
  if hasattr(report, 'time'):
   print 'Hora:      ' + str(report.time)
  if hasattr(report, 'lat'):
   print 'Latitud:   ' + str(report.lat)
  if hasattr(report, 'lon'):
   print 'Longitud:  ' + str(report.lon)
  if hasattr(report, 'speed'):
   print 'Velocidad: ' + str(report.speed)
  if hasattr(report, 'track'):
   print 'Rumbo:     ' + str(report.track)
  if hasattr(report, 'head'):
   print report.head
  x= 0

 

Pulsando ctrl + x para guardar los cambios, pulsando a continuación Y para grabarlos.

Para ejecutarlo bastará con:

python testgps.py

Mostrando algo muy similar a esto:

test

Espero que este post os haya sido útil. Si tenéis cualquier problema o necesitáis cualquier aclaración no dudéis en contactarme.

Hasta la próxima.

 

Salu2

 

Santi