2017-01-10 57 views
1

我有一个问题,我似乎无法解决。我在覆盆子pi上使用python从pi上读取一个usb连接(即从串行转换)。USB串行数据发送乱码

我能够连接到USB端口,并开始与

ser = serial.Serial("myUsbPortID", 9600) 
bytes = ser.inWaiting() 
print ser.read(bytes) 

我知道,波特率为9600(硬件制造商文档)的代码,但由于某种原因,接收数据,当我尝试读取流的数据我得到了很多不同的语言和字符形式的胡言乱语。我杀了程序后,我的屏幕仍然用我输入的乱码数据替换我的角色。

我确定这不是硬件发送的数据流。某处某处正在转换某些东西,但我不知道它可能是什么。

当我启动设备,它正在初始化,然后我得到可读的信息。但是当设备开始运行时,我只能得到这个奇怪的字符

有没有办法将这些字符转换成它实际上进来的数据?

例如图: output screen

+1

你发送字节或文本?如果字节,然后在十六进制打印它,你会看到你想要的。 –

+0

在minicom/hyperterm中可以工作吗?是bytesize /停止位配置权?你可以转储十六进制?你期望什么样的数据(以及你的设备是什么)? – Marat

+1

这看起来像一个配置错误(波特率,启动/停止位,流量控制,...)。使用终端程序并测试可能的配置。另一个非常罕见的错误是位排序错误(如果器件首先发送LSB并且主机预期MSB在先)但是这实际上并不常见 –

回答

0

,所以我能解决乱码问题与Python代码这条线(用于其他任何人有这个问题)。

data = ":".join("{:02x}".format(ord(c)) for c in bytes) 

其中字节是原始数据,我使它'''分隔。 似乎连接和波特率是好的。幸运的是数据能够转换为十六进制好的。