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.

Adafruit GPS Hat

Adafruit GPS Hat

hab-nevis

Uptronics GPS Hat

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. Si sois clientes de Amazon podéis comprarla en el este link.

antenagps

Si optáis por comprar el gps de Adafruit necesitaréis comprar el siguiente adaptador

sma-mini

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

Esta entrada fue publicada en Raspberry Pi. Guarda el enlace permanente.

8 respuestas a Instalar un GPS en una Raspberry Pi

  1. Hector dijo:

    Hola, tengo una Raspberry Pi 3 y te comento mi problema.
    He hecho todos los pasos y cuando uso el comando sudo cat /dev/ttyAMA0 si que me sale que la raspberry esta recibiendo datos del GPS ( un modulo de ublox NEO m6)
    pero cuando uso cgps -s me aparece N/A y al rato time out y se cierra. No se a que se debe ya que si que esta recibiendo datos y cuando uso sudo cat /dev/ttyAMA0 veo coordenadas y tiempos etc. osea que el GPS si que tiene señal. Puedes ayudarme?

    Me gusta

    • elalbir28 dijo:

      Hola, si haces el cat y recibe los datos es porque efectivamente está conectado y los datos se reciben correctamente pero por algún motivo no se reenvían al gpsd.

      No conozco ese modelo de gps, ¿cómo se conecta a la Raspberry (Hat usando el gpio/ USB / Serie)?

      Salu2

      Me gusta

  2. Marcos dijo:

    Hola hice los pasos como decia hasta que llego a lo de sudo gps /dev/ttyAMAo… etc. tengo problemas, cuando pongo sudo cat etc me dice que no hay nada en el directorio, lo estoy haciendo con raspbian y modulo gps neo m6, esta conectado en el puerto donde estan los pines

    Me gusta

    • elalbir28 dijo:

      Hola Marcos, buenos días,

      prueba lo siguiente:

      ejecuta raspi-config, y en Advanced Options-> A8 Serial
      y activa el acceso a la consola a través del puerto serie marcando ‘SI‘, a continuación sal de la aplicación indicando que SI queremos reiniciar el sistema.

      Y ya me dices como te ha ido.

      Salu2

      Santi

      Me gusta

  3. Francisco Piñero Guerrero dijo:

    Hola Marcos.
    he seguido todos los pasos pero me da varios problemas. en ttyAMA0 no me aparece nada.
    en cgps -s tampoco.
    me he dado cuenta de que no ha cargado el paquete gpsd-client.
    Que hago????
    Muchas gracias!!!

    Me gusta

  4. issacpacheco dijo:

    Hola yo igual tengo el mismo problema el gps es usb

    Me gusta

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.