带有意外字符的 NMEA 句子
NMEA sentences with unexpected characters
我正在使用 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)
为了后人,有人帮我解决了:
这确实是硬件问题,但可以使用此人的回答通过软件修复
我正在使用 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)
为了后人,有人帮我解决了:
这确实是硬件问题,但可以使用此人的回答通过软件修复