前言:外婆年纪大了,有些阿尔兹海默症的症状,老是丢钥匙,前段时间给她买了华为TAG,但是外婆家处于比较偏僻的地方,老人居多,使用华为手机的人不太多,位置经常性好久才更新。后来准备给她买个定位产品,在网上看了好多产品,性价比不高。无意间看到了大夏龙雀的GNSS+4G的模块DX-CT511N-B,由于我大学学过单片机,现在又主要从事前端软件开发,所以准备自己来制作一个上报位置的小玩意。
解决方案构想:
一、服务端
使用EMQX搭建一个MQTT服务,开箱即用。个人使用的话,建议使用开源版本。

二、前端页面
使用VUE框架进行搭建,通过MQTT订阅通知,在拿到硬件通知时,将GPS地理位置通过地图API转换之后即可在前端页面上进行展示。
三、硬件
大夏龙雀DX-CT511N-B,虽然是4G+GNSS一体的模块,但是不能实现直接将GNSS信息直接通过4G进行发送通知。要实现GPS信号的发送,需要一个单片机通过串口获取到GPS信号后,再通过调用MQTT相关的AT指令给DX-CT511N-B,让其通过4G,将通知发布出去。
由于家中有闲置的ESP8266,所以我这边使用的ESP8266,当然也可以使用其他的单片机。
四、相关代码
这边先写一下大夏龙雀DX-CT511N-B的相关AT指令。后续再补充前端、服务端的代码。
1、配置 APN
AT+QICSGP=1,1,"","",""
2、开启移动网络
AT+NETOPEN
前2步AT指令一定要写,之前调试忘记了,一直没成功。。
3、配置 MQTT 客户端信息
AT+MCONFIG=<clientid>[,<username>,<password>][,<will_flag>,<will_qos>, <will_retain>,<will_topic>, <will_message>]
一般都需要设置一下username和password的。
AT+MCONFIG="dxlq","test","testpwd"
4、配置 MQTT 服务器信息
AT+MIPSTART="broker.emqx.io",1883
这里我就不写自己的服务器地址和端口了,写的是官方给的文档里的
5、连接 MQTT 服务器
AT+MCONNECT=1,60

串口工具提示连接服务器成功,我们登录服务器上看看。

也是提示成功了。
下面,我们就开始调试是否能正常通信吧。我们在电脑上可以下载一个MQTT的测试工具,用来测试模块是否能正常发送通知。我这边使用的是MQTTX。

6、订阅主题
AT+MSUB="phone",0
我们先订阅一个主题叫phone

同时在 MQTTX上也订阅一下。

7、发布消息
AT+MPUB="phone",0,0,"hello world"
通过大夏龙雀的模块发送通知。

MQTTX上成功收到了通知。

我们在MQTTX上发布个通知试一下,看看大夏龙雀能不能收到。

MQTTX 发布通知 hello dxlq
大夏龙雀成功接收到消息。
至此,关键的通信功能已经调通。

8、发布长消息
AT+MPUBEX="4G",0,0,20
注:
1. 返回提示符 > ,即可发送数据,发送成功后自动退出数据传输模式
2. 发送的数据长度需要与<msgLen>参数一致,长度不足则会等待输入
3. 超过 10 秒未成功发送,则自动退出数据传输模式,返回 ERROR
9、取消订阅
AT+MUNSUB="phone"
10、开启GPS
AT+MGPSC=1
11、关闭NMEA
AT+MGPSGET=ALL,0
主要是NMEA信息过于多了,有好多信息不需要,所以我这边就给关闭了。大家可以视情况而定。
12、查询GPS
AT+GPSST
发送:AT+GPSST 返回:AT+GPSST
+GPSST: 1, 1, 113.xxxxxx, 23.xxxxxx, 32.xxxxxx; 0, 119; 0, 77; 0, 76; 0, 37; 0, 72; 0, 71;
OK
数据解析:
定位状态: 1,cn: 1,经度值: 113.xxxxxx,高度值: 23.xxxxxx,纬度值: 22.xxxxxx,其余参数为卫星相关参数
至此,我们能拿到关键的GPS信息了。
https://jingweidu.bmcx.com/可以通过这个网站查询一下获得的经纬度是否正确。
13、信息整合发布
通过ESP8266,将获取到的GPS信息,整理一下,再通过MQTT消息发布的AT指令将信息发送出去。
14、前端页面订阅主题
前端页面订阅主题,将获取到的GPS信息通过地图API转换后,展示在前端页面上。
至此,项目已基本完成。
结语:
其实项目还可以加上数据库,保存历史记录,以防硬件设备没电的场景。这些后期可以再拓展。主体的核心功能,在此篇中已基本完成。大家有疑问可以留言。