查看: 5702|回复: 1

树莓派连接GPS模块

[复制链接]
  • TA的每日心情
    擦汗
    2020-3-24 10:37
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2018-11-6 13:35:55 | 显示全部楼层 |阅读模式
    分享到:
    最近当初买树莓派时的那个梦想又萦绕心头,决定抽空完成一下当年的计划~ GPS模块是其中很重要的一环,于是在某宝上搜索,找了一家相对便宜也很轻巧的GPS模块,而且这个模块和天线是合体的,非常省空间。
    几天后快递来啦,今天有空来鼓捣一下 o(^▽^)o 先来看看这个模块,这是天线的一面
    081727163937685.jpg
    这是组装好之后的效果
    081728293151375.jpg
    我给树莓派安装的是 Raspbian,基于Debian;像 Pidora 的话应该大同小异吧,以下操作均为 Raspbian。
    下面来简述一下吧。树莓派串口通信网上有很多教程了,我也是搜索着一步步摸索出来的。要想连接上这个GPS模块,先得知道模块和树莓派的针脚定义,然后要对树莓派进行一些设置。

    一、树莓派配置修改
    树莓派的串口据了解,默认是用于SSH调试的,如果需要使用串口连接其他设备需要进行两步修改:
    1. 修改 /etc/inittab
    1. sudo vi /etc/inittab
    复制代码
    (如果用不惯vi,又是用图形界面,可以选择用leafpad)

    注释掉文件中的这一行,以关闭串口登录
    1. T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
    复制代码
    这一行一般位于文件最后一行,注释的方式是在前面加一个“#”
    1. #T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
    复制代码
    2. 修改 /boot/cmdline.txt
    1. sudo vi /boot/cmdline.txt
    复制代码
    将下面高亮的部分删除
    1. dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
    复制代码
    最后变成了:
    1. dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
    复制代码
    修改好这两部分之后,需要重启树莓派
    1. sudo reboot
    复制代码

    二、串口连接
    现在要对GPS模块和树莓派进行连接,根据GPS模块的文档和树莓派的针脚定义一共需要连接4根线:VCC 5V、GND 接地、TXD和RXD。树莓派上所谓的TOP和BOTTOM,指的是GPIO针脚的两排,BOTTOM是靠近SD卡的一侧。对硬件我也是小白哈,连错了,大家千万要注意模块上的TXD连接树莓派的RXD,模块的RXD连接树莓派的TXD!我的连接方式如下图:
    082008090659506.png

    三、通过minicom获取串口数据
    经过上面两步的操作树莓派就和GPS模块连接好了~ 那如何获取GPS模块发出的内容呢,就要通过 minicom 这个工具,来获取串口的数据。
    1. sudo apt-get install minicom
    复制代码
    安装好之后通过minicom命令获取串口上的数据:
    1. minicom -b 9600 -o -D /dev/ttyAMA0
    复制代码
    -b 设定的是波特率,是模块参数而定;-o 是不初始化Modem且不锁定文件;-D 设定的是接口
    如果一切顺利的话,应该能看到这样的画面(Press CTRL-A Z for help on special keys 下面哗哗的出现内容):
    082016074569921.png
    这就说明一切 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模块
    1. sudo apt-get install python-serial
    复制代码
    安装好后先通过python命令,进入python命令行进行测试
    1. python
    复制代码
    首先,导入serial模块
    1. import serial
    复制代码
    然后打开串口,存放到 ser 中,方法接收一个端口名,和一个波特率
    1. ser = serial.Serial("/dev/ttyAMA0", 9600)
    复制代码
    通过ser的read()方法只能获取一个字符,但read()方法有一个接收字符长度的重载,首先通过ser.inWaiting()方法获取总长度,再通过ser.read()读取
    1. ser.read(ser.inWaiting())
    复制代码
    这样就能获取数据了!我们只需要对read到的数据进行分析、处理即可,写成 .py 脚本即可。

    五、NMEA-0183 一些数据的计算方式
    需要说两个关于NMEA-0183协议返回内容的计算方式,一个是时间,另一个是经纬度。
    1. GGA和RMC的时间
    来看一下GGA和RMC返回的格式:
    1. <p>$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh<CR><LF></p><p>$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR><LF></p>
    复制代码
    GGA和RMC都会返回时间,他们的第一个参数<1>就是UTC时间,即协调世界时,格式为hhmmss,要换算成北京时间只需要加上8小时即可;RMC的<9>为UTC日期,格式为ddmmyy(日月年)。下面列一条RMC返回的数据:
    1. $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(* ̄▽ ̄*)ブ

    转载自博客园 呼呼小笼包的博客




    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2020-9-14 10:30
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2020-9-9 16:03:26 | 显示全部楼层
    阁下是兰州的?
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-25 10:03 , Processed in 0.121688 second(s), 19 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.