gray6666 发表于 2020-12-11 16:19:39

树莓派&全球定位系统

一、项目背景全球定位系统(Global Positioning System,GPS)是一种以人造地球卫星为基础的高精度无线电导航定位系统,它在全球任何地方以及近地空间都能够提供准确的地理位置、精确及其他的信息。它是由空间卫星、地面监控和用户接收等三大部分组成。在太空中有24颗卫星组成一个分布网络,分别分布在6条离地面2万公里、倾斜角为55°的地球准同步轨道上,每条轨道上有4颗卫星。GPS卫星每隔12小时绕地球一周,使地球上任一地点能够同时接收7~9颗卫星的信号。地面共有1个主控站和5个监控站负责对卫星的监视、遥测、跟踪和控制。它们负责对每颗卫星进行观测,并向主控站提供观测数据。主控站收到数据后,计算出每颗卫星在每一时刻的精确位置,并通过3个注入站将它传送到卫星上去,卫星再将这些数据通过无线电波向地面发射至用户接收端设备。
本次案例模仿GPS系统,具体功能为1.GPS卫星定位,2.生成位置地图,3.谷歌浏览器自动打开地图。
二、硬件和软件硬件:1.树莓派4B2G版 *1https://www.dfrobot.com.cn/goods-1976.html2.GPS+BDS北斗双模卫星导航模块 *1 (需手工焊接针排,稍有难度,希望以后能给直接焊接好)https://www.dfrobot.com.cn/goods-2844.html3.USB to Serial 转串口模块 *1集成了CP2103芯片,树莓派免驱动,即插即用https://www.dfrobot.com.cn/goods-242.html
软件:树莓派brust系统,Thonny编辑器或python3
三、知识准备
1.UART:一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用于主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,如EEPROM通信。
2.serial串口:本次只用树莓派4B miniUSB串口UART测试。树莓派有两个串口可以使用,一个是硬件串口(/dev/ttyAMA0),另一个是mini串口(/dev/ttyS0)。硬件串口有单独的波特率时钟源,性能好,稳定性强;mini串口功能简单,稳定性较差,波特率由CPU内核时钟提供,受内核时钟影响。3.pip 用来安装来自PyPI的python所有的依赖包,并且可以选择安装任何在PyPI上已上传的先前版本的依赖包;apt-get 用来安装软件、更新源、也可以用来更新自Ubuntu的典型依赖包,树莓派系统也可以使用该命令;典型安装即意味着它只是安装(最新发布或最近一个的)单一版本,并且我们不能决定我们要安装的依赖包的版本或选择它之前的版本。
4.注意:serial库和pyserial库不一样卸载serial库(不删除后续会报错),安装pyserial库(python调用serial的API接口库)

pyserial库python调用串口的API接口,可用pip3 list 命令查看,没有可以运行pip3 install pyserial安装




四、技术实现:
1.GPS模块修改串口+树莓派+python读取数据方案:
树莓派(3/4代)板载蓝牙模块,默认的硬件串口是分配给蓝牙模块使用的,我的树莓派声音输出是蓝牙音箱,正好冲突;而且该操作较为复杂,容易破坏树莓派,不适合初学者使用,所以果断放弃该方案。
2.GPS模块USB转串口+树莓派+python读取数据方案:不需要复杂的调整,GPS模块直接和转接模块连接,防止插错GPIO口烧毁板子,数据交换简单高效。
硬件连接参考:GPS模块VCC连接USB转接模块的5VGPS模块GND连接USB转接模块的GNDGPS模块TX连接USB转接模块的RXGPS模块RX连接USB转接模块的TXUSB转接模块USB连接树莓派USB口https://mc.dfrobot.com.cn/data/attachment/album/202012/11/143442ox40hzzprdhhlhdd.jpg
https://mc.dfrobot.com.cn/data/attachment/album/202012/11/143438vwn6l0hdwon11o6m.jpg
https://mc.dfrobot.com.cn/data/attachment/album/202012/11/143449ekczo4scuuasziuo.jpg
https://mc.dfrobot.com.cn/data/attachment/album/202012/11/143440v33tjtwu31lt3z9f.jpg
五、软件实现1.运行lsusb命令看是否检测出来
2.安装串口工具   运行 sudo apt-get install minicom 运行串口工具    运行 minicom -b 9600 -o -D /dev/ttyUSB0 屏幕中可以收到大量信息具体可参考模块的说明https://www.dfrobot.com.cn/images/upload/File/20200807111306dx8497.pdf 注意1:模块首次启动定位时间:32 秒(也有可能是几分钟,要看具体环境而定),定位完成后模块的红色提示灯会一直闪动。 注意2.模块天线一定要放在窗外,做好在空地中做测试,可以减少卫星的遮挡,提高实验效率。https://mc.dfrobot.com.cn/data/attachment/album/202012/11/144850fmw3kziquutn91mi.jpg键盘CTRL+A,可以调出菜单;键盘X退出串口工具



3.代码解析导入串口库,导入folium地图库,导入webbrowser库(调用浏览器打开生成地图网页)import serial
import folium
import webbrowser打开串口,flag为标志为0时生成地图,1时不再重复生成ser = serial.Serial("/dev/ttyUSB0",9600)
flag=0
读取地理坐标try:
      line = str(str(ser.readline())) #返回值是bytes,头两位是b',所以数据需要在第二位开始截取
      if line.startswith('$GNGGA'): #GNGGA解析数据
            line = str(line).split(',')# 字符分隔
            data_jng = float(line[:3]) + float(line)/60
            # 按照说明解析经度,除60将分转化为度
            data_wei = float(line[:2]) + float(line)/60
#维度同理可求
            print("经度:",data_jng)
            print("维度:",data_wei)
生成并打开地图city_map = folium.Map(location=, zoom_start=14)
city_map.save('city_Map.html')
if flag==0:
webbrowser.open('city_Map.html')
flag=1
完整代码import serial
import folium
import webbrowser

ser = serial.Serial("/dev/ttyUSB0",9600)
flag=0

try:
    while True:
      line = str(str(ser.readline()))
      if line.startswith('$GNGGA'):
            line = str(line).split(',')
            data_jng = float(line[:3]) + float(line)/60
            data_wei = float(line[:2]) + float(line)/60
            print("经度:",data_jng)
            print("维度:",data_wei)
            city_map = folium.Map(location=, zoom_start=14)
            city_map.save('city_Map.html')
            if flag==0:
                webbrowser.open('city_Map.html')
                flag=1
except KeyboardInterrupt:
    ser.close()

六、整体测试代码


1.如果卫星信号不好,无法获取信息,程序会报错
2.地图文件生成和打开较慢,请耐心等待


pATAq 发表于 2021-1-3 17:06:13

葛老师的帖子很好,我也想用上手头的GPS模块,再配一个震动模块,装在小电动上,看看道路平坦程度。
另外这个GPS模块搜星速度和信号强度咋样

gray6666 发表于 2021-1-4 08:49:44

文档建议在开阔地测试,我是在窗户缝把天线伸出去搜索的,效果还可以;需要注意首次冷启动加电需要32秒后才有信号。

奥本 发表于 2022-5-18 22:25:01

你好,为啥保存好的HTML文件用浏览器打开,一直在转圈圈,显示不出来

奥本 发表于 2022-5-18 22:26:48

pATAq 发表于 2021-1-3 17:06
葛老师的帖子很好,我也想用上手头的GPS模块,再配一个震动模块,装在小电动上,看看道路平坦程度。
另外这 ...


你好,为啥保存好的HTML文件用浏览器打开,一直在转圈圈,显示不出来

gray6666 发表于 2022-5-19 08:13:09

奥本 发表于 2022-5-18 22:26
你好,为啥保存好的HTML文件用浏览器打开,一直在转圈圈,显示不出来

不知道,我这里没遇到过呐

gray6666 发表于 2023-3-9 15:16:13

耘想 发表于 2023-3-7 08:48
6666666666

{:6_207:}{:6_207:}{:6_207:}

花生编程 发表于 2023-7-30 21:57:15

厉害厉害

花生编程 发表于 2023-7-30 21:58:32

好棒啊!!

三春牛-创客 发表于 2023-7-31 22:26:07

厉害厉害!!!

三春牛-创客 发表于 2023-7-31 22:27:08

赞赞赞赞赞!
页: [1]
查看完整版本: 树莓派&全球定位系统