yizhiyu_hh 2023-07-11 11:46 采纳率: 75%
浏览 29
已结题

python串口通信(接收帧数据)

最近向用python写一个通过串口接收单片机输出数据流的程序,写了个大概,但是连接到实际串口中的时候,会出现两个问题。
1、只有压力传感器变化时才输出数据,我希望的是程序运行后,就像串口助手一样实时的传出数据,无论传感器是否有压力变化。
2、即使是有压力变化输出了数据帧,帧中的数据总是不满足按照规定字符的个数,有时候多有时候少。
请指点一下

import serial
import threading
# from Data_stitch import read_frames_from_txt

# 数据保存为txt
port1_txt_path = "F:/port11_data.txt"
port2_txt_path = "F:/port12_data.txt"

# 串口数据接收线程
def serial_thread(port, baudrate, bytesize, parity, stopbits, port_txt_path):
    ser = serial.Serial(port, baudrate, bytesize, parity, stopbits)
    if ser.is_open:
        print('串口已打开')

    with open(port_txt_path, 'w') as file:
        if ser.in_waiting:
            while True:
                try:
                    data = ser.readline().strip()
                    file.write(data.hex())
                    print(data.hex())
                except UnicodeDecodeError as e:
                    print('解码错误:', e)
                    continue
            ser.close()
            if not ser.is_open:
                print('串口已关闭')

# 创建线程并启动
thread1 = threading.Thread(target=serial_thread('com9', 460800, serial.EIGHTBITS, serial.PARITY_NONE, serial.STOPBITS_ONE, port1_txt_path))
thread2 = threading.Thread(target=serial_thread('com10', 460800, serial.EIGHTBITS, serial.PARITY_NONE, serial.STOPBITS_ONE, port2_txt_path))
thread1.start()
thread2.start()
  • 写回答

3条回答 默认 最新

  • qllaoda 2023-07-11 13:14
    关注

    第一点,输出信息的是单片机,python只是接收,没法决定让对方怎么发吧,除非单片机能通过串口接收命令后改变发送频率。
    第二点,可能是接收程序漏掉了什么,但也可能是单片机确实就发送有误,这个最好先想办法确认一下到底是哪边出问题了。我估计和你的读法有关 readline().strip(),这里显然可能会删掉某些字符。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月8日
  • 已采纳回答 8月31日
  • 创建了问题 7月11日

悬赏问题

  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上
  • ¥15 提问一个关于vscode相关的环境配置问题,就是输入中文但是显示不出来,代码在idea可以显示中文,但在vscode不行,不知道怎么配置环境
  • ¥15 netcore使用PuppeteerSharp截图
  • ¥20 这张图页头,页脚具体代码该怎么写?
  • ¥15 关于#sql#的问题,请各位专家解答!
  • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂