python串口通讯

时间:2019-01-09 09:43:28

标签: python python-3.x python-2.7 serial-port microcontroller

这是我的串口通信代码

import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib import style


import serial
MCU = serial.Serial('COM35', 115200, timeout=.1)


import time
time.sleep(1) #give the connection a second to settle

while True:
     data = MCU.readline()
print(str(data))

但是我进入输出

b'\x0b\x16 )6\x06\x07\x08X\x02\x16,'(十六进制+ Ascii值)

这是我的输入数据

uint8_t myBuf[]={11,22,32,41,54,6,7,8,88,2,22,44};

有人知道我在做什么错吗?

3 个答案:

答案 0 :(得分:2)

您想要什么格式的输出?如您所建议,您所拥有的是正确的数据,但为字节格式。例如,您可以按如下所示将其作为python int列表获取(Python 3):

>>> list(data)
[11, 22, 32, 41, 54, 6, 7, 8, 88, 2, 22, 44]

struct模块对您解码字节数据也可能有用。

(抱歉,我无法发表评论。)

答案 1 :(得分:1)

编写str(data)时,您要求python将二进制数据翻译成可读的字符串(在可读的fromat中)。

由于大多数字节没有可读的表示形式,因此python只是将它们转换为十六进制表示形式(作为字符串)。

如果您只想将它​​们打印为列表:list(data)。

答案 2 :(得分:1)

也许最好对它进行解码?

正如想法

while ser.isOpen():
    for s in ser.read():
        s = ser.readline().decode('utf-8') #reading data from the port with decoding from UTF-8
        com = str(s).replace('\n','') #cutting out second pass to the new line
        print(s)