NMEA PYthon代码集合

本文介绍如何使用Python的pyserial模块从Garmin GPS设备中读取NMEA协议数据,并通过网络发送给GooPs监听端口。具体实现包括设置串口参数、筛选并合并特定NMEA语句、构建消息格式及发送。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GPS(garmin)使用的是串口线(当然也支持USB线)波特率为4800bps,python使用pyserial模块控制串口

将GPS的接口协议调整为NMEA协议,使用pyserial接收到的信号(每两秒钟刷新一次)例如为

$GPRMC,,V,,,,,,,230509,4.0,W,N*23
$GPRMB,V,,,,,,,,,,,,A,N*13
$GPGGA,,,,,,0,00,,,M,,M,,*66
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,3,1,12,09,05,055,00,12,37,051,00,14,56,353,00,18,40,161,00*7F
$GPGSV,3,2,12,22,70,199,00,26,09,100,00,29,07,136,00,30,65,091,00*71
$GPGSV,3,3,12,31,41,268,00,32,02,323,00,33,00,000,00,34,00,000,00*77
$GPGLL,,,,,,V,N*64
$GPBOD,,T,,M,,*47
$GPVTG,,T,,M,,N,,K*4E
$PGRME,,M,,M,,M*00
$PGRMZ,,f,1*29
$PGRMM,WGS 84*06
$GPRTE,1,1,c,*37

可参照NMEA协议 对抓取的记录进行分析

串口接收的python代码为

#coding=utf-8
import serial
ser=serial.Serial()
ser.port=0
ser.baudrate=4800
ser.open()
while True:
        line=ser.readline()
        if line.startswith('$GPGLL,'):
                st=line.split(',')#0,‘$GPGLL’;1,维度;2,南北半球;3,经度;4,东西经;5,时间
                print st[5],st[4],st[3],st[2],st[1]
        print line,
ser.close()

这样配合python的GUI库,将经纬度打点到DC上,路径就显示出来了

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/weizhe86/archive/2009/05/24/4210707.aspx

 

 

 

 

 

#! /usr/bin/env python
#coding=utf-8

import serial
from socket import *
import time
import re

HOST = '127.0.0.1'
PORT = 51234
ADDR = ( HOST , PORT)

COM = 'com7'
BAUDRATE = 115200

def main ():
    '''接收文本格式的串口数据,以"/n"为分隔符。
    '''
    ser = serial . Serial( COM , baudrate = BAUDRATE)
    last_utc = None
    message = ""
    msg = ""
    try :
        while True :
            data = ser . readline()
            if data :
                # 只有"$GPRMC","$GPVTG"和"$GPGGA"才能发送给GooPs。
                # 我们将同一时刻接受的NMEA语句合并为一个message发给GooPs。
                pattern = '^/$G[PN](?:GGA|RMC),([0-9.]{9}),'
                m = re . match( pattern , data)
                if m :
                    # 屏幕显示
#                    print "raw data: %s" % data
                    utc = m . group( 1)
#                    print "utc: %s, last_utc: %s" % (utc, last_utc)
                    if utc == last_utc :
                        message += data
                    else :
                        last_utc = utc
#                        print "before: %s" % message
                        msg = "ace@localhost: %s " % message
                        message = data
#                        print "after: %s" % message
                        tcpCliSock = socket( AF_INET , SOCK_STREAM)
                        tcpCliSock . connect( ADDR)
                        tcpCliSock . send( msg)
                        tcpCliSock . close()
                        print "msg: %s " % msg
            # 给其他程序运行的机会~
            time . sleep( 0.1)
    except Exception , e :
        print "error: %s " % e
    finally :
        ser . close()


if __name__ == '__main__' :
    main()

 

### 如何获取AIS数据 #### 数据来源概述 AIS(自动识别系统)数据可以从多种途径获取,具体取决于实际需求以及预算情况。以下是几种常见的方法: 1. **通过硬件设备采集** 可以利用专用的AIS接收器来捕获船舶广播的信号,并将其转换为可读取的数据格式[^1]。这类设备通常会提供COM口或网络接口用于连接计算机或其他终端。 2. **在线公开数据库访问** 存在一些开源项目或者社区维护着可供免费使用的AIS原始数据集合。例如有一个名为“AIS原始数据下载仓库”的资源站点提供了大量基于NMEA 0183协议编码的信息片段供研究者们参考学习[^2][^3]。 3. **第三方服务商订阅** 若追求更高质量且覆盖范围广的大规模商用级解决方案,则考虑联系专业机构购买定制化产品不失为明智之举之一。像MarineTraffic、FleetMon Express等行业领军企业均能按照客户需求量身打造专属方案并给予技术支持[^4]。 #### 技术实现细节 对于希望自行搭建环境分析处理此类海量信息的朋友来说,下面列举了一些关键技术要点作为指导方向: - **通信协议理解**: 需要熟悉掌握有关于NMEA 0183的标准定义以便正确解读接收到的消息内容结构。 - **编程技能运用**: 借助诸如Python之类的高级脚本语言编写自动化脚本来完成从初始抓包到最后统计汇总整个流程中的各项任务操作过程。比如采用socket库监听特定IP地址端口号上的流量活动状况进而提取有效负载部分加以存储记录下来形成初步素材积累基础之上再做深入挖掘探索工作。 ```python import socket def receive_ais_data(host='localhost', port=10110, buffer_size=4096): sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind((host, port)) while True: data, addr = sock.recvfrom(buffer_size) decoded_message = data.decode('utf-8') yield decoded_message if __name__ == "__main__": for message in receive_ais_data(): print(message.strip()) ``` 此段代码展示了如何设置一个简单的UDP服务器用来持续不断地接受来自外部发送过来未经加工过的纯文本形式表示出来的AIS电文实例演示效果展示图如下所示: --- ### 注意事项提醒 无论选取哪一种方式都务必注意遵循当地法律法规关于个人隐私保护方面的相关规定条款要求执行相应动作之前充分评估潜在风险因素影响程度做到合法合规前提下方可开展后续行动步骤安排计划实施推进落实到位为止结束本次讨论交流环节谢谢大家!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值