如何解决NMEA句子带有意外字符
我正在使用python通过树莓派上的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,V*17
$GNRMC,204108.00¬A,XX.20603,XX.47454,0.921,021120,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)
解决方法
为了后人,有人帮我解决了:Fix special characters with closest equivalent without map
这确实是硬件问题,但可以使用此人的答案通过软件修复
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。