SIM868——GPS加速定位方法
阿新 • • 發佈:2018-12-21
【問題】: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; }