python怎么读数据_python如何从串口完整读取数据?

我会努力解决这个问题的。:)循环等待任何输入可用serial_port.in_waiting > 0。因此你所看到的行为。一旦可以获取任何内容,就会开始读取。似乎PySerial没有任何额外的抽象可以让您知道,比如最后一个readed byte将是一个ASCII大括号字符(我实际上刚刚浏览了文档)。您总是可以在Python脚本中应用一个通用的解决方案,让它变得有意义。在

先问一个问题。您的输入示例建议您处理同样大小的string/JSON?我们真的应该那么幸运吗?如果是这样的话,您可以等到这个或更多字节可用,然后将所需的大小读入buffer。在

否则,您的代码将发生变化:buffer = bytes() # .read() returns bytes right?

while True:

if serial_port.in_waiting > 0:

buffer += serial_port.read(serial_port.in_waiting)

try:

complete = buffer[:buffer.index(b'}')+1] # get up to '}'

buffer = buffer[buffer.index(b'}')+1:] # leave the rest in buffer

except ValueError:

continue # Go back and keep reading

print('buffer=', complete)

ascii = buffer.decode('ascii')

print('ascii=', ascii)

注1:我推测serial_port.in_waiting在理论上可以在if和read之间改变,但我也假设未读字节只是停留在缓冲区中,我们没事。在

注2:这种方法有点幼稚,没有考虑到您也可以读取两段JSON代码。在

注3:如果是这样的话,它也不考虑JSON中的嵌套映射。在

希望还是有用的。底线。除非处理固定大小的输入或使用任何其他方法让pySerial按需要将内容分块提供给您,否则您必须读入内容并在脚本中进行处理。在

更新:在评论中反映讨论。在

你真正的问题是你只是在看串行端口上的字节流。在这个层次上,对传递的数据没有任何有用的理解。您需要一个更高的层次(应用程序或中间层)来理解即将到来的内容。换句话说,解析封装传输数据的协议。在

事实上,如果我们知道代表JSON的字符串(字节束)是通过的(服务器作为协议,封装/表示数据(结构)的方式),那就可以工作了,但是重组需要在原始串行通信之上进行。我们的应用程序(或库/模块)可以读取原始的串行数据,使其有意义,并将它们提供给更高级别。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值