树莓派连接GPS模块

一月份的时候觉得好玩买了树莓派,但是太懒没怎么研究,但最近当初买树莓派时的那个梦想又萦绕心头,决定抽空完成一下当年的计划~ GPS模块是其中很重要的一环,于是在某宝上搜索,找了一家相对便宜也很轻巧的GPS模块,而且这个模块和天线是合体的,非常省空间。

几天后快递来啦,今天有空来鼓捣一下 o(^▽^)o 先来看看这个模块,这是天线的一面

这是组装好之后的效果

我给树莓派安装的是 Raspbian,基于Debian;像 Pidora 的话应该大同小异吧,以下操作均为 Raspbian。

下面来简述一下吧。树莓派串口通信网上有很多教程了,我也是搜索着一步步摸索出来的。要想连接上这个GPS模块,先得知道模块和树莓派的针脚定义,然后要对树莓派进行一些设置。

一、树莓派配置修改

树莓派的串口据了解,默认是用于SSH调试的,如果需要使用串口连接其他设备需要进行两步修改:

1. 修改 /etc/inittab

sudo vi /etc/inittab

(如果用不惯vi,又是用图形界面,可以选择用leafpad)

注释掉文件中的这一行,以关闭串口登录

T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

这一行一般位于文件最后一行,注释的方式是在前面加一个“#”

#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

2. 修改 /boot/cmdline.txt

sudo vi /boot/cmdline.txt

将下面高亮的部分删除

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

最后变成了:

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

修改好这两部分之后,需要重启树莓派

sudo reboot

二、串口连接

现在要对GPS模块和树莓派进行连接,根据GPS模块的文档和树莓派的针脚定义一共需要连接4根线:VCC 5V、GND 接地、TXD和RXD。树莓派上所谓的TOP和BOTTOM,指的是GPIO针脚的两排,BOTTOM是靠近SD卡的一侧。

对硬件我也是小白哈,连错了,大家千万要注意模块上的TXD连接树莓派的RXD,模块的RXD连接树莓派的TXD!我的连接方式如下图:

三、通过minicom获取串口数据

经过上面两步的操作树莓派就和GPS模块连接好了~ 那如何获取GPS模块发出的内容呢,就要通过 minicom 这个工具,来获取串口的数据。

sudo 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模块

sudo 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>,分别是

<3> 3853.70120 纬度(ddmm.mmmm)
<4> N 纬度半球(N 北半球、S 南半球)
<5> 12133.61898 经度(dddmm.mmmm)
<6> E 经度半球(E 东经、W 西经)

注意看经纬度的格式啊,这都是个啥,GPS坏了么,3853度?当然不是,纬度和经度都是“度分”格式,dd代表度,m代表分,那么显而易见:

纬度信息:3853.70120,就是38度和53.70120分。

分换算成度只需要除以60,也就是 53.70120 / 60 = 0.89502,那么3853.70120的含义就是38.89502° (OMG 把自己住处位置暴露了,欢迎来串门)。

算好经纬度之后可以用 ditu.google.cn 输入 纬度N 经度E 来看看你所在位置哈。

好啦,总结了一些网上已经有的东西,分享给大家~ 大家请轻喷哈 o(* ̄▽ ̄*)ブ

参考文献

时间: 2024-10-22 15:24:30

树莓派连接GPS模块的相关文章

fl2440开发板添加GPS模块

1.1 GPS模块与ARM开发板的连接 GPS模块属于字符设备,只需要和FL2440开发的第二个串口连接既可以,然后将GPS测试模块放在室外便可以每隔一段时间向开发板的串口发一个数据包, ~ >: microcom /dev/ttyS1 -s 4800 $GPGGA,024907.000,3029.6642,N,11423.6203,E,1,10,1.0,35.7,M,-13.7,M,,0000*41$GPGSA,A,3,04,08,32,17,28,30,07,11,20,01,,,1.9,1

路径规划(1)--连接GPS接收端

从淘宝上入手的GPS接收端U-BLOX M8N,带UART串口连接线. 一.打开树莓派上的UART串口通信 1.下载pi3-miniuart-bt-overlay.dtb,并将dtb文件拷贝到/boot/overlays/目录下 下载地址:http://pan.baidu.com/s/1qXS0hoK 2.编辑/boot目录下的config.txt文件,增加两行 sudo nano /boot/config.txt dtoverlay=pi3-miniuart-bt-overlay force_

迅为IMX6开发板支持4G全网通模块GPS模块

IMX6开发板特点 处理器:IMX6开发板支持4G全网通模块GPS模块. 核心板配置:2GB DDR3内存  16GB EMMC 存储,扩展引脚多达320个:运行温度-20 ℃到+80 ℃之间. 核心板连接器:经过大批量检验的核心板连接方式,更优的排列更放心的连接性能. 丰富接口:支持全网通4G模块.GPS模块.WIFI蓝牙.SATA 接口.CAN 总线 千兆以太网.重力加速度计.CAMERA接口等. 设计技术:八层PCB沉金设计,紧凑精致!完美解决电磁兼容,达到成本与性能的完美统一,更加技高一

GPS模块编程之NMEA0183协议

NMEA 0183是美国国家海洋电子协会(National Marine Electronics Association)为海用电子设备制定的标准格式.现在已经成为GPS导航设备统一的RTCM(Radio Technical Commission for Maritime services)标准协议. 下图是我调试用的GPS芯片,是深圳一家公司生产的.基本上接上天线,供电引脚电压正常的话,就可以通过串口读取GPS数据了.所以GPS编程最主要的是解析数据,要解析数据就得了解协议格式. 下面一组数据

GPS模块知识

GLONASS.Galileo.GPS.北斗这些导航卫星系统统称GNSS(Global Navigation Satellite System). 其中: GPS--美国的卫星导航系统: GLONASS--俄罗斯: Galileo--欧洲: 北斗--中国. 知名的厂家: 1,U-Blox: 瑞士U-Blox的GPS模块市场占有率是全球第一,GPS领域技术最好,芯片的设计.研发.生产都是自己做的.性能和质量方面,U-Blox的自主性比价好: 2,Fastrax: 芬兰Fastrax模块采用美国Si

android Qemu GPS 模块简明分析

Android 的 gps module 是  gps.default.so 在system/lib/hw/ 目录上, 一般提供gps功能的手机应该实现这个module和真实gps硬件交互 Qemu中gps就是要构造一个gps.default.so,  但这个so并不和真的硬件打交道,只是个模拟接口,其代码在sdk/emulator/gps/gps_qemu.c中 Qemu 容器外部实现了一个gps设备,但这个设备和 Android 交互只能通过管道,所以gps_qemu.c的功能就是同管道打交

A53八核RP6818开发板不带GPS模块如何让串口3正常使用

Q:用的荣品A53八核6818开发板,想问下串口3出厂的时候初始化了么? A:GPS用了 . Q:没带WiFi/蓝牙4.0/GPS模块的板子,可以直接用串口3吗? A:把GPS的库不要编译进去 . Q:能具体点说下吗?不太会 . RP6818板子,用了串口3,怎么能正常使用. 我现在用系统自带的串口测试软件,串口不好使,其它口都好使. 主要问题需要解决是 没有GPS模块的板子让串口3能正常使用. A:串口3现在不能正常使用吗? Q:串口3不好使,李工说不把什么库编译进去就能正常使用,我不会弄.

mysql连接池模块

如果不想程序在查询数据时卡死或等待过长时间,一般不推荐在node中开启一个连接后全部查询都用这个链接并且不关闭.因为node里面的mysql不像php里的那样会在完成查询后断开,只要不主动断开,连接一直存在,当连接数量达到一定数量时就会产生严重的阻塞,出现各种延时和卡死现象.在并发量较大时,可以通过建立连接池来缓解并发压力. 在node中的mysql模块里其用来操作数据的query()方法接收的参数是不同的,在使用时需要特别注意.具体模块如下: /** * mysql连接池模块 * @autho

时区之痒 - 从手机GPS模块获取的时间,真的是北京时间么?

去年互联网地图行业开始引入众包模式,国内比较大的地图商,比如四维图新.高德地图.百度地图纷纷开始推出UGC应用,众包给用户采集门址.公交站等信息,并按照工作量给与采集者一定的回报.我曾经玩过某德推出的“道路寻宝”APP,应用内部集成了道路拍拍.门址采集.公交拍拍.POI任务等.该应用有如下限制:(1)为了防止作弊,采集者必须打开GPS,才能拍摄门牌号.(2)为了保证图片清晰,采集工作只能在日出后半小时至日落前半小时内进行.问题在于,应用仅仅读取手机的时间进行日出日落时间判断.在一个用户线上会议,