解决Python获取串口数据只能获取一部分的问题

解决Python获取串口数据只能获取一部分的问题

前言

我是在树莓派上跑Python程序,获取树莓派的串口数据,从网上找了模板直接ctrl c、ctrl v拿来就想用,结果发现一个严重的问题,串口可以读取到数据但是数据总是只能获取到一部分,后面的半截就丢了,整个读出来的数据完全没法看.

一、问题描述

我从网上找的代码大多是这样的

解决Python获取串口数据只能获取一部分的问题
解决Python获取串口数据只能获取一部分的问题
然后我参考这种格式写了一个,发现总是丢数据,半段半段就没了,非常奇怪,不论是ttyAMA0、ttyS0还是USB都是这样的。

; 二、问题解决

在搞了好几天,改了好几个地方之后,终于找到一个还算是好使的写法:

解决Python获取串口数据只能获取一部分的问题
代码放在这里:
mser_device.flushInput()
while True:
    try:

        res = mser_device.read_all()
        if len(res) != 0:
            print(res)

三、还是有点问题

1、串口数据的内容还是无法一次性全部读取出来

实际测试发现读出来的数据还是一段一段的,但是好在可以稳定的把所有数据都拿出来,我们需要做的就是将被打断的数据重新拼接为一个完整的数据。

解决Python获取串口数据只能获取一部分的问题

; 2、弥补办法-数据拼接

具体拼接的时候需要数据本身带有数据帧头标志数据开始,然后还需要数据帧尾标志数据结束(或者知道数据帧长度也可以)。
比如我这里是知道数据帧的帧头和帧尾,我这样就可以把数据重新拼接起来:

def read_serial_info():
    serial_tmp = b''
    serial_rece_tmp = b''
    mser_device.flushInput()
    while True:
        try:

            res = mser_device.read_all()
            if len(res) != 0:
                print(res)

                if (res[0] == 91 and res[1] == 45):
                    serial_rece_tmp = res
                elif(res[-1]  == 93 and res[-2] == 45):
                    if (serial_rece_tmp[0] == 91 and serial_rece_tmp[1] == 45):
                        serial_rece_tmp = serial_rece_tmp + res
                if len(serial_rece_tmp) != 0:
                    if serial_rece_tmp[-1]  == 93 and serial_rece_tmp[-2] == 45 :
                        from_serial_info_array.append(serial_rece_tmp)
                        serial_rece_tmp = b''
                        continue

Original: https://blog.csdn.net/weixin_45386875/article/details/127822654
Author: 自由学者亻伊宸
Title: 解决Python获取串口数据只能获取一部分的问题

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/659822/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球