1. 程式人生 > >SIM868——GPS加速定位方法

SIM868——GPS加速定位方法

【問題】: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;  	
}