基于 4G 模组的 GPS 小型定位器

概述

使用 4G Cat.1 模组可以满足一些中低速数据传输的应用场景,如进行实时定位。本文介绍使用 QUECTEL 的 EG800K-CN
模组进行 GPS 定位的方法以及进行实际场景追踪测试的流程。

硬件准备

通信模组

串口转换器

天线

物联网卡

软件工具准备

在 Ubuntu 22.04 上如果无法为 ch340串口转 USB 工具生成 ttyUSBx 设备文件,并显示下面的错误:

1
usb 3-1: usbfs: interface 0 claimed by ch341 while 'brltty' sets config #1

表明出现了驱动占用问题,此时卸载 ‘brltty’ 即可:

$ sudo apt-get remove brltty

最后重新插拔设备。

串口工具

在 Ubuntu 下可以使用 CuteCom 串口工具,连接设备后,发送 ATI 命令,获取如下信息:

1
2
3
4
5
[17:31:24:250] Quectel␍␊
[17:31:24:250] EG800K␍␊
[17:31:24:250] Revision: EG800KCNGCR07A04M04␍␊
[17:31:24:255] ␍␊
[17:31:24:255] OK␍␊

表明通信正常

AT 命令测试

基本信息

1
2
3
4
$ ATI       # 获取 MT 的 ID 信息
$ AT+GMI # 请求制造商信息
$ AT+GSN # 请求国际移动设备识别码
$ AT+

SIM卡信息

将 SIM 物联网卡 插入 4G 模组中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ AT+CIMI       # 查询 IMSI
460066613329084␍␊

$ AT+CLCK="SC",2 # 查询 SIM 的锁定状态
+CLCK: 0␍␊ # 未锁定

$ AT+QCCID # 查询 CCID
+QCCID: 89860622330027340843␍␊

$ AT+QINISTAT # 查询 SIM 卡初始状态
+QINISTAT: 3␍ # CPIN READY + SMS Done

$ AT+CPIN=? # 查询 SIM 卡是否需要密钥解锁
+CPIN: READY␍␊ # 无密码等待输入 MT

$ AT+QSIMDET=1,0 # 设置(U)SIM 卡插入时,(U)SIM 检测引脚为低电平。
$ AT+QSIMSTAT=1 # 使能(U)SIM 卡的插拔状态上报功能。
$ AT+QSIMSTAT? # 查询当前(U)SIM 卡的插拔状态。

网络信息

连接上 GNSS 天线(可使用有源天线或者无源天线)和 LTE 天线。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$ AT+QCFG="nwscanmode"  # 查询支持的网络制式
+QCFG: "nwscanmode",3␍␊ # 3 代表仅支持 LTE

$ AT+QCFG="band" # 查询 UE 的网络搜索频段
+QCFG: "band",0x0,0x1e200000095␍␊
# 不改变 GSM 和 WCDMA 的频段;支持 LTE B38、LTE B39、LTE B40、LTE B41 、LTE B34、LTE B8、 LTE B5、LTE B3 和 LTE B1 频段。

$ AT+COPS? # 查询当前找网模式和当前所选运营商
+COPS: 0,0,"CHN-UNICOM",7␍␊
# 自动搜网;长字符串格式;中国联通;网络接入技术(E-UTRAN)

$ AT+CREG=2 # 启用带有位置信息的网络注册 URC
OK␍␊

$ AT+CREG? # 查询网络注册状态
+CREG: 2,1,"XXXX","YYYYYY",7␍␊
# 带有位置信息的网络注册URC;已注册;位置区编号;小区ID;接入技术(E-UTRAN)

$ AT+QNWINFO # 查询网络信息
+QNWINFO: "FDD LTE","46001","LTE BAND 3",1506␍␊

$ AT+CSQ # 信号强度
+CSQ: 30,99␍␊

$ AT+QCSQ # 信号强度
+QCSQ: "LTE",53,-86,130,-14␍␊
# RSSI(接收信号强度);RSRP(参考信号接收功率); SINR(信号与干扰加噪声比); RSRQ(参考信号接收质量)。

关于接入技术:
E-UTRAN的结构图

硬件相关信息

1
2
3
4
5
6
7
8
$ AT+CCLK?      # 查询模块实时时钟(RTC)
+CCLK: "70/01/01,00:06:05+00"␍␊

$ AT+CBC # 查询电池充电状态和电量
+CBC: 0,0,3875␍␊
# ME 未充电;电池剩余0%;电压(mv)


分组域相关信息

1

定位

测试 GPS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$ AT+QGPSCFG="outport", "uartdebug"     # 配置 NMEA 语句输出端口

$ AT+QGPSCFG="gnssconfig",5 # 设置 GNSS 卫星导航系统
OK
# GPS + BDS + Galileo 混合定位

$ AT+QGPSCFG="gnssconfig" # 查询支持的 GNSS 卫星导航系统
+QGPSCFG: "gnssconfig",5␍␊

$ AT+QGPSCFG="autogps",1 # 设置模块启动时自动启动 GNSS
OK

$ AT+QGPSCFG="nmeasrc" # 用于启用或禁用通过 AT+QGPSGNMEA 获取 NMEA 语句
+QGPSCFG: "nmeasrc",1␍␊

$ AT+QGPSCFG="apflash",0

$ AT+QGPS=1 # 打开 GNSS
OK

$ AT+QGPSEND # 关闭 GNSS
OK

$ AT+QGPSLOC=2 # 获取定位信息
+QGPSLOC: 141445.00,31.26329,121.68116,1.24,62.8,3,,0.184,0.101,251124,22␍

创建云平台实例

阿里云物联网平台 开通公共实例,如下图所示:

创建产品

创建设备

注意生成的设备证书和 MQTT 连接参数。

使用 MQTT 协议连接云平台

不使用 SSL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 配置消息接收模式
$ AT+QMTCFG="recv/mode",0,0,1 # client_idx = 0; 消息内容和消息长度均包含在 URC 中
OK

# 配置阿里云设备信息(product_key + device_name + device_secret)
$ AT+QMTCFG="aliauth",0,"k21omXYRDQU","EG800KCN","3c6bc85d94f6dfa58b5c1c812a56f64e"

# Open 网络端口
$ AT+QMTOPEN=0,"iot-06z00i7jerba07i.mqtt.iothub.aliyuncs.com",1883
+QMTOPEN: 0,0␍␊

# 建立连接
$ AT+QMTCONN=0,"clientEG800K_CN"

# 订阅 Topic
$ AT+QMTSUB=0,1,"/k21omXYRDQU/EG800KCN/user/get",2
OK
+QMTSUB: 0,1,0,1

$ AT+QMTSUB=0,1,"/sys/k21omXYRDQU/EG800KCN/thing/event/property/post_reply",2
OK
+QMTSUB: 0,1,0,1

# 发布属性
$ AT+QMTPUBEX=0,0,0,0,"/sys/k21omXYRDQU/EG800KCN/thing/event/property/post",30
> {id:0, version: 1.0}
OK
+QMTPUBEX: 0,0,0

# 关闭连接
$ AT+QMTDISC=0
+QMTDISC: 0,0␍␊
+QMTSTAT: 0,5␍␊

# Close 网络端口
$ AT+QMTCLOSE=0

关于安全

参考 设备安全认证-阿里云IOT平台
参考 物联网身份认证方案的安全挑战
参考 IoT设备身份认证免费试用的教程指南

使用 SSL