首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>编程开发>其他编程>正文

Linux串口读取GPS数据例程

http://www.oklinux.cn  2008-08-24  linuxidc   会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn

一、相关概念
1.GPS(Global Positioning System):全球卫星定位系统
美国的24颗卫星不停地给地面发GPS信号,只要有一台GPS接收设备,就能定位出你所在的位置高度和速度了,它与电子地图的结合就是通常所说的GPS功能

二、连接方式
1.串口:计算机通常通过串口读取gps数据(蓝牙的gps也使用虚拟串口)
2.步骤:
1)普通串口设备
打开串口->设置串口->读取数据->恢复串口->关闭串口
2)蓝牙设备
开启蓝牙->与gps设备连接->打开串口->读取数据->关闭串口->与gps设备断开->关闭蓝牙
3)注意
连接gps蓝牙设备如需要连接密码,设置为0000(蓝牙默认密码)
用蓝牙gps设备一般不用对串口进行设置

三、gps数据格式
1.从串口中读出的是文本数据,每次读出一行,一般情况下,一秒种能收到多行数据
2.有效数据以$GP开头,分为$GPGGA、$GPGSA、$GPGSV、$GPRMC…
3. $GPGGA 是GPS定位的主要数据,通过解析它得到经度、纬度、海拔高度、时间、卫星使用情况等基本信息,其中每项用逗号分隔,共十四个逗号,举例如下:
$GPGGA,064746.000,4925.4895,N,00103.9255,E,1,05,2.1,-68.0,M,47.1,M,,0000*4F
$GPGGA(语句标识头),064746.000(UTC时间),4925.4895(纬度),N(纬度半球),00103.9255(经度),E(经度半球),1(定位质量指示),05(使用卫星数量),2.1(水平精确度),-68.0(海拔高度),M(高度单位),47.1(大地水准面高度),M(高度单位),(差分 GPS数据期限),0000(差分参考基站标号)*4F(校验)(结束标记回车换行)

四、例程
1.功能描述
假设蓝牙模块与gps已连接成功,蓝牙的虚拟串口设备是ttyB2
实现从蓝牙设备连接读取100条数据,解析后(经度/纬度/海拔/卫星个数)显示出来
2.代码
#include
#include
#include
#include
#include
#include
void parseData(char *buf)
{
int ret, nQ, nN, nB, nC;
char cX, cY, cM1, cM2;
float fTime, fX, fY, fP, fH, fB, fD;
if (buf == NULL)
return;
ret = sscanf(buf,
"$GPGGA,%f,%f,%c,%f,%c,%d,d,%f,%f,%c,%f,%c,%f,dx",
&fTime, &fX, &cX, &fY, &cY, &nQ, &nN, &fP, &fH, &cM1, &fB,
&cM2, &fD, &nB, &nC);
printf("x: %c %f, y: %c %f, h %f, satellite: %d\n",
cX, fX, cY, fY, fH, nN);
}
int main(int argc, char **argv)
{
int fd, i, ret;
char buf[1024] =
"$GPGGA,064746.000,4925.4895,N,00103.99255,E,1,05,2.1,-68.0,M,47.1,M,,0000*4F\r\n"; // 此处赋值用于测试
if ((fd = open("/dev/ttyB2", O_RDWR)) == -1)
return -1;
// set fd: tcsetattr... 直接连接串口的设备需要在此设置波特率
for (i = 0; i < 100; i )
{
ret = read(fd, buf, 1024);
if (ret > 1)
{
if (strstr(buf, "GPGGA") != NULL)
parseData(buf);
}
}
// restore fd: tcsetattr... 直接连接串口的设备需要在此恢复波特率
close(fd);
}


上一篇:Linux 脚本里计算加减乘除及expr命令   下一篇:Linux内核编程职业前景浅谈

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·Linux内核编程职业前景浅谈
·Linux 脚本里计算加减乘除及expr命令
·对Linux文件名中有“-”的操作
·Linux下批量删除空文件(大小等于0的文件)的方法
·Linux下C/C IDE比较——Code::Blocks
·Linux下C网络编程(socket)
·Linux下用for循环卸载openoffice
·Ubuntu 下搭建 Rails 开发环境
·Ubuntu 8.04驱动开发环境
·Ubuntu升级内核手记
·关于Linux终端的显示
·Linux时间函数的应用
·在Ubuntu中用cron实现代码自动编译
·Linux触摸屏驱动解析
·移植FFmpeg到DaVinci开发环境上
·向Linux内核添加驱动
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Linux下C/C IDE比较——Code::Blocks
·Linux下批量删除空文件(大小等于0的文
·对Linux文件名中有“-”的操作
·Linux内核编程职业前景浅谈
·Linux 脚本里计算加减乘除及expr命令
·Linux下C网络编程(socket)
·Linux下用for循环卸载openoffice
·Ubuntu 下搭建 Rails 开发环境
·Ubuntu 8.04驱动开发环境
·Ubuntu升级内核手记
·关于Linux终端的显示
·Linux时间函数的应用
  阅读排行
·开源空间 网络安全工具开发函数库Libne
·Linux下Qtopia Core 4.3(QT/E)交叉编译
·Linux编程时获取当前时间实例解析
·Linux环境下OpenGL编程学习
·Linux socket编程实例:echo服务器程序
·升级Redhat Linux 9.0内核有感
·GNU/Linux应用程序编程:用管道进行编
·Linux中断处理学习笔记
·Linux系统中限制用户进程CPU及内存占用
·解决Linux中Matlab中文乱码问题
·Linux下安装g77 fortran complier过程
·Linux环境下Wine的中文显示以及freetyp
·Linux多线程编程学习之线程同步
·SUSE Linux中安装Quartus 7.2过程笔记
·Linux环境下重新编译GCC-4.3.0
网摘收藏: