带有意外字符的NMEA语句

2024-09-29 23:22:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python通过raspberry Pi上的i2c从u-blox NEO-M9N芯片读取数据

目前,我还没有构建脚本的其余部分,但我对芯片的输出感到有点困惑,因为它似乎包含了不属于那里的字符,例如 °、、、或。有时,这些似乎是对相似字符的替换:021120对于几行是正确的,然后被0²1±20替换,这并不太遥远

这些句子可能对5到50行之间的任何东西都是正确的,然后我会得到这样的结果(我用X替换了部分GPS坐标,但你得到了它):

$GNRMC,204107.00,A,XX.20¶46,N,XX.47371,E,0.844,,021±20,,,A,V*17
$GNRMC,204108.00¬A,XX.20603,N,XX.47454,E,0.921,,021120,,,A,V*1B

你知道这是怎么回事吗?我很确定这会把我想要的数据搞砸


下面是我用来读取数据的代码:

import time
import json
import smbus
import logging 

BUS = None
address = 0x42
gpsReadInterval = 0.1
LOG = logging.getLogger()

# taken and (poorly) adapted from
# http://ava.upuaut.net/?p=768

def connectBus():
    global BUS
    BUS = smbus.SMBus(1)

def parseResponse(gpsLine):
    gpsChars = ''.join(chr(c) for c in gpsLine)
    if "GNRMC" not in gpsChars:
        return False
    
    print(gpsChars)

def readGPS():
    c = None
    response = []
    try:
        while True: # Newline, or bad char.
            c = BUS.read_byte(address)
            if c == 255:
                return False
            elif c == 10:
                break
            else:
                response.append(c)
        parseResponse(response)
    except IOError:
        time.sleep(0.5)
        connectBus()

connectBus()
while True:
    readGPS()
    time.sleep(gpsReadInterval)

Tags: importnonetimeaddressresponseloggingdef读取数据

热门问题