安信可A7模块GPS数据解析与开发板模块连接
来源:互联网 发布:msp驱动mac 编辑:程序博客网 时间:2024/06/04 17:43
==========================================================================
主机操作系统:Centos 6.7
交叉编译器环境:arm-linux-gcc-4.5.4 (可通过命令/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc -v查询)
开发板平台: fl2440
Linux内核版本: linux-3.0 .54
模块:安信可A7模块
==========================================================================
1.安信可A7模块接线与开启GPS
首先按照我们之前测试GPRS连线连上模块,波特率为115200.发送AT指令测试是否能用有返回。接着用命令AT+GPS=1打开GPS,返回OK即打开。打开 GPS/AGPS 后,默认 NEMA 信息从 GPS_TXD 管脚以 9600 的波特率输出,如果要让 NEMA 从 AT 串口输出,可以使用 AT+GPSRD。我这里使用AT+GPSRD=3表示每隔3秒输出信息。模块一上电一两分钟后就能正确采集到gps数据了。采集到数据后,关闭串口,把A7模块的接线的TXD线接到模块的GPS数据TXD上,并把波特率设置为9600,打开串口后,可以看到GPS数据每隔1s输出。测试结果如下图所示。
2.GPS数据解析
2.1GPS协议NMEA-0183简介
NMEA 0183是美国国家海洋电子协会(National Marine ElectronicsAssociation)为海用电子设备制定的标准格式。目前业已成了GPS导航设备统一的RTCM(Radio Technical Commission for Maritimeservices)标准协议.
GPS接收机上电后,会自动通过串口或USB口发送NMEA0183格式的数据包,它是一组包含有各种地理位置信息的字符串,字符串格式为:
$信息类型,xxx,xxx,xxx,xxx,xxx,xxx,xxx,
每行开头的字符都是‘$’,接着是信息类型,后面是数据,以逗号分隔开。
信息类型为:
GPGSV:可见卫星信息
GPGLL:地理定位信息
GPRMC:推荐最小定位信息
GPVTG:地面速度信息
GPGGA:GPS定位信息
GPGSA:当前卫星信息
这里我们只解析GPRMC的信息,$GPRMC语句的格式如下:
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh< CR>< LF>
一行完整的数据:$GPRMC,060916.000,A,3029.65900,N,11423.63928,E,0.00,0.00,120617,,,A*64
字段0:$GPRMC,语句ID,表明该语句为Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐最小定位信息
字段1:UTC时间,hhmmss.sss格式【6:09:16】
字段2:状态,A=定位,V=未定位【定位】
字段3:纬度ddmm.mmmm,度分格式(前导位数不足则补0)【3029.65900】
字段4:纬度N(北纬)或S(南纬)【北纬】
字段5:经度dddmm.mmmm,度分格式(前导位数不足则补0)【11423.63928】
字段6:经度E(东经)或W(西经)【东经】
字段7:速度,节,Knots【0.00节】
字段8:方位角,度【0.00】
字段9:UTC日期,DDMMYY格式【120617】
字段10:磁偏角,(000 - 180)度(前导位数不足则补0)【空】
字段11:磁偏角方向,E=东W=西【空】
字段12:模式,A=自动,D=差分,E=估测,N=数据无效(3.0协议内容)【自动】
字段13:校验值【校验值为6F】
解析内容:
(1) 时间,这个是格林威治时间,是世界时间(UTC),我们需要把它转换成北京时间(BTC),BTC和UTC差了8个小时,要在这个时间基础上加8个小时。
(2) 定位状态,在接收到有效数据前,这个位是‘V’,后面的数据都为空,接到有效数据后,这个位是‘A’,后面才开始有数据。
(3) 纬度,我们需要把它转换成度分秒的格式,计算方法:
如接收到的纬度是:3029.65900
3029.65900 / 100 = 30.2965900 可以直接读出30度
3029.65900-30 * 100 = 29.65900 可以直接读出29分
29.65900-29 = 0.65900 * 60 = 39.54 读出39秒
所以纬度为:30度29分39秒。
同理经度为:114度23分38分
(4) 南北纬,这个位有两种值‘N’(北纬)和‘S’(南纬)
(5) 经度的计算方法和纬度的计算方法一样
(6) 东西经,这个位有两种值‘E’(东经)和‘W’(西经)
(7) 速率,这个速率值是 海里/时,单位是节,要把它转换成千米/时,根据:1海里 = 1.85公里,把得到的速率乘以1.85。
(8) 航向,指的是偏离正北的角度
(9) 日期,这个日期是准确的,不需要转换
3.关于经纬度的换算:
因为我们收到的经纬度的格式是aabb.mmmm格式,往往要经过换算的。比如百度地图上需要的格式是,xx.mmmmm。这个换算过程其实蛮简单的,大致表示为aa+bb/60+mmmm/60/60。 当然我们也可以用工具进行转换,不过编写程序为了显示需要,需要我们进行换算,所以给出下面简单的算法(存在一定的误差)。
float caculate(float *x) { int a; float b,c,d,e; a=*x%100; //30 b=(int)((*x/100-a)*100); //29 c=((*x/100-a)*100-b)*60; d=b/60; e=c/60; f=a+d+e; return e; }计算得到的经纬度度分秒转换为经纬度
在地图工具上查询就能看到我们的位置了
http://www.gpsspg.com/maps.htm GPS转换地址
http://www.ab126.com/Geography/2703.html 经纬度转换
4.用开发板连接模块接收GPS数据:
(1)使能USB接口:
因为我们的开发板的两个串口用的是RS232,而我们的模块是TTL电平,所以我们并不能用串口直接去接我们的模块,我们需要用USB转串口线接到开发板的USB口,因此,我们需要对内核进行修改。在内核的make menuconfig->Device Drivers->USB support ->USB Serial Converter support选项中选择USB CP210x family of UART Bridge Controllers 选项,重新编译烧录内核。然后我们把USB转串口线插到我们的开发板USB接口上,通过网线连接开发板,用secuercrt远程登录开发板。我们可以看到/dev目录下有个USB0的设备。
>ls /dev
(2)microcom命令监听USB接口:
>:microcom -s 9600 /dev/ttyUSB0
-t 单位毫秒,无操作自动退出时间,-s 单位bps,串口波特率,通过ctrl+x可以退出监听。
监听到该接口后,我们可以对该接口进行编程操作,获取经纬度信息。
GPS数据包格式+数据解析 点击打开链接
阅读全文
0 0
- 安信可A7模块GPS数据解析与开发板模块连接
- GPS数据解析以及模块连接开发板
- 安信可A7模块GPS定位功能测试及解析
- 安信可A7模块 GPRS/GPS使用教程
- 安信可A7模块GPS-编程获取GPS定位信息
- 安信可-A7模块——GPS显示坐标信息解读
- 安信可A7模块GPS——编程获取GPS经纬度信息
- FL2440-A7模块用程序实现GPS自动定位解析功能
- FL2440——基于安信可A7模块编程实现GPS定位功能
- 安信可-A7模块——C语言编程实现GPS功能
- 安信可A7模块实现拨号发短信
- GPS与GPRS模块
- s3c2440开发板使用gps模块
- s3c2440开发板使用gps模块
- gps各个模块的解析
- Android 驱动和系统开发 2. 解析模拟器GPS模块
- GPS模块数据分析 -- linux
- GPS 定位模块数据提取
- 史上最全的开发工具类
- HDU 6149 状压dp
- NOIP2015跳石头
- linux 下安装mysql5.7.19
- monkey测试
- 安信可A7模块GPS数据解析与开发板模块连接
- vc2010设置为静态编译
- GIS开发中常用几何算法原理图解
- hibernate 报错: ``` WARN: GenerationTarget encountered exception accepting command : Error executing
- Codeforces838A【枚举素数暴力】
- 人脑的发展历史
- python|计蒜客——移除数组中的重复元素
- Linux下搭建路由器
- 20170820_C++库函数中unique()和unique_copy()和sort()函数的用法