GPS-monitor

In de tutorial ‘Bluetooth GPS module koppelen‘ heb je kennis gemaakt hoe je een GPS ontvanger met de Raspberry Pi verbindt en hoe je via een COM-poort een connectie met de software kunt maken. Op basis van deze kennis leg ik in deze tutorial uit hoe je GPSMon en XGPS kunt gebruiken.

GPSMon is een monitor die pakketten bekijkt die van een GPS komen en deze samen met diagnostische informatie weergeeft. Gpsmon verschilt van een navigatieclient doordat het voornamelijk onbewerkte gegevens van de GPS dumpt, met alleen voldoende gegevens om controles tegen de verwachte output mogelijk te maken. Het gebruikt geen gpsd om pakketten te decoderen.

XGPS is een eenvoudige testclient voor GPSD met een X-interface. Het geeft de huidige GPS-positie/tijd/snelheidsinformatie weer en (voor GPS’en die de functie ondersteunen) de locaties van toegankelijke satellieten.

GPSD is een programma dat gegevens verzamelt van een GPS-ontvanger en de gegevens eventueel via een IP-netwerk levert aan mogelijk meerdere cliënt toepassingen in een server-cliënt toepassingsarchitectuur. GPSD kan worden uitgevoerd als een daemon om transparant te werken als een achtergrondtaak van de server.

Eerst nog dit!
Voordat je deze tutorial gaat doen, raad ik aan eerst deze tutorial te doen. Je leert hier de basis t.a.v. communicatiepoorten en je test de opstelling van de GPS-ontvanger. Weliswaar wordt hier een bluetooth ontvanger gebruikt, maar dat kan ook een andere interface zijn. Een pientere hobbyist doorziet hoe het werkt. Het helpt als je al wat met communicatiepoorten gewerkt hebt.

Let op! Om het eindresultaat, de X-interface te kunnen gebruiken heb je in deze tutorial een grafische interface nodig. Derhalve kun je geen gebruik maken van de SSH-client zoals PuTTY. Je kunt gebruik maken van het beeldscherm dat rechtstreeks op de Pi aangesloten is, of je gebruikt VNC om de Pi op afstand te bedienen.

Installeer de volgende hulpprogramma’s:

sudo apt-get install gpsd gpsd-clients python-gps

We gaan er van uit dat er een actieve verbinding met de GPS-ontvanger is. M.a.w. de poort waarover de communicatie verloopt is bekend. Omdat deze tutorial een vervolg is van de tutorial ‘Bluetooth GPS module koppelen‘, gebruiken we poort rfcomm1.

Om te de GPS-ontvanger straks te kunnen binden is het MAC-adres ervan nodig.

Host Controler Interface tool (HCItool)
Om een Bluetooth device met een MAC-adres te detecteren kun je het standaard hcitool gebruiken. Het hcitool wordt gebruikt om de verbindingen te configureren en een speciale commando’s naar apparaten devices te sturen. Je vindt de apparaten met het volgende commando:

hcitool scan

Mijn Bluetooth GPS ontvanger met BlueGPS BD93CD en MAC-adres

Binding
Bind de COM-poort met het MAC-adres van de GPS-ontvanger. In dit voorbeeld is het MAC-adres van de GPS-ontvanger 00:02:C7:BD:93:CD

sudo rfcomm bind /dev/rfcomm1 00:02:C7:BD:93:CD

Controleer of de poort voor Python beschikbaar is met:

python -m serial.tools.list_ports

Als het goed is staat de COM-poort er nu bij als: /dev/rfcomm1

Stop het gpsd-socket met:

sudo systemctl stop gpsd.socket

Schakel het gpsd-socket uit met:

sudo systemctl disable gpsd.socket

Open als super-user het bestand gpsd.socket met de editor

sudo nano /lib/systemd/system/gpsd.socket

Het bestand opent zich.

[Unit]
Description=GPS (Global Positioning System) Daemon Sockets

[Socket]
ListenStream=/var/run/gpsd.sock
ListenStream=[::1]:2947
ListenStream=127.0.0.1:2947
SocketMode=0600

[Install]
WantedBy=sockets.target

Wijzig nu de regel : ListenStream=127.0.0.1:2947

in : ListenStream=0.0.0.0:2947

Sla het bestand op en sluit de editor.

Sluit nu alle afhankelijkheden van gpsd met:

sudo killall gpsd

De juiste reactie die terug gekoppeld wordt is: gpsd: geen proces gevonden

Start als super-user gpsd als volgt op:

sudo gpsd /dev/rfcomm1 -F /var/run/gpsd.sock

Start de GPS-monitor:

gpsmon

Als alles goed gegaan is verschijnt het volgende venster met de GPS informatie en je eigen locatie gegevens:

gpsmonitor

Geef vervolgens het volgende commando om de grafische weergave van de ontvangen satellieten te tonen:

xgps

Indien de: TypeError: Couldn’t find conversion for foreign struct ‘cairo.Context. zichtbaar is, installeer dan cairo met:

sudo apt-get install python3-gi-cairo

En geef opnieuw het commando:

xgps

Als alles goed gegaan is, opent zich het xgps-venster. Hierin zie je alle satellieten die voor de GPS-ontvanger zichtbaar zijn, ieder met zijn specifieke data.

Wil je meer weten over de xgps-client? Klik dan hier.

USB GPS ontvanger
Hierboven heb ik een Bluetooth GPS ontvanger als voorbeeld genomen, Maar ik begrijp heel goed dat er waarschijnlijk meer GPS ontvangers met een USB interface zijn. Daarom in het kort ook nog even de procedure voor de USB-variant.

Laat alle USB apparaten zien met:

lsusb

Bekijk met de volgende commando’s het device-overzicht en zoek welke poort jouw USB-apparaat gebruikt. Dit zou bijvoorbeeld ttyUSB0 kunnen zijn.

cd /dev/

ls

GPSD moet geinstalleerd worden, als je dit nog niet gedaan hebt met:

sudo apt-get install gpsd gpsd-clients python-gps

Stop gpsd ter voorkoming van Pi invloed:

sudo systemctl stop gpsd.socket

en vervolgens:

sudo systemctl disable gpsd.socket

Tot slot koppelen (binden) we gpsd handmatig met de USB GPS ontvanger:

sudo gpsd /dev/ttyUSB0 -F /var/run/gpsd.sock

De resultaten kun je laten zien met:

cgps -s

Nu zou je de gpsmonitor moeten zien.

Zodra ik in het bezit ben van een USB GPS ontvanger zal ik er een uitgebreide tutorial aan wijden.

Have A Nice Day!