产品说明:
- 支持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微数据线 |
如何连线
第一种方法:
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中的示例代码
- 使用以下代码可以通过libgps库从本地端口2947获取gpsd进度的GPS信息。
- libgps 的链接我贴出来,你可以看看: http://www.catb.org/gpsd/client-howto.html
- GPS客户端HOWTO
- 代码名称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类上过滤,即时间位置速度报告,然后打印出相关信息。
- 使用pynmea2解析NMEA句子
下面的python脚本显示了如何通过直接连接到串行接口来访问GPS数据。
它过滤$ GPGGA NMEA句子,然后使用pynmea2来解析数据。
Pynmea2可以安装:
pi@raspberrypi ~ $ pip install pynmea2
到这里就先告一段落. 下一篇帖子我做一个和高德地图 API 结合的例子.