这里我希望利用python serial库在电脑端通过USB转TTL实现对as608芯片原始图片的采集。
但是在实现过程中,as608采集大小时256288大小的图片,我用串口助手采集的图片也是256288,但是我利用serial库采集的图片,却是128*288大小的图片。我不知道为什么会出现这样的情况,下面是我的主要代码(毕设的问题)
uart=serial.Serial(port="COM3",
baudrate=9600*6,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=1
)
#初始化serial串口模型
a=uart.write(bytearray.fromhex("EF01 FFFFFFFF 01 0003 01 0005"))
data=uart.read(a)#发送录取图像命令查看应答
b=uart.write(bytearray.fromhex("EF01 FFFFFFFF 01 0003 0a 000e"))
data1=uart.read(100000)##发送接受图像命令,并读取图像数据
uart.flush()
这里我得到数据长度为40044
经过我去除掉包头,得到数据包数据只有128*288的长度
下面我我采集的图片和串口图片。
我不知道为什么会出现这样的偏差,救命!
根据你提供的信息,问题可能出现在读取数据的代码中。你在读取数据之前指定了最大的读取长度为100000,但这并不能保证你确实读取了完整的图像数据。
当你调用uart.read(a)时,它会返回实际读取的字节数。在这种情况下,你可以尝试打印出实际读取的字节数,以便了解是否正确读取了所有数据。
另外,由于你正在读取二进制数据,建议使用二进制模式打开串口。你可以尝试添加以下
``` stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=1
)
uart.reset_input_buffer() # 清空串口缓冲区
a=uart.write(bytearray.fromhex("EF01 FFFFFFFF 01 0003 01 0005"))
data=uart.read(a) #发送录取图像命令查看应答
b=uart.write(bytearray.fromhex("EF01 FFFFFFFF 01 0003 0a 000e"))
data1 = b''
while True:
data = uart.read(4096) # 读取一次最多4096字节
if not data: # 如果读取完了就跳出循环
break
data1 += data
uart.flush()
print(len(data1)) # 打印实际读取的字节数
# 继续处理接收到的数据...
此外,你应该确认所使用的串口助手软件的设置是否正确,并尝试调整串口的波特率、数据位、停止位等参数。