Wissensdatenbank
Buehl, Kevin
01 Oktober 2016
3.328

Wissensdatenbank

Adafruit Ulitmate GPS an Rasperry Pi anschliessen

Vorwort

Raspberry Pi mit GPS ModulRaspberry Pi mit GPS Modul

Raspberry Pi mit GPS Modul


Ich habe mir vor einigen Monaten das SIM908 Modul und eine SIM-Karte bei der Telekom gekauft und bin eigentlich sehr zufieden. Das Problem ist allerdings das ich in der Schweiz kein GPS Signal (mit der deutschen SIM) erhalte, wenn ich meine Swisscom SIM Karte verwende erhalte ich ein GPS Signal.

Im Internet konnte nicht disbezüglich nichts finden, ich denke das die GPS Funktion nur in dem Land funktioniert wo die SIM gekauft wurde bzw. der Prodiver seinen Sitz hat. Aus diesem Grund habe ich mir dann das Adafruit Ulitmate GPS Modul gekauft, da ich keine Lust habe immer an der Grenze die SIM-Karte zu wechseln.

Sie benötigen folgende Hardware:
- Raspberry Pi Model A, B oder B+
- Adafruit Ulitmate GPS Modul
- weibliche Kopfleisten (optional)





Vorbereitung

Adafruit GPSAdafruit GPS

Adafruit GPS

Rasperry Pi B+ GPIORasperry Pi B+ GPIO

Rasperry Pi B+ GPIO


Ich habe eine Reihe weiblicher Kopfleisten direkt an das GPS Modul gelötet um Kabelsalat zu vermeiden. So kann ich das GPS Modul direkt auf den Raspberry Pi stecken, da die Belegung der Pins übereinstimmt
GPS	Raspberry Pi
========================
VIN PIN04 (5V DC)
GNC PIN06 (Ground)
RX PIN08 (TXD0)
TX PIN10 (RXD0)


Die Pins RXD und TXD des Raspberry Pis können in Linux über das serielle Gerät ttyAMA0 angesprochen werden.

Bei Raspbian verwendet getty standardmässig die UART Schnittstelle für Debug zwecke. Sie können diese Funktion wie folgt deaktivieren um die UART Schnittstelle verwenden zu können.

Dieser Link wurde entfernt. Links sind nur für Mitglieder sichtbar. Bitte melden Sie sich mit Ihrem Benutzernamen und Ihrem Passwort an und versuchen Sie es erneut.








Verwendung


Modul testen


Als erstes sollten Sie Ihr System auf den aktuellen Stand bringen:
aptitude update && aptitude upgrade


Ich habe die folgenden Pakete installiert um das Modul erst einmal zu testen
aptitude install gpsd gpsd-clients

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

cgps -s

┌───────────────────────────────────────────┐┌─────────────────────────────────┐
│ Time: 2014-09-30T20:53:27.000Z ││PRN: Elev: Azim: SNR: Used: │
│ Latitude: 47.413949 N ││ 13 73 044 18 Y │
│ Longitude: 9.363493 E ││ 10 72 297 19 Y │
│ Altitude: 734.1 m ││ 9 66 057 17 Y │
│ Speed: 3.4 kph ││ 8 63 107 16 Y │
│ Heading: 351.9 deg (true) ││ 7 61 160 00 Y │
│ Climb: 6.0 m/min ││ 6 44 223 12 Y │
│ Status: 3D FIX (59 secs) ││ 2 41 282 29 Y │
│ Longitude Err: +/- 11 m ││ 23 35 069 24 Y │
│ Latitude Err: +/- 14 m ││ 30 33 189 17 Y │
│ Altitude Err: +/- 20 m ││ │
│ Course Err: n/a ││ │
│ Speed Err: +/- 104 kph ││ │
│ Time offset: 0.544 ││ │
│ Grid Square: JN47qj ││ │
└───────────────────────────────────────────┘└─────────────────────────────────┘


Daten auslesen


Als erstes habe ich die serielle Schnittstelle geöffnet um zu sehen, welche Daten diese zu Verfügung stellt:
minicom -b 9600 -o -D /dev/ttyAMA0

$GPGGA	212913.000	4724.8361N	00921.8951E	2	5	2.09	783.8M	48.0M	0000	0000*55
Typ Zeit in Sek Breitengard Längengrad fix sat HDOP altit geoidheight



Folgende Software wird benötigt:
apt install python-serial python-smbus


Mit folgendem Skript lese ich die Daten aus:
#!/usr/bin/python
#-----------------------------------------------------------------------#
# Copyright 2006-2016 by Kevin Buehl <kevin@buehl.biz> #
#-----------------------------------------------------------------------#
# __ __ _____________ __ __ ______________ #
# | | 2006 | | | _______ \ | | | | |___________ | #
# | | 2016 | | | | \ | | | | | | | #
# | |___ ____| | | |_______/ / | |___ ____| | ___________| | #
# |______ ____ | | _______ | |______ ____ | | ___________| #
# by | | | | \ \ Content | | | | #
# Kevin | | | |_______/ | Management | | | |___________ #
# Buehl |__| |_____________/ System |__| |______________| #
# #
# No part of this website or any of its contents may be reproduced, #
# copied, modified or adapted, without the prior written consent of #
# the author, unless otherwise indicated for stand-alone materials. #
# For more Information visit www.4b42.com. #
# This notice must be untouched at all times. #
#-----------------------------------------------------------------------#

#-----------------------------------------------------------------------#
# 2014-10-01 Kevin Buehl created
#-----------------------------------------------------------------------#
import serial
import sys
import time

# connect so serial device
try:
serial = serial.Serial("/dev/ttyAMA0", baudrate=9600)
time.sleep(1)
except:
print status("FAIL","Error opening serial port.")
sys.exit(1)
# get data from serial interface
try:
while True:
read = serial.readline()
if "$GPGGA" in read:
print read
time.sleep(5)
except:
print "error"
print sys.exc_info()
finally:
serial.close()




Autostart


Damit das GPS Skript direkt beim start des Raspberry Pis ausgeführt wird, sind folgende Schritte erforderlich.

Erstellen Sie ein Ordner für alle Dateien:
mkdir /home/pi/gps/

Erstellen Sie ein Startskript welches beim Systemstart ausgeführt werden soll:
touch /etc/init.d/gps
chmod +x /etc/init.d/gps
nano /etc/init.d/gps
#!/bin/sh
### BEGIN INIT INFO
# Provides: gps
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the gps script
# Description: gps tracker script by kevin bühl
### END INIT INFO
SCRIPT=/home/pi/gps/gps.py
NAME=GPS-Tracker

case "$1" in
start)
start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid --exec $SCRIPT || true
;;
stop)
start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid --exec $SCRIPT || true
;;
*)
echo "Usage: $NAME {start|stop}" >&2
exit 1
;;
esac
exit 0

Führen Sie den folgenden Befehl aus damit dieses Skript von dem System beim starten und herunterfahren ausgeführt wird:
update-rc.d gps defaults