Compré este controlador GPS con antena cerámica exenta. En la foto de la tienda venía la imagen del U-Blox:
Pero realmente me llegó este, con la antena incorporada:
Quería conectarlo por USB, pero aún no me ha llegado el adaptar de USB a TTL [ahora ya me ha llegado, así que explico cómo hacerlo con el adaptador más abajo], así que lo conecto por UART.
El esquema de conexión es el siguiente:
- 5V de la Raspberry Pi al VIN del GPS
- GND de la Raspberry Pi al GND del GPS
- TX de la Raspberry Pi al RX del GPS
- RX de la Raspberry Pi al TX del GPS
Con los colores de cables que he asignado, y los pines del GPIO de la Raspberry Pi, queda así:
RPi pin 4 (5V) ----- Rojo ------- GPS VCC
RPi pin 6 (GND) ---- Azul ------- GPS GND
RPi pin 8 (TX) ----- Amarillo --- GPS RX
RPi pin 10 (RX) ---- Verde ------ GPS TX
Ahora tenemos que activar UART. Para ello editamos el fichero /boot/cmdline.txt
:
sudo nano /boot/cmdline.txt
Contiene lo siguiente:
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
Lo dejo de la siguiente forma:
dwc_otg.lpm_enable=0 console=tty1 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
También hemos de editar /etc/inittab
, comentando (poner # delante) la última línea:
#Spawn a getty on Raspberry Pi serial line #T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
Reinicio la Raspberry Pi.
Ahora, instalo los programas de uso del GPS más típicos:
sudo apt-get install gpsd gpsd-clients python-gps
Arrancamos el demonio gpsd
:
sudo gpsd /dev/ttyAMA0 -F /var/run/gpsd.sock
Y ejecuto el cliente GPS:
cgps -s
Y, tras esperar un rato a que encuentre las señales de los satélites necesarios, me sale lo siguiente:
┌───────────────────────────────────────────┐┌─────────────────────────────────┐ │ Time: 2015-04-18T10:06:19.000Z ││PRN: Elev: Azim: SNR: Used: │ │ Latitude: 40.556089 N ││ 5 75 228 36 Y │ │ Longitude: 5.673255 W ││ 13 59 314 38 Y │ │ Altitude: 843.4 m ││ 15 26 292 39 Y │ │ Speed: 0.4 kph ││ 2 10 208 22 Y │ │ Heading: 64.1 deg (true) ││ 44 07 103 00 N │ │ Climb: -54.0 m/min ││ │ │ Status: 3D FIX (34 secs) ││ │ │ Longitude Err: +/- 133 m ││ │ │ Latitude Err: +/- 59 m ││ │ │ Altitude Err: +/- 170 m ││ │ │ Course Err: n/a ││ │ │ Speed Err: +/- 989 kph ││ │ │ Time offset: 0.435 ││ │ │ Grid Square: IN80dk ││ │ └───────────────────────────────────────────┘└─────────────────────────────────┘
¡Funciona!
Si en algún momento se «atasca», basta con parar el proceso cgps
y volverlo a arrancar:
sudo killall gpsd sudo gpsd /dev/ttyAMA0 -F /var/run/gpsd.sock
Conexión con un adaptador USB a serie TTL
Ya me ha llegado el adaptador, así que voy a conectar ahora el GPS a la Raspberry Pi por medio de un adaptador USB a serie TTL PL2303HX, por 2€. Compré este:
Lo conecto de la siguiente forma:
PL2303HX GPS 3V3 --------- (No lo conecto) TXD --------- RX RXD --------- TX GND --------- GND +5V --------- VCC
Y enchufo el módulo USB a la RaspberrY Pi. Ejecuto:
ls /dev/ttyUSB*
Como tengo ahora mismo conectado un modem 3G USB, me aparecen 3 dispositivos adicionales (/dev/ttyUSB0, /dev/ttyUSB1 y /dev/ttyUSB2
), junto con el nuevo /dev/ttyUSB3
, que es mi GPS. Si no hubiese otros dispositivos USB conectados, seguramente aparecería como /dev/ttyUSB0
.
Si hago sudo lsusb
, me aparece, entre otros dispositivos:
Bus 001 Device 007: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Así que ahí está mi Prolific PL2303, ok.
Miro a ver si el dispositivo está mandando alguna información (coordenadas GPS…), de forma un poco rupestre:
sudo cat /dev/ttyUSB3
Sale una ristra de lo que podría ser información geográfica, así que pinta bien. Ya sólo tengo que seguir los pasos anteriores (cuando lo conectamos por UART), y apuntar a este nuevo puerto:
sudo gpsd /dev/ttyUSB3 -F /var/run/gpsd.sock
Y ejecuto el cliente GPS:
cgps -s
¡Funciona también! Así que ya puedo decidir cómo prefiero usar el GPS, si con el adaptador a USB, y así libero los puertos UART, o a los UART.
Referencias