pySerial 拆分数据包并发送数据。如何一次发送大字节?
pySerial splits up the packet and sends data. How do I send large bytes in one go?
我的串口连接代码
ser = serial.Serial(
port='COM4',
baudrate=9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,timeout=0.5
)
if (ser.isOpen):
ser.close()
ser.open()
buf=b''
out = ''
while 1:
while ser.inWaiting() > 0:
sleep(1)
#if ser.outWaiting()==0:
out = ser.read(ser.inWaiting())
if out != '':
handle_command(out, ser)
print ">>" + out.encode('hex')
out = ''
这部分是我向端口写入数据的地方
elif(some condition):
if(ser.outWaiting()==0):
out=ser.write(pSportTotals_p1)
sleep(0.001)
ser.flush()
if(ser.outWaiting()==0):
ser.write(pSportTotals_p2)
sleep(0.001)
ser.flush()
但输出不稳定,pSportsTotals_p1 分两部分发送,pSportTotals_p2 有时与前一个数据包的其余部分一起发送。在随附的屏幕截图中,0a 表示每个数据包的开始,在第二张图片中,您可以看到它与前一个数据包的剩余块相连。我是串行编程的新手,如果能帮助我理解我的错误,我将不胜感激。first packet
second packet
我对 pyserial 没有具体的了解,但是之前用不同的语言处理过串口通信,我得出一个结论你不能确定你的数据是怎么回事成为 sent/received.
您有多种选择:
- 始终发送相同数量的 N 字节,在接收端,等待缓冲区有超过 N 个数据,然后再读取 N 字节的块。
- 实施带有分隔符(例如“\n”)的协议并解析接收到的数据以通过查找分隔符来重建您的数据。
我的串口连接代码
ser = serial.Serial(
port='COM4',
baudrate=9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,timeout=0.5
)
if (ser.isOpen):
ser.close()
ser.open()
buf=b''
out = ''
while 1:
while ser.inWaiting() > 0:
sleep(1)
#if ser.outWaiting()==0:
out = ser.read(ser.inWaiting())
if out != '':
handle_command(out, ser)
print ">>" + out.encode('hex')
out = ''
这部分是我向端口写入数据的地方
elif(some condition):
if(ser.outWaiting()==0):
out=ser.write(pSportTotals_p1)
sleep(0.001)
ser.flush()
if(ser.outWaiting()==0):
ser.write(pSportTotals_p2)
sleep(0.001)
ser.flush()
但输出不稳定,pSportsTotals_p1 分两部分发送,pSportTotals_p2 有时与前一个数据包的其余部分一起发送。在随附的屏幕截图中,0a 表示每个数据包的开始,在第二张图片中,您可以看到它与前一个数据包的剩余块相连。我是串行编程的新手,如果能帮助我理解我的错误,我将不胜感激。first packet second packet
我对 pyserial 没有具体的了解,但是之前用不同的语言处理过串口通信,我得出一个结论你不能确定你的数据是怎么回事成为 sent/received.
您有多种选择:
- 始终发送相同数量的 N 字节,在接收端,等待缓冲区有超过 N 个数据,然后再读取 N 字节的块。
- 实施带有分隔符(例如“\n”)的协议并解析接收到的数据以通过查找分隔符来重建您的数据。