如何扩展pyserial的输入缓冲区大小

Ire*_*red 8 python buffer pyserial

我想通过串口与手机通信.在给手机写了一些命令之后,我常常ser.read(ser.inWaiting())得到它的返回值,但我总是得到了总1020 bytes的字符,实际上,期望的回报应该结束了50KB.

我试图设置ser.read(50000),但解释器将继续.

如何扩展输入缓冲区以立即获得所有返回?

Val*_*tyn 6

如果您在 Windows 平台上运行您的代码,您只需在您的代码中添加一行。

ser.set_buffer_size(rx_size = 12800, tx_size = 12800)
Run Code Online (Sandbox Code Playgroud)

其中 12800 是我选择的任意数字。您可以将接收(rx)和发送(tx)缓冲区设置为 2147483647(等于 2^31 - 1)

这将允许您扩展输入缓冲区以一次获得所有回报。

请注意,这仅适用于某些驱动程序,因为它是一个建议。驱动程序可能不会接受您的建议,而是会坚持其原始缓冲区大小。

  • 您调用该方法的这个“ser”对象是什么?我尝试了“导入串行”中的端口和串行,但两次我分别得到“AttributeError:'Serial'对象没有属性'set_buffer_size'”和“AttributeError:模块'serial'没有属性'set_buffer_size'” (2认同)

mar*_*rcp 1

我猜您正在读取 1020 字节,因为这就是缓冲区中的全部内容,这就是 ser.inWaiting() 返回的内容。根据波特率,50 KB 可能需要一段时间才能传输,或者手机期望的内容与您不同。握手?

检查 ser.inWaiting 的值,然后检查您收到的提示内容。