GPS模块
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
要想连接上这个GPS模块,先得知道模块和树莓派的针脚定义,然后要对树莓派进行一些设置。
一、
串口连接
现在要对GPS模块和树莓派进行连接,根据GPS模块的文档和树莓派的针脚定义一共需要连接4根线:VCC 5V、GND 接地、TXD和RXD。
树莓派上所谓的TOP和BOTTOM,指的是GPIO针脚的两排,BOTTOM是靠近SD卡的一侧。
三、通过minicom获取串口数据
经过上面两步的操作树莓派就和GPS模块连接好了~ 那如何获取GPS模块发出的内容呢,就要通过minicom 这个工具,来获取串口的数据。
su do apt-get install minicom
安装好之后通过minicom命令获取串口上的数据:
minicom -b 9600 -o -D /dev/ttyAMA0
-b 设定的是波特率,是模块参数而定;-o 是不初始化Modem且不锁定文件;-D 设定的是接口
如果一切顺利的话,应该能看到这样的画面(Press CTRL-A Z for help on special keys 下面哗哗的出现内容):
这就说明一切ok 啦,根据GPS模块的文档,知道了这是一种叫NMEA-0183的协议,包括GSA当前卫星信息、GSV可见卫星信
息、GGA GPS定位信息、RMC推荐定位信息和VTG地面速度信息等内容。
在minicom 界面里,可以按Ctrl+A,然后按Z获取帮助;Ctrl+A、然后按Q来退出(据说如果minicom里没有显示,可以试试按一下Ctrl+A、然后按E,启用或关闭回显,没有试过)。
如果没有出现上面的内容,除了刚刚说的Ctrl+A、E外,还应该好好检查一下针脚有没有插错、看一下GPS模块的指示灯工作情况怎么样。
四、编程获取串口数据
通过minicom 测试后,说明串口和GPS模块工作正常,我们就应该用编程的方式来获取串口数据了,以Python为例,要获取串口的数据需要安装Python serial模块
su do apt-get install python-serial
安装好后先通过python命令,进入python命令行进行测试
python
首先,导入serial模块
import serial
然后打开串口,存放到ser 中,方法接收一个端口名,和一个波特率
ser = serial.Serial("/dev/ttyAMA0", 9600)
通过ser的read()方法只能获取一个字符,但read()方法有一个接收字符长度的重载,首先通过ser.inWaiting()方法获取总长度,再通过ser.read()读取
ser.read(ser.inWaiting())
这样就能获取数据了!我们只需要对read到的数据进行分析、处理即可,写成 .py 脚本即可。
五、NMEA-0183 一些数据的计算方式
需要说两个关于NMEA-0183协议返回内容的计算方式,一个是时间,另一个是经纬度。
1. GGA和RMC的时间
来看一下GGA和RMC返回的格式:
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh<CR><LF>
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR><LF>
GGA和RMC都会返回时间,他们的第一个参数<1>就是UTC时间,即协调世界时,格式为hhmmss,要换算成北京时间只需要加上8小时即可;RMC的<9>为UTC日期,格式为ddmmyy(日月年)。
下面列一条RMC返回的数据:
$GPRMC,125315.00,A,3853.70120,N,12133.61898,E,1.710,,081114,,,A*7E
好,我们可以数一下,<1>对应的是125315.00 也就是UTC时间12:53:15,换算成北京时间就是20:53:15;参数<9>为081114,根据
dd/mm/yy 来算就是14年11月08日~
看,如果我们要做一个根据GPS授时的功能,是不是so easy!
2. 经纬度计算
同样的,GGA和RMC都会返回经纬度;GGA的<2>~<5>和RMC的<3>~<6>含义及格式相同,下面还是以RMC来做示范(看看上一点的RMC数据)。
找到RMC参数<3>~<6>,分别是
注意看经纬度的格式啊,这都是个啥,GPS坏了么,3853度?当然不是,纬度和经度都是“度分”格式,dd代表度,m代表分,那么显而易见:
纬度信息:3853.70120,就是38度和53.70120分。
分换算成度只需要除以60,也就是53.70120 / 60 = 0.89502,那么3853.70120的含义就是38.89502°(OMG 把自己住处位置暴露了,欢迎来串门)。
算好经纬度之后可以用 输入纬度N 经度E 来看看你所在位置哈。