我有一个UBlox接收器连接到我的计算机,我正在尝试使用PySerial读取它,但我是python的新手,并希望得到一些澄清/帮助理解数据。
我的代码如下:
import serial
# open the connection port
connection = serial.Serial('/dev/ttyACM0', 9600)
# open a file to print the data. I am doing this to make
# sure it is working
file1 = open('output_file', 'wb+')
# All messages from ublox receivers end with a carriage return
# and a newline
msg = connection.readline()
# print the message to the file
print >> file1, msg
我在文件中收到的内容,以及当我打印“'类型' msg它是一个列表:
[' \ xb5b \ X01 \ x064 \ X00 \ xe0 \ X88 \ X96#\ XD3 \ xb9 \ XFF \ xffX \ X07 \ X03 \ xdd6 \ xc31 \ XF6 \ XFD)\ X18 \ XEA \ XE6 \ x8fd \ X1D \ X00 \ X01 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ XFD \ XFF \ XFF \ XFF \ X01 \ X00 \ X00 \ X00 \ X02 \ X00 \ X00 \ x00p \ X00 \ X02 \ X0F \ X16 \ XA2 \ X02 \ X00 \ x9c \ XEB \ xb5b \ X01 \ X07 \\ X00 \ xe0 \ X88 \ X96#\ xe0 \ X07 \ X01 \ X17 \ x15237 \ X04 \ X00 \ X00 \ X00 \ XD6 \ xb9 \ XFF \ XFF \ X03 \ X01 \ n']
[" \ X1A \ X0C \ X04 \ X19' Y \ X00 $ \ XF7 \ XFF \ XFF \ X1A \ X1D \ X04 \ X01 \ X00 \ X007 \ X00 \ X00 \ X00 \ X00 \ x00 \ x02 \ x1f \ x0c \ x01 \ x00 +:\ x00 \ x00 \ x00 \ x00 \ x00 \ x01 \ r \ x07& - \ x9f \ x00 \ xff \ x01 \ x00 \ x00 \ x17 \ xc1 \ x0c \ x04 \ X16 \ n"]
为了解释/解码ublox消息,有两种格式类型。一些消息采用NMEA格式(基本上以逗号分隔)
$MSG, 1, 2, 3, 4
其他消息是直的十六进制,其中每个字节或字节集代表一些信息
[AA BB CC DD EE]
所以我的问题是:有没有办法可以将数据从串行连接解释/转换为可读或更可用的格式,这样我才能真正处理这些消息。就像我说的,我是python的新手,更习惯于C ++样式字符串或字符数组
`
答案 0 :(得分:0)
典型的parsing任务。在这种情况下,将标记化分为两个阶段可能是最简单的:
re.split(", *",text)
关于serial.Serial.readline
返回列表的原因。我咨询了来源 - serial.Serial
代表readline
到io.IOBase
,而its source确实显示它应该返回bytestring
。
因此,函数可能会被代码覆盖。例如。 print connection.readline
和print serial.Serial.readline
会显示什么?