08-09-2016, 09:05 PM
(This post was last modified: 08-27-2016, 04:41 AM by MarkHaysHarris777.)
I have been testing the Ada Fruit GPS Ultimate Breakout Board with my PineA64, and have found it to be a very handy device for local GPS, and truly the ultimate breakout board for GPS gurus.
The breakout board is in the mid-ground of the pic above. I have the board connected to uart4 (ttyS4) on the PineA64 board, where I am reading and parsing the NMEA sentences from the GPS receiver using Python (codes submitted and explained below). The pinouts for the euler bus may be found here. I use a four color ribbon from the gps module (red 3v3 Vcc, green Tx, white Rx, black Grnd). The red wire plugs into euler bus pin(17) 3v3, the green wire plugs into pin(21), the whire wire plugs into pin(19), and the black wire plugs into pin(25). It is important to note that the Tx line of the module (green) plugs into the Rx pin on the euler bus; the Rx line of the module (white) plugs into the Tx pin of the euler bus. Tx and Rx cross. ( in human terms, your mouth speaks to someone's ear, they listen with their ear to your mouth!). Use the pinouts sheet from the wiki to identify and utilize the uart3 if you like. The codes will need to modified slightly should you decide to use uart3. In the pic below you'll notice that the white wire is missing; that's ok, if you're not going to be sending commands to the gps receiver, and the receiver works very well by default in most cases.
The PineA64 lith-ion batt is in the foreground with the LED lab in the background. The pic below is the verso of the breakout board showing the backup batt and holder (which may be optionally soldered in place). I strongly recommend the backup batt (and bracket) because it significantly reduces startup and acquire times... the receiver gets smarter over time, and memorizes GPS sat information as it runs.
The pic below is a close-in of the ada fruit ultimate gps breakout board clearly connected to the uart4 (ttyS4) of the PineA64. I have posted the codes below. Again , you'll notice that the white wire (used to send commands to the gps receiver is missing. The cable on the near end of this pic below is the uart0 serial console which runs over to my notebook gnu+linux system and is my interface into this board. The transmit Tx wire green of the serial cable plugs into uart0 pin(8) of the EXP header, the white receiver line Rx plugs into pin(7) of the EXP header , and the black wire (grnd) plugs into pin(9).
The codes listed below are a simple Python script that parses the primary NMEA sentences for local display making some sense of the otherwise cryptic messages typically received by any GPS receiver. The code has been tested on gnu+linux (lennyraposo debian mate) and displays latitude, longitude, time, date, altitude, and satellite position for fixing sats. The codes should be run as root; while they are intended to get a person started, they may not be robust enough for direct application , and may or may not be suitable for a particular purpose.
ada_fruit_GPS4.sh
run with :
sudo ./ada_fruit_gps4.sh
The breakout board will flash once every second until a fix is established; thereafter it will flash once every fifteen seconds.
The codes listed above will work with other GPS receivers, but may need to be modified for display depending on the order of NMEA sentences the GPS receiver provides and how often the receiver updates the GSV sentences; which are updated by the ada fruit breakout every five cycles (or every five seconds).
The breakout board is in the mid-ground of the pic above. I have the board connected to uart4 (ttyS4) on the PineA64 board, where I am reading and parsing the NMEA sentences from the GPS receiver using Python (codes submitted and explained below). The pinouts for the euler bus may be found here. I use a four color ribbon from the gps module (red 3v3 Vcc, green Tx, white Rx, black Grnd). The red wire plugs into euler bus pin(17) 3v3, the green wire plugs into pin(21), the whire wire plugs into pin(19), and the black wire plugs into pin(25). It is important to note that the Tx line of the module (green) plugs into the Rx pin on the euler bus; the Rx line of the module (white) plugs into the Tx pin of the euler bus. Tx and Rx cross. ( in human terms, your mouth speaks to someone's ear, they listen with their ear to your mouth!). Use the pinouts sheet from the wiki to identify and utilize the uart3 if you like. The codes will need to modified slightly should you decide to use uart3. In the pic below you'll notice that the white wire is missing; that's ok, if you're not going to be sending commands to the gps receiver, and the receiver works very well by default in most cases.
The PineA64 lith-ion batt is in the foreground with the LED lab in the background. The pic below is the verso of the breakout board showing the backup batt and holder (which may be optionally soldered in place). I strongly recommend the backup batt (and bracket) because it significantly reduces startup and acquire times... the receiver gets smarter over time, and memorizes GPS sat information as it runs.
The pic below is a close-in of the ada fruit ultimate gps breakout board clearly connected to the uart4 (ttyS4) of the PineA64. I have posted the codes below. Again , you'll notice that the white wire (used to send commands to the gps receiver is missing. The cable on the near end of this pic below is the uart0 serial console which runs over to my notebook gnu+linux system and is my interface into this board. The transmit Tx wire green of the serial cable plugs into uart0 pin(8) of the EXP header, the white receiver line Rx plugs into pin(7) of the EXP header , and the black wire (grnd) plugs into pin(9).
The codes listed below are a simple Python script that parses the primary NMEA sentences for local display making some sense of the otherwise cryptic messages typically received by any GPS receiver. The code has been tested on gnu+linux (lennyraposo debian mate) and displays latitude, longitude, time, date, altitude, and satellite position for fixing sats. The codes should be run as root; while they are intended to get a person started, they may not be robust enough for direct application , and may or may not be suitable for a particular purpose.
ada_fruit_GPS4.sh
Code:
#!/usr/bin/python
##
## ada_fruit_gps4.sh
## v.01a
#
#*****************************************************************
# author: Mark H. Harris
# license: GPLv3
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MECHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENCIAL DAMAGES (INCLUDING, BUT
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
#*****************************************************************
##
import serial
## SERIAL PORT SETUP PINEA64 UART4
#
uart4 = serial.Serial(port="/dev/ttyS4",bytesize=8,stopbits=1)
uart4.baudrate = 9600
## INTERESTING GLOBALS
#
count=0
svns=0
svndct={}
gprmc=''
ggagsa=''
uart4.flush()
gsvflag=False
kb_interrupt=False
GGAFIX= {'0':'Fix not available', '1':'GPS fix', '2':'Differential GPS fix'}
GSAFIX= {'M':'Manual', 'A':'Auto', '1':'Fix not available', '2':'2D <4 SVs used', '3':'3D >3 SVs used'}
## MAIN TRY BLOCK WHERE WE ATTEMPT TO PARSE SOME NMEA SENTENCES
#
while(not kb_interrupt):
try:
cline=uart4.readline().split('*')
dline=cline[0].split(',')
if (dline[0]=='$GPGSV'):
if (dline[2]=='1'):
gsvflag=True
for n in range(4,len(dline)-3,4):
svndct[dline[n]]=(dline[n+1],dline[n+2],dline[n+3])
continue
if (dline[0]=='$GPRMC' and count==0):
print("\n"+gprmc)
gprmc="time: "+dline[1]+" date: "+dline[9]+" "+dline[4]+": "+dline[3]+" "+dline[6]+": "+dline[5]
count+=1
else:
if (dline[0]=='$GPRMC'):
count+=1
if (dline[0]=='$GPGGA' and count==0):
gprmc+=" El: "+dline[9]+" "+dline[10]
print(gprmc)
ggagsa=" sats: "+dline[7]
ggagsa+=" type: "+GGAFIX[dline[6]]
svns=int(dline[7])
if (dline[0]=='$GPGSA' and count==0):
dsvns=[]
for n in range(svns):
dsvns.append(dline[3+n])
## print("svns: "+str(dsvns))
ggagsa+=" mode: "+GSAFIX[dline[1]]+" "+GSAFIX[dline[2]]
print("\n"+ggagsa)
print("\n SVn: ('El', 'Azi', 'dB')")
print(" ----------------------------")
if (gsvflag):
for svn in dsvns:
print(" "+svn+": "+str(svndct[svn]))
if (count>=5):
count=0
except KeyboardInterrupt:
kb_interrupt=True
uart4.flush()
run with :
sudo ./ada_fruit_gps4.sh
The breakout board will flash once every second until a fix is established; thereafter it will flash once every fifteen seconds.
The codes listed above will work with other GPS receivers, but may need to be modified for display depending on the order of NMEA sentences the GPS receiver provides and how often the receiver updates the GSV sentences; which are updated by the ada fruit breakout every five cycles (or every five seconds).
marcushh777
please join us for a chat @ irc.pine64.xyz:6667 or ssl irc.pine64.xyz:6697
( I regret that I am not able to respond to personal messages; let's meet on irc! )
please join us for a chat @ irc.pine64.xyz:6667 or ssl irc.pine64.xyz:6697
( I regret that I am not able to respond to personal messages; let's meet on irc! )