向串行设备发送字节字符串

2024-06-02 06:19:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用Python在树莓上奔跑。我有一个串行设备(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')

Tags: 命令false参数字节bytesserial适配器树莓
2条回答

使用这个: 字节[0x00]+字节([0x04])

您不正确地使用了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()的文档。

相关问题 更多 >