0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术C#通过串口读取GPS模块定位数据的方法

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-01-14 11:33 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

有人云:'GPS的应用,仅受人们的想象力制约。'GPS问世以来,已充分显示了其在导航定位领域的霸主地位。许多领域也由于GPS的出现而产生革命性变化。目前,几乎全世界所有需要导航定位的用户,都被GPS的高精度、全天候、全球覆盖、方便灵活和优质价廉所吸引。在嵌入式产品的开发应用中,很多领域都涉及到GPS导航和定位的应用;英创的很多用户,就是在英创的嵌入式主板的基础上,外接GPS应用模块,来实现GPS在各种领域的合理运用。英创随之也向用户提供了相关GPS的方案和例程,供用户在实际应用中进行参考。本文介绍了英创C# GPS例程通过串口读取GPS模块定位数据的方法。
GPS模块只要处于工作状态就会源源不断地把接收并计算出的GPS导航定位信息传送到连接到它的嵌入式主板串口之上,在没有进一步处理之前,传送的数据是一长串字节流信息。因此必须经过程序将其转化为有实际意义的;可供高层决策使用的定位信息数据。与其他通信协议类似,GPS模块都遵循NMEA-0183协议,GPS进行信息提取,必须明确其帧结构,然后才能根据其结构完成对各个定位信息的提取;其发送到串口的数据主要由帧头,帧尾和帧内数据组成。根据数据帧的不同,帧头也不相同,主要有“#GPGGA”,“$GPGSA”,“$GPRMC”等。这些帧头标识了后续帧内数据的组成结构,各帧均以回车符和换行符作为帧尾标识一帧的结束。对于通常的情况,大家所关心的定位数据如经纬度、速度、时间、航向等均以“$GPRMC”中获取得到。该帧的结构及各字段释义如下:
例:$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50
字段0:$GPRMC,语句ID,表明该语句为Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐最小定位信息
字段1:UTC时间,hhmmss.sss格式
字段2:状态,A=定位,V=未定位
字段3:纬度ddmm.mmmm,度分格式(前导位数不足则补0)
字段4:纬度N(北纬)或S(南纬)
字段5:经度dddmm.mmmm,度分格式(前导位数不足则补0)
字段6:经度E(东经)或W(西经)
字段7:速度,节,Knots
字段8:方位角,度
字段9:UTC日期,DDMMYY格式
字段10:磁偏角,(000 - 180)度(前导位数不足则补0)
字段11:磁偏角方向,E=东W=西
字段16:校验值
对于用户的应用程序来讲,要读取GPS模块的定位数据,无非是实现两个简单的步骤:(1)读取串口数据;(2)将读取的数据解析出来。
我们以预装了WinCE嵌入式操作系统ARM9主板EM9161来连接GPS模块,用C#来实现读取GPS模块发过来的串口数据,最方便的方法是直接使用VS2005提供的SerialPort串口类,这个串口类提供一个DataRecieved事件响应机制,可以简单方便地读取串口数据,如:
private SerialPort myserialPort = new SerialPort(); // 定义SerialPort串口类对象myserialPort
……
myserialPort.DataReceived += new SerialDataReceivedEventHandler(myserialPort_DataReceived);
// 当串口有数据收到时,启动myserialPort_DataRecieved事件函数
收到的串口数据是标准的string字符串,以“$GPRMC”开头的帧为例,收到的每一帧数据string都以回车换行符为结尾,可以以回车换行符为标志将数据string提取出来;而且这个数据帧的每个元素均以逗号分隔,可以通过逗号分隔将这个数据帧的每个元素提取到一个string数组里面进行进一步处理。如:
string GPS_text = ''; // 字符串GPS_text = 接收到的串口数据,缺省定义为空
// 串口有数据收到
private void myserialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
GPS_text = GPS_text + myserialPort.ReadExisting(); // 读取串口数据
if (GPS_text.EndsWith('\n')) // 如果GPS_text字符串最后一个字符是“回车”
{
Invoke(new EventHandler(update_data)); // 通过Invoke方法执行update_data函数
}
}
private void update_data(object sender, EventArgs e)
{
string[] GPS_info = GPS_text.Split(','); // 按照逗号分隔把$GPRMC各种信号分割到字符串数组
…… // 处理GPS_info字符串数组,完成GPS数据显示、处理等功能
GPS_text = ''; // 置空GPS_text以便存储新的串口接收到的字符串
}
英创提供的例程运行界面如下:

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6107

    浏览量

    36952
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    GPS定位和地磁定位有什么区别?

    GPS定位和地磁定位是两种原理完全不同、应用场景也差异巨大的技术。简单来说:GPS定位是绝对
    的头像 发表于 11-19 12:01 183次阅读
    <b class='flag-5'>GPS</b><b class='flag-5'>定位</b>和地磁<b class='flag-5'>定位</b>有什么区别?

    【道生物联TKB-623评估板试用】GPS定位时钟透传

    , \"lon\": 121.4544 输入地图即可获取位置信息 动态效果见底部视频。 总结 本文介绍了道生物联TKB-623开发板结合 GPS 模块实现卫星定位数据的板间远距离传输
    发表于 11-06 18:48

    【瑞萨RA6E2】物联网 GPS 定位时钟

    【瑞萨RA6E2】物联网 GPS 定位时钟 本文介绍了瑞萨 RA-Eco-RA6E2-64PIN-V1.0 开发板通过串口读取
    发表于 11-05 14:56

    GPS北斗双模定位模块移植

    BH-ATGM332D 是野火设计的高性能、低功耗GPS、北斗双模定位模块。它采用中科微电子公司的ATGM332D-5N-31 模组方案,可以通过
    发表于 10-28 06:24

    【干货分享】基于瑞萨RA4M2-SENSOR开发板,实现便携式 GPS 定位

    本文介绍了RA4M2-SENSOR通过IIC协议实现OLED显示,并结合串口通信读取GPS模块数据
    的头像 发表于 09-09 08:07 3245次阅读
    【干货分享】基于瑞萨RA4M2-SENSOR开发板,实现便携式 <b class='flag-5'>GPS</b> <b class='flag-5'>定位</b>器

    【RA4M2-SENSOR】便携 GPS 定位

    【RA4M2-SENSOR】便携 GPS 定位器 本文介绍了 RA4M2-SENSOR 通过 IIC 协议实现 OLED 显示,并结合串口通信读取
    发表于 09-07 21:28

    【RA4E2开发板评测】串口读取 GPS

    信息。 动态效果见底部视频。 总结 本文介绍了 RA-Eco-RA4E2-64PIN-V1.0 通过串口通信接口 UART 读取 GPS
    发表于 09-07 16:23

    【RA4M2-SENSOR】串口读取 GPS

    【RA4M2-SENSOR】串口读取 GPS 本文介绍了 RA4M2-SENSOR 通过串口通信接口 UART
    发表于 09-05 13:01

    佛瑞亚如何通过信息技术推动业务增长

    在数字化、信息化的浪潮下,信息技术已经不仅是后台工具,更成为驱动企业发展的关键力量。本期Women Inspiring Mobility,我们采访了佛瑞亚中国区信息技术总监马瑛,了解她和团队如何将
    的头像 发表于 07-29 14:00 730次阅读

    谷歌地图GPS定位

    的导航体验。 GPS(全球定位系统)技术起始于军事应用,现已广泛用于民用领域。谷歌地图通过整合这一技术,让用户能够随时随地获取精确的位置
    的头像 发表于 05-29 16:54 924次阅读

    如何用c#使用ST25R3911DISCOComm.dll来读取和写入NDEF区的数据

    如何用c#使用ST25R3911DISCOComm.dll来读取和写入NDEF区的数据,需要相关例程,感谢各位大佬拯救一下我啊!????
    发表于 04-23 06:58

    GPS北斗定位模块问题及解决办法

    GPS北斗定位模块使用上大多需要配置和设置下的,因此出现应用方面的问题也是可以理解的。以下是常见的问题及其解决办法: 一、搜不到信号 问题描述: 在家或个别位置无法接收到GPS或北斗
    的头像 发表于 03-30 07:37 2523次阅读

    如何用c#使用ST25R3911DISCOComm.dll来读取和写入NDEF区的数据

    如何用c#使用ST25R3911DISCOComm.dll来读取和写入NDEF区的数据,需要相关例程,感谢各位大佬拯救一下我啊!????
    发表于 03-13 06:51

    CW32模块使用 EC-01G NBIOT+GPS模块

    :14.4 x 24.7 MM 控制方式:串口 三、移植过程 我们的目标是在立·CW32F030C8T6开发板上能够完成无线传输的功能。首先要获取资料,查看数据手册应如何实现,再移植
    的头像 发表于 01-23 13:12 919次阅读
    CW32<b class='flag-5'>模块</b>使用 EC-01G NBIOT+<b class='flag-5'>GPS</b><b class='flag-5'>模块</b>

    PNT、GNSS与GPS:卫星定位导航技术的清晰区分

    会把定位导航终端叫做GNSS模块,也会叫做GPS模块。 但是实际上他们之间是有一些重要的区别。伴随着技术发展与越发深入,我们有必要对这三个词
    的头像 发表于 01-13 15:42 2511次阅读
    PNT、GNSS与<b class='flag-5'>GPS</b>:卫星<b class='flag-5'>定位</b>导航<b class='flag-5'>技术</b>的清晰区分