使用PySerial从serial / usb转换数据

时间:2016-01-23 22:17:10

标签: python

我有一个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 ++样式字符串或字符数组

`

1 个答案:

答案 0 :(得分:0)

典型的parsing任务。在这种情况下,将标记化分为两个阶段可能是最简单的:

  1. 读取数据,直到您遇到消息边界(您没有提供有关如何识别它的足够信息)。
  2. 将阅读邮件拆分为有意义的部分
  3. 显示您想要的部分
  4. 关于serial.Serial.readline返回列表的原因。我咨询了来源 - serial.Serial代表readlineio.IOBase,而its source确实显示它应该返回bytestring

    因此,函数可能会被代码覆盖。例如。 print connection.readlineprint serial.Serial.readline会显示什么?