Quectel GPS模组
本文档详细介绍如何在Neardi设备上使用Quectel GPS模组,包括配置��、数据读取、解析和故障排除等内容。
支持的模组型号
- Quectel EC20(GPS版本):集成GPS/GNSS功能的4G通信模组
- Quectel RG255C-CN:支持北斗、GPS、GLONASS等多星座定位的5G模组
模组特性
GPS/GNSS功能特性
- 支持GPS、北斗、GLONASS、Galileo等多星座定位
- 冷启动时间:≤30秒
- 热启动时间:≤1秒
- 定位精度:水平精度≤2.5米(CEP,开阔天空)
- 支持A-GPS辅助定位
- 工作温度:-35°C ~ +75°C
- 扩展温度:-40°C ~ +80°C
接口说明
- AT指令接口:/dev/ttyUSB2(用于发送AT指令)
- NMEA数据接口:/dev/ttyUSB1(用于接收GPS数据)
快速开始
1. 硬件连接
硬件接线请参考 RG255C-CN 和 EC20 模组的硬件连接部分。
确保GPS天线正确连接到模组的GPS天线接口,并将天线放置在开阔的室外环境中以获得最佳信号接收效果。
天线类型说明
RG255C-CN 使用 无源天线,EC20 使用 有源天线。
- 有源天线:内置低噪声放大器(LNA),需要模组提供直流电源,信号增益更强,适合信号较弱的环境
- 无源天线:不需要外部供电,结构简单,成本较低,适合信号良好的开阔环境
请根据您的模组型号选择对应的天线类型,使用错误的天线类型可能导致定位性能下降或无法正常工作。
2. 检查模组状态
# 检查模组是否正常识别
lsusb | grep Quectel
# 检查串口设备
ls /dev/ttyUSB*
3. 启用GPS功能
# 启用GPS功能并读取GPS数据
echo -e "AT+QGPS=1\r\n" > /dev/ttyUSB2
# 查询GPS状态
echo -e "AT+QGPS?\r\n" > /dev/ttyUSB2
4. 读取GPS数据
# 实时读取NMEA数据
cat /dev/ttyUSB1
详细配置
使用minicom进行交互式操作
除了使用echo命令,您也可以使用minicom进行交互式操作,这样可以实时查看AT指令的响应。
安装minicom
# Ubuntu/Debian
sudo apt install minicom
配置minicom
# 配置minicom
sudo minicom -s
在配置界面中:
- 选择 "Serial port setup"
- 设置串口设备为
/dev/ttyUSB2 - 设置波特率为 115200
- 设置数据位为 8,停止位为 1,无奇偶校验
- 关闭硬件流控和软件流控
- 保存配置并退出
连接到GPS模组
# 连接到GPS模组
sudo minicom -D /dev/ttyUSB2
# 或者直接连接到数据端口查询卫星数据
sudo minicom -D /dev/ttyUSB1
连接后,您可以直接输入AT指令:
AT+QGPS=1
AT+QGPS?
AT+QGPSLOC?
注意:
/dev/ttyUSB2用于发送AT指令控制GPS模组/dev/ttyUSB1用于直接读取NMEA卫星数据
按 Ctrl+A 然后按 X 退出minicom。
GPS基本配置
启用/禁用GPS
# 启用GPS
echo -e "AT+QGPS=1\r\n" > /dev/ttyUSB2
# 禁用GPS
echo -e "AT+QGPS=0\r\n" > /dev/ttyUSB2
# 查询GPS状态
echo -e "AT+QGPS?\r\n" > /dev/ttyUSB2
配置GNSS系统
# 配置支持的GNSS系统(GPS+北斗+GLONASS)
echo -e "AT+QGPSCFG=\"gnssconfig\",1\r\n" > /dev/ttyUSB2
# 查询当前GNSS配置
echo -e "AT+QGPSCFG=\"gnssconfig\"\r\n" > /dev/ttyUSB2
自动启动配置
# 设置开机自动启动GPS
echo -e "AT+QGPSCFG=\"autogps\",1\r\n" > /dev/ttyUSB2
# 禁用开机自动启动
echo -e "AT+QGPSCFG=\"autogps\",0\r\n" > /dev/ttyUSB2
# 查询自动启动配置
echo -e "AT+QGPSCFG=\"autogps\"\r\n" > /dev/ttyUSB2
NMEA输出配置
# 配置NMEA输出语句(默认输出所有语句)
echo -e "AT+QGPSCFG=\"nmeasrc\",1\r\n" > /dev/ttyUSB2
# 设置NMEA输出频率(1Hz)
echo -e "AT+QGPSCFG=\"outport\",\"uartdm\"\r\n" > /dev/ttyUSB2
高级配置
A-GPS配置
# 启用A-GPS
echo -e "AT+QGPSCFG=\"agpsposmode\",1\r\n" > /dev/ttyUSB2
# 配置A-GPS服务器
echo -e "AT+QGPSCFG=\"agpsurl\",\"supl.google.com:7276\"\r\n" > /dev/ttyUSB2
定位模式配置
# 设置定位模式(1=MS-Based, 2=MS-Assisted)
echo -e "AT+QGPSCFG=\"agpsposmode\",1\r\n" > /dev/ttyUSB2
# 设置定位精度要求
echo -e "AT+QGPSCFG=\"accuracy\",50\r\n" > /dev/ttyUSB2
NMEA数据解析
常见NMEA语句格式
GPS模组输出标准的NMEA 0183格式数据,主要包括以下语句:
$GPGGA - 全球定位系统定位数据
$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47
- 123519:UTC时间(12:35:19)
- 4807.038,N:纬度48°07.038'北
- 01131.000,E:经度11°31.000'东
- 1:定位质量(0=无效,1=GPS,2=DGPS)
- 08:使用的卫星数量
- 0.9:水平精度因子
- 545.4,M:海拔高度(米)
$GPRMC - 推荐最小定位信息
$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A
- 123519:UTC时间
- A:状态(A=有效,V=无效)
- 4807.038,N:纬度
- 01131.000,E:经度
- 022.4:地面速度(节)
- 084.4:地面航向(度)
- 230394:日期(23/03/94)
数据解析脚本示例
创建GPS数据解析脚本:
# 创建GPS解�析脚本
sudo nano /usr/local/bin/gps-parser.sh
#!/bin/bash
# GPS数据解析脚本
# 读取GPS数据并解析关键信息
while IFS= read -r line; do
if [[ $line == \$GPGGA* ]]; then
IFS=',' read -ra ADDR <<< "$line"
TIME="${ADDR[1]}"
LAT="${ADDR[2]} ${ADDR[3]}"
LON="${ADDR[4]} ${ADDR[5]}"
QUALITY="${ADDR[6]}"
SATS="${ADDR[7]}"
ALT="${ADDR[9]} ${ADDR[10]}"
if [ "$QUALITY" != "0" ]; then
echo "$(date): GPS定位成功"
echo " 时间: $TIME"
echo " 纬度: $LAT"
echo " 经度: $LON"
echo " 卫星数: $SATS"
echo " 海拔: $ALT"
echo " 质量: $QUALITY"
echo "---"
fi
fi
done < /dev/ttyUSB1
# 添加执行权限
sudo chmod +x /usr/local/bin/gps-parser.sh
# 运行解析脚本
/usr/local/bin/gps-parser.sh
实际应用示例
1. GPS定位服务
创建系统服务自动获取GPS位置:
# 创建GPS服务脚本
sudo nano /usr/local/bin/gps-service.sh
#!/bin/bash
# GPS定位服务
GPS_LOG="/var/log/gps.log"
GPS_DATA="/tmp/gps_current.json"
# 启用GPS
echo -e "AT+QGPS=1\r\n" > /dev/ttyUSB2
sleep 5
# 持续读取GPS数据
while true; do
timeout 10 cat /dev/ttyUSB1 | while IFS= read -r line; do
if [[ $line == \$GPGGA* ]]; then
IFS=',' read -ra ADDR <<< "$line"
if [ "${ADDR[6]}" != "0" ]; then
# 转换为JSON格式
cat > "$GPS_DATA" << EOF
{
"timestamp": "$(date -Iseconds)",
"latitude": "${ADDR[2]} ${ADDR[3]}",
"longitude": "${ADDR[4]} ${ADDR[5]}",
"altitude": "${ADDR[9]} ${ADDR[10]}",
"satellites": "${ADDR[7]}",
"quality": "${ADDR[6]}"
}
EOF
echo "$(date): GPS位置已更新" >> "$GPS_LOG"
break
fi
fi
done
sleep 30
done
故障排除
常见问题及解决方案
1. 无法检测到GPS模组
症状:找不到/dev/ttyUSB设备
解决方案:
# 检查USB设备
lsusb | grep Quectel
# 重启模组
echo -e "AT+CFUN=1,1\r\n" > /dev/ttyUSB2
2. GPS无法定位
症状:NMEA数据中定位质量为0
解决方案:
# 检查GPS状态
echo -e "AT+QGPS?\r\n" > /dev/ttyUSB2
# 检查天线连接
echo -e "AT+QGPSGNMEA=\"GSV\"\r\n" > /dev/ttyUSB2
# 重启GPS
echo -e "AT+QGPS=0\r\n" > /dev/ttyUSB2
sleep 2
echo -e "AT+QGPS=1\r\n" > /dev/ttyUSB2
3. 定位时间过长
症状:首次定位时间超过5分钟
解决方案:
# 启用A-GPS加速定位
echo -e "AT+QGPSCFG=\"agpsposmode\",1\r\n" > /dev/ttyUSB2
# 配置时间同步
echo -e "AT+CCLK?\r\n" > /dev/ttyUSB2
# 检查天线位置(确保在室外开阔环境)
4. GPS无法关闭
症状:使用AT+QGPS=0命令无法关闭GPS功能
解决方案:
# 方法1:强制关闭GPS
echo -e "AT+QGPS=0\r\n" > /dev/ttyUSB2
**注意**:如果该指令无效,请尝试方法2重启GPS功能。
# 方法2:重启模组GPS功能(推荐)
echo -e "AT+CFUN=1,1\r\n" > /dev/ttyUSB2
sleep 5
echo -e "AT+QGPS=0\r\n" > /dev/ttyUSB2
# 方法3:禁用自动启动后重启
echo -e "AT+QGPSCFG=\"autogps\",0\r\n" > /dev/ttyUSB2
echo -e "AT+CFUN=1,1\r\n" > /dev/ttyUSB2
5. NMEA数据乱码
症状:接收到的数据格式错误
解决方案:
# 检查串口配置
stty -F /dev/ttyUSB1
# 重新配置串口
stty -F /dev/ttyUSB1 115200 cs8 -cstopb -parenb
# 检查NMEA输出配置
echo -e "AT+QGPSCFG=\"nmeasrc\"\r\n" > /dev/ttyUSB2
性能优化
1. 快速定位配置
# 启用所有GNSS系统以加快定位
echo -e "AT+QGPSCFG=\"gnssconfig\",1\r\n" > /dev/ttyUSB2
# 启用A-GPS
echo -e "AT+QGPSCFG=\"agpsposmode\",1\r\n" > /dev/ttyUSB2
# 设置较高的定位频率
echo -e "AT+QGPSCFG=\"gpsnmeatype\",31\r\n" > /dev/ttyUSB2
2. 功耗优化
# 设置GPS省电模式
echo -e "AT+QGPSCFG=\"powermode\",1\r\n" > /dev/ttyUSB2
# 按需启动GPS(而非常驻)
echo -e "AT+QGPSCFG=\"autogps\",0\r\n" > /dev/ttyUSB2
设备文件说明
AT指令参考
| 指令 | 功能 | 示例 |
|---|---|---|
| AT+QGPS | 启用/禁用GPS | AT+QGPS=1 |
| AT+QGPS? | 查询GPS状态 | AT+QGPS? |
| AT+QGPSCFG | GPS配置 | AT+QGPSCFG="autogps",1 |
| AT+QGPSGNMEA | 获取NMEA数据 | AT+QGPSGNMEA="GGA" |
| AT+QGPSEND | 结束GPS会话 | AT+QGPSEND |
回车和换行说明
- \r\n:确保AT指令�被正确解释并执行
- 在某些系统中可能需要使用不同的行结束符
Quectel_EC2x&EG2x&EG9x&EM05系列_GNSS_应用指导_V1.2.pdf 更多详细 AT 指令见此附件