树莓派连接GPS模块,python获取GPS数据
文章主要内容:
- 模块之间的连接
- 树莓派识别gps模块
- 使用Python语言获取GPS数据
1.连线 ---- 使用 USB转TTL转换器,将树莓派和GPS模块连接
需要的设备:gps模块,gps天线,串口转usb转换器,杜邦线
1.1.我使用的gps模块如下,但是gps模块是串口的,和树莓派连接太麻烦,后期的串口调试对初学者也比较困难。所以,小白可以选择一个串口转USB转换器,使用USB连接树莓派,这样用起来比较简单。
1.2.转换器和gps模块连线方法如下图(只需要连四根线,图是盗来的),串口针脚处有字母标记,不要连错了:
1.3.GPS模块需要连接天线,天线有两种接口可以选择:smr 和 ipex (下图):
我使用的是smr接口的gps天线,天线长这样(下图):
2.树莓派识别GPS设备
把连接好天线和usb转接器的gps设备插到树莓派上,建议插到树莓派4个usb口的最上面靠里的usb口,那个口好像对应usb0
具体查看你插到了哪个usb口,可以使用命令:
ls /dev/ttyUSB*
然后会显示你使用了哪个usb口,如下图:
接下来,用软件测试连接是否成功,我们是用minicom这个软件来测试
首先,安装minicom :
sudo apt-get install minicom
然后,安装gpsd相关库:
sudo apt-get install gpsd gpsd-clients python-gps
安装好之后,使用命令,获取串口上的数据(注意波特率,我的gps设备是9600,usb口是usb0)
minicom -b 9600 -o -D /dev/ttyUSB0
注: -b 设定的是波特率,是模块参数而定;-o 是不初始化Modem且不锁定文件;-D 设定的是接口
如果一切顺利,会看到这样的图片(懒得截图了,网上盗一个)
minicom一些使用技巧:
在 minicom 界面里,可以按Ctrl+A,然后按Z获取帮助;Ctrl+A、然后按Q来退出
3.python语言获取解析gps数据
想要用python解析gps数据,就要了解gps模块的数据协议。根据NMEA协议,我们从传感器上接收到的GPS经纬度数据的其中一行---GPRMC行的格式如下:
注:根据上一张命令行图片里面的数据,我们发现gps模块发送了好多行数据,其中,有很多行数据都可以用来定位,比如GPGGA,GPRMC。这里,我们选择的是GPRMC行(百度百科:推荐定位信息GPRMC)
例:$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50
字段0:$GPRMC,语句ID,表明该语句为Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐最小定位信息
字段1:UTC时间,hhmmss.sss格式
字段2:状态,A=定位,V=未定位
字段3:纬度ddmm.mmmm,度分格式(前导位数不足则补0)
字段4:纬度N(北纬)或S(南纬)
字段5:经度dddmm.mmmm,度分格式(前导位数不足则补0)
字段6:经度E(东经)或W(西经)
字段7:速度,节,Knots
字段8:方位角,度
字段9:UTC日期,DDMMYY格式
字段10:磁偏角,(000 - 180)度(前导位数不足则补0)
字段11:磁偏角方向,E=东W=西
字段12:模式,A=自动,D=差分,E=估测,N=数据无效(3.0协议内容)
字段13:校验值($与*之间的数异或后的值)参考:https://www.jianshu.com/p/f164c433baa1
然后,我们使用Python现成的库 pymea2来解析gps数据:
安装库
pip3 install pynmea2
如何使用 pymea2 库来解析 gps 数据的代码如下:
import serial
import pynmea2
import timedef gps_get():print("开始测试:")#创建gps串口的句柄ser = serial.Serial("/dev/ttyUSB0", 9600 ) print("获取句柄成功,进入循环:")count = 0while(True):#读取一行gps信息#line = ser.readline()line = str(str(ser.readline())[2:]) # 将读取到的字节码转化成字符串(去掉前2位的无用字符)print(line)# 寻找有地理坐标的那一行数据if line.startswith('$GPRMC'):print("*********************")line = line.replace('\\r\\n\'', '') # 字符串结尾的无用换行符print(line)rmc = pynmea2.parse(line)print("当前坐标:")print("北纬(度分秒):", float(rmc.lat)/100 , "度")print("东经(度分秒):", float(rmc.lon)/100 , "度")print("************")print("北纬(十进制):", rmc.latitude , "度")print("东经(十进制):", rmc.longitude, "度")print("***************")count = count + 1if(count == 100):breakif __name__ == "__main__":gps_get()
我们需要注意一下点:
【1】 使用 pynmea2.parse(line) 来解析GPS的数据坐标,其输入必须严格按照其解析格式来,不能有其他非法字符(所以我的代码中,当我把数据转换成字符串以后,去掉了字符串首位的无用字符,去掉了结尾的换行符等转义字符,否则无法解析(试错n遍。。。))
【2】解析结果,返回的是一个类,我称之为 rmc ,其中有很多有意义的变量,你们可以自己百度拓展。我代码中使用到的,是 度分秒格式 的 经度lon 和纬度 lat ,还有十进制格式(float类型)的纬度latitude和 经度longitude 。我建议只用后者10进制,因为在地图中显示好像也是用的十进制
有任何疑问可以在评论区提出哦,点个赞再走呗(* ̄︶ ̄)
树莓派连接GPS模块,python获取GPS数据相关推荐
- python自动获取天气_用python获取天气数据,并作定时播报
原标题:用python获取天气数据,并作定时播报 数据挖掘入门与实战 公众号: datadw 思路 1.调用和风天气的API,获取天气数据 2.用百度语音API,将天气数据合成语音 3.用树莓派每天早 ...
- Python零基础速成班-第12讲-Python获取网络数据Socket,API接口,网络爬虫Crawler(制作弹幕词云)
Python零基础速成班-第12讲-Python获取网络数据Socket,API接口,网络爬虫Crawler(制作弹幕词云) 学习目标 获取网络数据Socket API接口 网络爬虫Crawler(制 ...
- 使用Python获取ADS-B数据,并显示飞机航迹动态
使用Python获取ADS-B数据,并显示飞机航迹动态. 1.绘图环境 1)使用cartopy显示地理位置信息 import cartopy.crs as ccrs from cartopy.io.i ...
- Python 获取接口数据,解析JSON,写入文件
Python 获取接口数据,解析JSON,写入文件 用于练手的例子,从国家气象局接口上获取JSON数据,将它写入文件中,并解析JSON: 总的来说,在代码量上,python代码量要比java少很多.而 ...
- python 获取股市数据 baostock + 画K线图 mpl_finance
python 获取股市数据 baostock + 画K线图 mpl_finance 获取股票数据 安装baostock库 baostock库的特性 获取A股K线数据 核心代码如下 完整代码如下 画K线 ...
- python获取股票数据,并计算技术指标
python获取stock数据. 计算技术指标使用talib库. 方法一:使用 pandas_datareader.data 库,该库获取的历史数据更多一些.上证股票在股票代码后面加上".S ...
- matlab python 股票,股票行情数据获取-Python获取股票数据?
Python获取股票数据? 这里推荐一个包―tushare,tushare是一个免费.开源的python财经数据接口包.主要实现了从数据采集.清洗加工到数据存储过程,能够为金融分析人员提供快速.整洁的 ...
- 【搬运自用】 用Python获取网络数据 -Python100天从新手到大师Day57(GitHub)
用Python获取网络数据 原作者:骆昊 https://github.com/jackfrued/Python-100-Days 更多内容欢迎查看并订阅专栏'Python从新手到大师'和'Pytho ...
- 树莓派连接EC20模块
树莓派连接EC20模块 1.下载串口助手 sudo apt-get install minicom 2.配置串口 输入 sudo minicom 按下ctrl+A,松开然后按下Z 输入O 选择Seri ...
- MapBox离线地图+python获取瓦片数据
工作中需要使用离线地图. 使用工具:MapBox离线地图+python获取瓦片数据 前端页面: <!DOCTYPE html> <html> <head><m ...
最新文章
- 没学过python、但是还是有公司要-学习python 基础都会了 为什么还是做不出项目呢?...
- tf.keras.preprocessing.image_dataset_from_directory() 简介
- UVA 10594 Data Flow
- DLNg[结构化ML项目]第二周迁移学习+多任务学习
- 搞懂静态变量static
- MySQL的CSV引擎应用实例解析
- 计算机系解说词,计算机室解说词
- Spark TopN
- abaqus 不收敛问题
- Flex Builder 3.0正式版+破解补丁
- 通信upf是什么意思_管理UPF的方法、装置及系统与流程
- VLAN间路由的配置(一)普通VLAN间路由的配置
- 【HAVENT原创】修改 CentOS 服务器名称
- 2014 计算机学科 排名,2014QS世界大学学科排名:计算机学科排行榜
- 数学:AI和大数据的基础
- HTML_body中常用的标签部分
- std::uninitialized_copy::_Unchecked_iterators::_Deprecate
- Java内存区域与Java内存模型
- c语言子函数定义与调用,C语言的简单函数定义与调用
- AD中PCB走线实现开窗