所以我正在编写一个程序来读取和写入串行端口的数据。设置所述端口,我知道它为其所处的不同状态发送的特定字节代码。但是,我的Python脚本应该读取串行数据并将其打印到屏幕上。
以下是端口的设置,以及我的ReadLine
方法:
class SerialCommunicator:
def __init__(self, *args, **kwargs):
self.port = serial.Serial("/dev/ttyUSB0")
self.portSettings = {
'baudrate' : 57600,
'bytesize' : 8,
'parity' : 'N',
'stopbits' : 1,
'timeout' : 0,
'inter_byte_timeout' : None,
'write_timeout' : None,
'xonxoff' : False,
'rtscts' : False,
'dsrdtr' : False }
self.port.apply_settings(self.portSettings)
while True:
output = self.ReadLine()
if (output != ''):
print(output)
def ReadLine(self):
readValue = ""
isReading = True
while isReading:
currentRead = self.port.read()
currentRead = currentRead.decode()
readValue += currentRead
if currentRead == '\r' or currentRead = '':
isReading = False
return readValue
因此,当我运行此代码时,输出我期待一个乱码。我期待串口上运行的两个输出字符串:
T12F8B0A2200F8
和
T1610FFA20
第二个输出始终正确显示。然而,第一个要么截断代码的头部,要么在中间切片,否则它的尾部会丢失。我需要代码正确完整,因为我使用代码来读取设备所处的状态。可能是我的问题?
编辑:对于那些好奇的人,是的,我试过调整波特率。但是,当波特率高于57600时,我根本没有输出数据。答案 0 :(得分:0)
事实证明我的问题在于我的timeout
值。设置'timeout' : 1
解决了我的问题:)