产品说明:
支持Raspberry Pi型号A,B,A +,B +,Zero,2,3,内置L80-39 GPS芯片。 使用UART或USB通信, 默认波特率 9600bps。 USB 接口采用CP2102作为USB转UART桥接芯片,稳定且速度更快。 L80-39具有66个搜索通道和22个同步跟踪通道,它可以在室外的最短时间内采集和跟踪卫星。我这里要强烈强调一下, 室内你搜不到星的哦, 一定要在室外,人家手册上这么写,你就去室外操作好吗? 别问为啥, 用脑子想想啊,卫星在天上,你要搜星,你喵在家里搜哪门子的星?
注意 我再次强调该模块适合户外操作。请把Antana(就是传说中的天线)放在露天。
兼容性列表(基本上只要支持串口通信的设备基本上都能支持,例如 各种 MCU, 51 单片机,arduino, 树莓派,香蕉派, Tinker board 等…
平台 USB端口GPS模块 Raspberry Pi 3型号B Plus √ 树莓派零 √ Raspberry Pi零W √ Raspberry Pi 3型号B. √ Raspberry Pi 2模型B. √ Raspberry Pi Model B + √
功能
-165 dBm灵敏度,1Hz(默认),最高5Hz,66个通道 启动时至少消耗100mA电流。 PPS输出可用于与卫星协调时间。 定时精度: 1PPS输出 15ns 内部贴片天线在室外使用时工作良好 金属的SMA连接器用于外部有源天线,可以在室内使用,但是天线必须放置在室外. fix状态LED闪烁,让您知道GPS何时确定当前坐标 EASY™,先进的AGPS技术,无需外部存储器 支持时间服务应用程序,可通过PPS同步NMEA功能实现 内置LNA可提高灵敏度 RTC电池兼容 1×8公头,USB micro接口 包括CP2102模块串行转换器USB 2.0到TTL UART
参数
类型 值 卫星 66个接受通道,22个跟踪通道 工作电压 4.5-5.5V 重量 4.35克 最大电流 最大100mA 工作温度 -40〜+ 85℃ 规模 16.6x26x18.6(毫米) 全球定位系统 L80-M39 贴片天线尺寸 15.0 x 15.0 x 4.0mm 位置准确性 <2.5M CEP 速度准确度 <1.0米/ s的 没有ESEY的暖/冷启动 <35S ESEY热/冷启动 <15秒 获取灵敏度 -148dBm 跟踪灵敏度 -165dBm 更新率 1Hz(默认)高达5Hz 波特率 4800~115200 bps默认为9600bps 协议 NMEA 0183 安装电缆 1 * 8堆叠标头USB微数据线
如何连线
第一种方法:
这是使用 usb-to-ttl 的线缆接入 GPS的 Uart 引脚.
Uart风格接法:
由于Raspberry Pi 3,Model B的串口问题,它可能会导致意外问题,我们建议您不要将带有Raspberry Pi的GPS模块直接连接到GPIO引脚。当然,如果你要坚持用,也是可以的,只是需要将树莓派3B 和3B+的蓝牙功能关闭, 然后再将/dev/ttyAMA0设备释放出来,即可用树莓派的 GPIO 引脚和设备通信而不用占用 USB口了,操作步骤我大致讲解一下:
在树莓派上通过 sudo raspi-config 找到接口设置然后打开串口设备,机器上会出现一个/dev/ttyS0设备. 在树莓派上编辑/boot/config.txt 配置文件,检查 enable_uart=1 是否存在. 在树莓派上编辑/boot/cmdline.txt 配置文件,将整行复制后注释掉一行, 并将未注释行的 console=/dev/ttyAMA0, 115200 信息删除. 重启树莓派并在启动后安装适合自己的串口软件例如 minicom 或者别的.
1.如果是使用一根USB-to-TTL线 连接GPS模块和Raspberry Pi,你可以像这张图表一样连线:
GPS模块 电线颜色 VCC 红线 GND 黑丝 TXD 绿线 RXD 白线
2.重启 Raspberry Pi并登录,如果在桌面环境中使用raspberry Pi,请打开终端并按照后面步骤操作。
USB风格接法:
只需使用microUSB电缆连接Raspberry Pi USB端口和GPS模块,并在Raspberry Pi上供电。
如何使用
1.上电后登录系统。您可以打开终端并输入以下命令来安装GPS模块的包。sudo apt-get update && sudo apt-get -y install gpsd gpsd-clients python-gps
2.启动gpsd服务并对其进行控制。 启用它: sudo systemctl enable gpsd.socket
启动它: sudo systemctl start gpsd.socket
重新启动它: sudo systemctl restart gpsd.socket
检查状态: sudo systemctl status gpsd.socket
4.配置文件是在/ etc / default / gpsd中 修改gpsd的配置文件根据/ dev文件夹中串口的名称修改“DEVICE”参数。 如果通过USB电缆将其连接到Raspberry Pi,通常将其命名为“/ dev / ttyUSB0”。 您可以使用“nano”或“vim.tiny”编辑器来完成它。
我下面是写好的一个例子,我只是用 grep -v “#” /etc/default/gpsd | grep -v “^$” 过滤掉了配置文件中的注释和空行, 你们的配置如果是用 USB 接 micro USB口,然后直接插树莓派的 USB 口的,和我的配置基本是差不多的,除非你树莓派上还接了好多 USB设备,否则默认第一个设备就是/dev/ttyUSB0 , 参数 GPSD_OPTIONS= ” -F /var/run/gpsd.sock” 你这里定义啥名字就用啥名字行么?别乱改..否则找不到文件又是一顿刺挠, 你又要到群里喊叫代码不行,用不了.看仔细了哦~
重启服务:sudo systemctl restart gpsd.socket
最后,使用此命令从GPS模块获取信息。sudo cgps -s
一般情况下,如果不出幺蛾子,那么你会看到如下的信息,但是如果搜不到卫星的时候也很正常,你以为卫星时时刻刻都在你头顶上呢? 也许它跑开了一会儿,耐心等待, 基本上我们搜星也都是 30 多秒-5 分钟左右很正常, 这是 GPS 不是北斗, 自从美国出了个川普,GPS 就没有好用过…. 5. GPS状态如下:
客户端C中的示例代码
#include <gps.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <math.h> int main() { int rc; struct timeval tv; struct gps_data_t gps_data; if ((rc = gps_open("localhost", "2947", &gps_data)) == -1) { printf("code: %d, reason: %s\n", rc, gps_errstr(rc)); return EXIT_FAILURE; } gps_stream(&gps_data, WATCH_ENABLE | WATCH_JSON, NULL); while (1) { /* wait for 2 seconds to receive data */ if (gps_waiting (&gps_data, 2000000)) { /* read data */ if ((rc = gps_read(&gps_data)) == -1) { printf("error occured reading gps data. code: %d, reason: %s\n", rc, gps_errstr(rc)); } else { /* Display data from the GPS receiver. */ if ((gps_data.status == STATUS_FIX) && (gps_data.fix.mode == MODE_2D || gps_data.fix.mode == MODE_3D) && !isnan(gps_data.fix.latitude) && !isnan(gps_data.fix.longitude)) { /* gettimeofday(&tv, NULL); EDIT: tv.tv_sec isn't actually the timestamp! */ printf("latitude: %f, longitude: %f, speed: %f, timestamp: %lf\n", gps_data.fix.latitude, gps_data.fix.longitude, gps_data.fix.speed, gps_data.fix.time); //EDIT: Replaced tv.tv_sec with gps_data.fix.time } else { printf("no GPS data available\n"); } } } sleep(3); } /* When you are done... */ gps_stream(&gps_data, WATCH_DISABLE, NULL); gps_close (&gps_data); return EXIT_SUCCESS; }
gcc -o gps gps.c -lm -lgps sudo ./gps
GPS客户端的Python解决方案
在Raspberry Pi上用 python 来接受 GPS 数据是最简单的,但是需要你安装一个 pyserial 的模块.
以下是三个如何使用python从连接到Raspberry Pi的GPS接收器获取GPS数据的示例。
思路: 使用GPSD客户端库, 然后手动解析NMEA句子或者使用pynmea2解析NMEA句子,也可以使用GPSD客户端库
gpsd客户端库基于JSON。JSON对象具有“类”属性(例如TPV,SKY,DEVICE.etc …),可用于过滤不同的信息。 请参阅:[ http://www.catb.org/gpsd/gpsd_json.html | gpsd_json]
本指南介绍了如何在Raspberry Pi上运行gpsd。 下面的示例python脚本在TPV类上过滤,即时间位置速度报告,然后打印出相关信息。
由于 python 代码是需要考虑缩进的.所以我这里就截图给你看了. 下面是另一种方式,需要安装 gps 的库
这个就需要 pyserial 的库, 需要你 pip install pyserial 安装一下.
下面的python脚本显示了如何通过直接连接到串行接口来访问GPS数据。 它过滤$ GPGGA NMEA句子,然后使用pynmea2来解析数据。 Pynmea2可以安装:
pi@raspberrypi ~ $ pip install pynmea2
这个方法比较简单, 另外还有一种方法就是直接自己解析数据结构,只用一个库,就是 pyserial. 尝试看看,对于其刷新速度,已经在产品特性里面介绍到了很多都是直接来自官方文档的内容,例如串口更新速率从 4800~115200bps ,默认是 9600bps, 更新率 1HZ 默认, 最高到 5Hz, 支持的协议 NMEA 0183 , 你们拿到数据后,如果是要用在一些网站的 api 上,需要转化一下格式的. 这个看 tater.li 之前帖子.
到这里就先告一段落. 下一篇帖子我做一个和高德地图 API 结合的例子.