将字节串发送到串行设备

时间:2014-10-06 20:11:53

标签: python python-3.x raspberry-pi pyserial

我正在使用在Raspberry上运行的Python3。我有一个串口设备(max232 / PiC16F84)通过USB转串口适配器连接到Raspberry。 我尝试向设备发送两个字节(例如0000 0011),然后PIC将其解释为命令。 USB - 串行适配器配置正确,参数如bauderate应该没问题。我想我的代码没有将正确的字节发送到串口。

import serial

ser = serial.Serial(
    port='/dev/ttyUSB0',
    baudrate=1200,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    xonxoff=serial.XOFF,
    rtscts=False,
    dsrdtr=False
)

ser.open()
ser.isOpen()

print("Initializing the device ..")

ser.write(bytes(0x00))

print("Write command")
ser.write (bytes(0x04))

print('Done')

2 个答案:

答案 0 :(得分:9)

您错误地使用了bytes构造函数。当您使用int作为参数调用它时,您会得到:

  

bytes(int) - >由null字节初始化的参数给出的字节对象大小

所以bytes(0x00)(只是bytes(0))是空字符串,bytes(0x04)是四个零字节:

>>> bytes(0x00)
b''
>>> bytes(0x04)
b'\x00\x00\x00\x00'

你想要的是bytes([ 0x00 ])等,或者只是一个包含所有字节值的数组:

>>> bytes([0, 4])
b'\x00\x04'

如果字符串很短,您可以简单地将其写为常量:b'\x00\x04'。有关更多选项,请参阅bytes()的文档。

答案 1 :(得分:-2)

使用此: 字节[0×00] +字节([0×04])