Recently I got myself a GPS module to play with such as this. Not that I knew much about but felt like something nice to play with. First thing first is connecting the GPS module to the GPIO in Orange Pi 2G. In my case I decided to connect the GPS to ttyS2, asides from VCC (2.8V) and GND. This correspond to pins 1, 6, 8 and 10.
Vcc -> pin 1
GND -> pin 6
TxD -> pin 8
RxD -> pin 10
Pin 1 would be the one just below a small white arrow to the left of the SD card. Below two pictures of GPS connected to Orange Pi GPIO pins.
Another important thing is to cross TxD and RxD cables, that means connecting GPS TxD to Orange Pi RxD and GPS RxD to Orange Pi TxD.
Now that the GPS module is connected to the Orange Pi power it up and log into it. We will now check if the GPS mocule is working, in order to do this we will connect via minicom.
minicom -D /dev/ttyS2 -b 9600 Welcome to minicom 2.7 OPTIONS: I18n Compiled on Apr 26 2017, 00:45:18. Port /dev/ttyS2, 19:10:00 Press CTRL-A Z for help on special keys $GPRMC,191013.00,A,4252.31265,N,7833.00897,W,0.180,,040518,,,A*64 $GPVTG,,T,,M,0.180,N,0.333,K,A*29 $GPGGA,191013.00,4252.31265,N,7833.00897,W,1,06,2.16,296.4,M,51.3,M,,*44 $GPGSA,A,3,22,16,10,08,26,27,,,,,,,3.81,2.16,3.14*04 $GPGSV,3,1,10,01,19,244,,08,60,313,24,10,49,079,28,16,36,164,36*74 $GPGSV,3,2,10,18,42,250,22,20,07,038,,21,06,061,,22,09,195,30*7A $GPGSV,3,3,10,26,09,158,30,27,69,072,27*70 $GPGLL,4252.31265,N,7833.7897,W,191013.00,A,A*7C
Output is pretty ugly as can be seen but you can see the coordinates in GPGLL entry. In order to have something more readable we install below packages.
sudo dpkg -l | grep -i gps ii gpsd 3.11-3 armhf Global Positioning System - daemon ii gpsd-clients 3.11-3 armhf Global Positioning System - clients ii libgps21:armhf 3.11-3 armhf Global Positioning System - library ii python-gps 3.11-3 armhf Global Positioning System - Python libraries
Now copy below script and execute in order to start gpsd and listen on ttyS2.
#!/bin/bash sudo gpsd /dev/ttyS2 -F /var/run/gpsd.sock
Now I created below python script which prints creates Google Maps URL based on GPS coordinates.
import gps # Listen on port 2947 (gpsd) of localhost session = gps.gps("localhost", "2947") session.stream(gps.WATCH_ENABLE | gps.WATCH_NEWSTYLE) while True: try: report = session.next() # Wait for a 'TPV' report and display current time if report['class'] == 'TPV': if hasattr(report, 'time') and hasattr(report, 'lat') and hasattr(report, 'lon'): print report.time print "Latitude: "+str(report.lat)+", Longitude: "+str(report.lon) print "Google Maps URL: https://maps.google.com/?q="+str(report.lat)+","+str(report.lon)+"\n" except KeyError: pass except KeyboardInterrupt: quit() except StopIteration: session = None print "GPSD has terminated"
And we proceed executing.
python gps.py 2018-05-04T19:40:02.000Z Latitude: 42.872081491, Longitude: -78.549973218 Google Maps URL: https://maps.google.com/?q=42.872081491,-78.549973218 2018-05-04T19:40:03.000Z Latitude: 42.872081044, Longitude: -78.549972807 Google Maps URL: https://maps.google.com/?q=42.872081044,-78.549972807 2018-05-04T19:40:04.000Z Latitude: 42.872081426, Longitude: -78.549970823 Google Maps URL: https://maps.google.com/?q=42.872081426,-78.549970823 2018-05-04T19:40:05.000Z Latitude: 42.872081634, Longitude: -78.549968307 Google Maps URL: https://maps.google.com/?q=42.872081634,-78.549968307 2018-05-04T19:40:06.000Z Latitude: 42.872082718, Longitude: -78.549965683 Google Maps URL: https://maps.google.com/?q=42.872082718,-78.549965683
And opening the URL on Google Maps.
Thanks for reading.