我想通过串口与手机通信。在给手机写了一些命令之后,我曾经ser.read(ser.inWaiting())
得到它的返回值,但我总是得到1020 bytes
字符总数,实际上,期望的返回应该是 over 50KB
。
我试图设置ser.read(50000)
,但解释器会挂断。
我将如何扩展输入缓冲区以一次获得所有返回?
如果你在 Windows 平台上运行你的代码,你只需要在你的代码中添加一行。
ser.set_buffer_size(rx_size = 12800, tx_size = 12800)
其中 12800 是我选择的任意数字。您可以将接收(rx)和传输(tx)缓冲区设为 2147483647(等于 2^31 - 1)
这将允许您扩展输入缓冲区以一次获得所有返回。
请注意,这仅适用于某些驱动程序,因为这是一项建议。驱动程序可能不会接受您的建议,并且会坚持使用其原始缓冲区大小。
我遇到了完全相同的问题,包括 1020 字节的缓冲区大小,但还没有找到改变它的方法。我的解决方案是实现一个循环,如:
in_buff=''
while mbed.inWaiting():
in_buff+=mbed.read(mbed.inWaiting()) #read the contents of the buffer
time.sleep(0.11) #depending on your hardware, it can take time to refill the buffer
如果有人能想出一个调整缓冲区大小的解决方案,我会非常高兴!
我猜您正在读取 1020 个字节,因为缓冲区中只有这些,这就是 ser.inWaiting() 返回的内容。根据波特率,传输 50 KB 可能需要一段时间,或者手机期待的内容与您不同。握手?
检查 ser.inWaiting 的值,然后检查您收到的内容的内容以获取提示。
pySerial 使用本机操作系统驱动程序进行串行接收。在 Windows 的情况下,输入驱动程序的大小取决于设备驱动程序。
如果可能,您可以在设备管理器设置中增加大小,但最终您只需要足够快地读取数据即可。