版权声明:本文为博主原创文章,未经博主允许不得转载,联系邮箱[email protected] https://blog.csdn.net/w464960660/article/details/83932795
【问题】:GPS启动方式一般分为三种,另一篇文章有介绍,模块冷启动时需要实际较长,尤其在信号不佳的情况下,启动时间会更长,亲测室内靠窗户位置 SIM868 冷启动时间约在50s左右,那么假如存在这样的应用场景,客户拿着设备在室内窗户附近启动,等了将近1min才获取位置数据,这样用户体验会极差。
【解决方案】:SIM868_GNSS_AGPS_应用文档_V1.00 文档中也有介绍,有三种加速定位技术,EASY方式默认是开启的,其他两种需要手动设置,我们应用的第三种,文档中笔误,SimFastFix技术 TTFF最小5s就能响应,相比第二种,只是多了LBS辅助基站定位,其他都是一样的,所以速度会更快一些。
【程序源码】:
1、 自检epo文件是否存在、是否过期;
2、如果EPO文件不存在或已过期,则重新下载EPO文件;
3、下载EPO文件成功,且检测EPO OK,则将EPO数据、UTC时间、当前的经纬度(通过基站获取)写入GPS模块;
u8 SIM868_GPSInit(void)
{
if(SIM868_Send_Cmd((u8 *)"AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"",(u8 *)"OK",100)) return 1; //设置网络参数
if(SIM868_Send_Cmd((u8 *)"AT+SAPBR=3,1,\"APN\",\"CMNET\"",(u8 *)"OK",500)) return 2; //设置APN
if(SIM868_Send_Cmd((u8 *)"AT+SAPBR=1,1",(u8 *)"OK",500)) return 3; //激活网络场景
if(SIM868_Send_Cmd((u8 *)"AT+SAPBR=2,1",(u8 *)"OK",600)) return 4; //获取分配IP地址
if(SIM868_Send_Cmd((u8 *)"AT+CNTP=\"ntp1.aliyun.com\",32",(u8 *)"OK",200)) return 5; //设置NTP服务器地址,时区
if(SIM868_Send_Cmd((u8 *)"AT+CNTP",(u8 *)"CNTP: 1",2000)) return 6; //开启网络同步(需要等待时间较长)
if(SIM868_Send_Cmd((u8 *)"AT+CCLK?",(u8 *)"OK",200)) return 7; //获取本地时间
delay_ms(200); //重要,等待存储本地时间动作完成再进行下一步
if(SIM868_Send_Cmd((u8 *)"AT+CLBS=1,1",(u8 *)"OK",1500)) return 8; //获取基站定位地址(需等待5s左右)
delay_ms(200); //重要,等待存储LBS数据动作完成再进行下一步
if ( (SIM868_Send_Cmd((u8 *)"AT+FSLS=C:\\User\\",(u8 *)"epo",200)) || (SIM868_Send_Cmd((u8 *)"AT+CGNSCHK=3,1",(u8 *)"+CGNSCHK: 3,1",200)) ) //查询EPO文件是否存在,且检查EPO文件大小并验证生效
{
if(SIM868_Send_Cmd((u8 *)"AT+FTPSERV=\"116.247.119.165\"",(u8 *)"OK",200)) return 9; //设置FTP服务器地址
if(SIM868_Send_Cmd((u8 *)"AT+FTPUN=\"customer\"",(u8 *)"OK",200)) return 10; //设置FTP服务器名
if(SIM868_Send_Cmd((u8 *)"AT+FTPPW=\"111111\"",(u8 *)"OK",200)) return 11; //设置FTP密码
if(SIM868_Send_Cmd((u8 *)"AT+FTPGETNAME=\"MTK3.EPO\"",(u8 *)"OK",200)) return 12; //设置预下载的EPO文件名
// delay_ms(200);
if(SIM868_Send_Cmd((u8 *)"AT+FTPGETPATH=\"/\"",(u8 *)"OK",200)) return 13; //设置下载路径
if(SIM868_Send_Cmd((u8 *)"AT+FTPEXTGET=1",(u8 *)"+FTPEXTGET:",4000)) return 14; //下载数据至本地缓存(需要等待20s左右,为避免无法等到)
if(SIM868_Send_Cmd((u8 *)"AT+FTPEXTGET=4,\"epo\"",(u8 *)"OK",500)) return 15; //保存数据作为EPO文件至本地存储器(需要等待5s左右)
if(SIM868_Send_Cmd((u8 *)"AT+FSLS=C:\\User\\",(u8 *)"epo",200)) return 16; //查询EPO文件是否存在
if(SIM868_Send_Cmd((u8 *)"AT+CGNSCHK=3,1",(u8 *)"+CGNSCHK: 3,1",200)) return 17; //检查EPO文件大小并验证生效
}
if(SIM868_Send_Cmd((u8 *)"AT+CGNSPWR=1",(u8 *)"OK",200)) return 18; //开启GPS电源
if(SIM868_Send_Cmd((u8 *)"AT+CGNSAID=31,1,1",(u8 *)"+CGNSAID:",1000)) return 19; //发送EPO文件给GPS
// if(SIM868_Send_Cmd((u8 *)"AT+SAPBR=0,1",(u8 *)"OK",1000)) return 20; //关闭GPRS上下文
return 0;
}