本教程来自 FlexLua 官网,降低 IoT 硬件开发难度,零门槛 Lua 低代码编程技术开发 IoT 硬件。
EC800M 4G模组的GPS定位功能可以配合TCP/UDP通信使用,也可以配合HTTP、MQTT通信使用,在本篇章中我们以TCP为例讲解实现方法,至于UDP、MQTT则基本相同。
一、本例程实现功能
Core通过EC800M 4G Cat1模块和指定的服务器建立TCP连接,每当获取到定位信息(经纬度,海拔,卫星数量等)后,通过TCP发送给服务器。
注意:Core提供的GPS功能须在和服务器建立TCP连接上后才可获取定位信息,同理MQTT也是,这样做的目的是因为只有和服务器建立连接后,模块的定位信息获取的才有意义,所以本方案比较适用于在线实时的定位跟踪系统,而不适合离线定位。
二、 Core提供的TCP/UDP功能介绍
关于EC800M模块的TCP/UDP通信,已在物联网4G通信栏目中讲述过了,这里就不赘述了。
三、模块介绍
模组必须是 EC800M 型号才支持 GPS,并且同时支持北斗导航系统,双系统导航有利于增加定位精度和速度,模块会自动开启双系统导航,开发者无需关心。
四、接线图
注意1:EC800 其他没到的引脚可以不用接。
注意2:上图中虽然是ML302,但和EC800完全兼容。
五、材料清单
- EC800M 4G 模块(带GNSS定位)
六、完整代码
Core通过EC800M 4G模块和指定的服务器建立TCP连接,每当获取到定位信息后,发送给服务器。
--设置Cat1模块占用TX0、RX0、D5、D6引脚
--tcp服务器IP:"47.92.146.210" 端口号:8888
--心跳包间隔时间0秒(不使用心跳机制)。如果需要使用请在ApiDoc文档中查阅关于LIB_Cat1TcpUdpEC800Config函数的p8参数详细介绍
--TCP Client模式,如果要使用UDP,将"TCP"改成"UDP"即可
--开启GPS功能,如果需要使用请在ApiDoc文档中查阅关于LIB_Cat1TcpUdpEC800Config函数的p10参数详细介绍
LIB_Cat1TcpUdpEC800Config("UART0","D5","HIGH","D6","HIGH","47.92.146.210",8888,0,"TCP","AUTO_AGPS")
--开始大循环
while(GC(1) == true)
do
--查询是否解析到GPS/北斗定位数据(搜到星后大概每4秒能获取一个定位信息)
flag,lo_f,la_f,al_f,utc,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16 = LIB_Cat1GpsQuery()
if flag == 1 then
--将读取到的经度、纬度、海拔、UTC时间、以及卫星数量发送给服务器
LIB_Cat1TcpUdpEC800Send(LIB_StrToTab(string.format("longtitude:%.3f latitude:%.3f altitude:%.1fm UTC:%d nsat:%s", lo_f,la_f,al_f,utc,r16)))
end
end
如果感兴趣,上面代码中出现的LIB开头的库函数可以在 API文档 中通过Ctrl+F查询。
实测经验总结:
- 开启AGPS模式后,冷启动时GPS首次定位搜星时间则减少很多
- 定位成功率及定位速率:室外开阔地带 > 楼宇边缘 > 阳台(半封闭) > 室内(几乎不可能定位)
- 天线定位性能:车载GPS天线 > GPS有源陶瓷天线 > 无源FPC软天线
坐标系转换(需注意):
由于定位模块设备输出的经纬度定位信息的坐标系为WGS84国际标准,所以在不同地图中需要转换成对应的坐标系。例如使用百度地图时,需要将WGS84坐标系转换为BD09坐标系;用国内其他地图时,需要将WGS84坐标系转换为GCJ-02坐标系。如果不进行这些转换会出现定位偏差多则一两公里的问题。
七、LIB_Cat1TcpUdpConfig初始化函数中P10 GPS参数的介绍
- "NO_GPS":不开启GPS
- "NORMAL_GPS": 开启GPS,但不使用AGPS功能
- "AUTO_AGPS"::开启GPS和AGPS,并且每隔4个小时后如果再次重新上电调用LIB_Cat1TcpUdpConfig会耗费下载星历数据的流量
AGPS介绍:利用4G模块的流量,从专用服务器上下载当前的星历数据,以加快模块冷启动(刚上电)时定位的速度。但缺点是每次冷启动下载星历数据需要耗费流量。
注意:以上的讲解也同样适用于4G MQTT通信中的LIBCat1MqttEC800Config函数,如果您想使用MQTT通信而不是TCP/UDP通信,只需按照上面的讲解在LIBCat1MqttEC800Config函数的P14参数中按上述配置即可。