使用树莓派我在读取连续传输的数据时遇到问题。当我在另一台机器上测试时,我的代码工作正常,但现在不能正常工作。
波特率为9600 w /无奇偶校验,8个数据位,1个停止位,我希望程序处理可变长度的字符(有时为100K +)。代码的阅读部分如下:
ser = serial.Serial('/dev/ttyAMA0', 9600, parity = serial.PARITY_NONE, timeout=1)
While True:
data = ser.read(1)
bytesToRead = ser.inWaiting()
if bytesToRead:
data = data + ser.read(bytesToRead)
encodedData = data.encode('hex')
使用此代码,只要波特/奇偶校验/等与发送系统匹配,我是否应该能够将所有字符读为十六进制?
答案 0 :(得分:0)
While True:
data = ser.read(1)
等待读取单个字符(由于Serial构造函数中指定的超时而在1s后超时)并将其存储在data
bytesToRead = ser.inWaiting()
if bytesToRead:
data = data + ser.read(bytesToRead)
encodedData = data.encode('hex')
现在立即检查缓冲区中的任何其他字符 - 通常为零。由于您以9600波特率运行,Python通常会一次看到一个字符。因此,if bytesToRead
语句大部分都是假的,因为上面的ser.read(1)
消费了每个传入的字符。
如果您只想单独处理每个角色,可以执行以下操作:
While True:
data = ser.read(1)
if data:
encodedData = data.encode('hex')
或者如果您想继续将其添加到缓冲区,请使用以下内容:
data = ''
While True:
bytesToRead = ser.inWaiting()
if bytesToRead:
data += ser.read(bytesToRead)
encodedData = data.encode('hex')
if encodedData.startswith('1234deadb33f`):
data = data[6:] # strip 6 chars from start of data