python - 带有意外字符的 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,,,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)
解决方案
对于后代,有人为我解决了这个问题:Fix special characters with most equivalent without map
这确实是一个硬件问题,但可以使用这个人的答案通过软件修复
推荐阅读
- node.js - 如何在没有 shell 访问权限的情况下安装 puppeteer 依赖项?
- sql - SQL:自联接后的列值不一致
- python-3.x - suds-jurko 设置命令中的错误:use_2to3 无效
- google-analytics - ParseDataFeedJSON(GA.Data) 中的错误:代码:403 原因:用户对此配置文件没有足够的权限
- kubernetes - Hangfire:初始化对象的问题
- database - TYPO3 数据库导入
- wix - Blazor 服务器-客户端安装程序 WIX 最佳实践?
- python - 如何在 Python 3.10 的 Match(切换其他语言)案例中使用多个案例
- c# - 如果多个语句中的任何其他语句失败,我如何反转查询影响?
- node.js - Cloud Function 运行缓慢并超出可用内存