将字节串发送到串行设备

4

我正在使用运行在树莓派上的Python3。我有一个串口设备(max232/PiC16F84)通过USB转串口适配器连接到了树莓派上。 我试图向设备发送两个字节(例如0000 0011),这将被PIC解释为命令。 USB-串口适配器已正确配置,参数如波特率应该没问题。我猜测我的代码没有向串口发送正确的字节。

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')

什么症状让你相信它没有发送正确的字节?正确的字节是什么(协议定义在哪里)? - Brian Cain
2个回答

10

你在错误地使用 bytes 构造函数。当你使用一个 int 做参数调用它时,你得到:

bytes(int) -> bytes object of size given by the parameter initialized with null bytes

所以 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()的文档。

如果字符串较短,您可以将其表示为常量,例如b'\x00\x04'。有关更多选项,请查看bytes()的文档。

-3
使用以下代码: bytes[0x00]+bytes([0x04])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接