最近项目中用到了SIM28ML这款GPS,该型号尺寸较小,适合小尺寸设计要求。
SIM28ML模块通过串口输出NMEA格式的定位数据,包括GPGLL、GPRMC、GPVTG、GPGGA、GPGSA、GPGSV、GPZDA等格式的数据,对于开发者而言,有些数据是多余的,有时只需要包含定位信息的GPGLL语句即可。那么怎么筛选出适合自己需求的数据呢,这就需要通过串口输入特定的指令给SIM28ML模块。如
$PMTK314,1,1,1,1,1,5,0,0,0,0,0,0,0,0,0,0,0,1,0*2D<CR><LF>
$PMTK314后面的每一位都是对应下面NMEA单独语句
0 NMEA_SEN_GLL, // GPGLL interval - Geographic Position - Latitude longitude
1 NMEA_SEN_RMC, // GPRMC interval - Recomended Minimum Specific GNSS Sentence
2 NMEA_SEN_VTG, // GPVTG interval - Course Over Ground and Ground Speed
3 NMEA_SEN_GGA, // GPGGA interval - GPS Fix Data
4 NMEA_SEN_GSA, // GPGSA interval - GNSS DOPS and Active Satellites
5 NMEA_SEN_GSV, // GPGSV interval - GNSS Satellites in View
6 NMEA_SEN_GRS, // GPGRS interval - GNSS Range Residuals
7 NMEA_SEN_GST, // GPGST interval - GNSS Pseudorange Erros Statistics
13 NMEA_SEN_MALM, // PMTKALM interval - GPS almanac information
14 NMEA_SEN_MEPH, // PMTKEPH interval - GPS ephmeris information
15 NMEA_SEN_MDGP, // PMTKDGP interval - GPS differential correction information
16 NMEA_SEN_MDBG, // PMTKDBG interval – MTK debug information
17 NMEA_SEN_ZDA, // GPZDA interval – Time & Date
18 NMEA_SEN_MCHN, // PMTKCHN interval – GPS channel status
每一位都可以进行设置如0——关闭该语句;1——位置每修正1次输出;2——5同理;
那么我们只需要GPGLL语句则只需要将指令设置为$PMTK314,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29即可,*后面的两位ASCII是校验和。如何计算校验和呢,
则需要将$和*之间的数据(不包含$和*)转换成HEX格式,然后把所有的数据进行异或就能得出校验和,如将上面的指令转换成HEX
50 4D 54 4B 33 31 34 2C 31 2C 30 2C 30 2C 30 2C 30 2C 30 2C 30 2C 30 2C 30 2C 30 2C 30 2C 30 2C 30 2C 30 2C 30 2C 30 2C 30 2C 30 2C 30
根据异或的特点除去偶数重复的数据,得到50 4D 54 4B 33 31 34 2C 31 2C 30 2C 30再进行异或计算就得到29。最后输出如下图所示。