使用GPS有一阵,今天突发奇想,使用python接受GPS信号。

GPS(garmin)使用的是串口线(当然也支持USB线)波特率为4800bps,python使用pyserial模块控制串口

将GPS的接口协议调整为NMEA协议,使用pyserial接收到的信号(每两秒钟刷新一次)例如为

$GPRMC,,V,,,,,,,230509,4.0,W,N*23
 $GPRMB,V,,,,,,,,,,,,A,N*13
 $GPGGA,,,,,,0,00,,,M,,M,,*66
 $GPGSA,A,1,,,,,,,,,,,,,,,*1E
 $GPGSV,3,1,12,09,05,055,00,12,37,051,00,14,56,353,00,18,40,161,00*7F
 $GPGSV,3,2,12,22,70,199,00,26,09,100,00,29,07,136,00,30,65,091,00*71
 $GPGSV,3,3,12,31,41,268,00,32,02,323,00,33,00,000,00,34,00,000,00*77
 $GPGLL,,,,,,V,N*64
 $GPBOD,,T,,M,,*47
 $GPVTG,,T,,M,,N,,K*4E
 $PGRME,,M,,M,,M*00
 $PGRMZ,,f,1*29
 $PGRMM,WGS 84*06
 $GPRTE,1,1,c,*37

 

 

可参照NMEA协议 对抓取的记录进行分析

 

串口接收的python代码为

 

#coding=utf-8
 import serial
 ser=serial.Serial()
 ser.port=0
 ser.baudrate=4800
 ser.open()
 while True:
         line=ser.readline()
         if line.startswith('$GPGLL,'):
                 st=line.split(',')#0,‘$GPGLL’;1,维度;2,南北半球;3,经度;4,东西经;5,时间
                 print st[5],st[4],st[3],st[2],st[1]
         print line,
 ser.close()

 

这样配合python的GUI库,将经纬度打点到DC上,路径就显示出来了