Python串口接收数据并实时显示波形 - Windows

Python串口接收数据并实时显示波形 - Windows

陈拓 2025/04/10-2025/04/10

1. 安装Python

  • 从Microfoft Store安装

点击获取

  • 安装完成

2. 连接串口设备

  • 查看串口号

串口号COM4。

  • 通过串口助手查看串口数据

随意安装一个串口助手就行,我这个是从Microfoft Store安装的。

查看完数据要关闭串口,否则下面的程序会因为串口被占用而无法运行。

3. 使用 Python 读取串口数据

3.1 写代码文件

  • 打开一个命令行终端
  • 用下面的命令通过记事本(Notepad)编辑Python代码文件

notepad serial-data.py

创建新文件:

import serial

try:
    # 打开串口连接
    # 'COM4' 是串口名称,你需要根据实际情况修改
    # 115200 是波特率,要和发送端保持一致
    # timeout=1 表示超时时间为 1 秒
    ser = serial.Serial('COM4', 115200, timeout=1)

    print(f"成功连接到串口: {ser.name}")

    while True:
        # 读取一行数据
        data = ser.readline().decode('utf-8').strip()
        if data:
            print(f"接收到的数据: {data}")

except serial.SerialException as e:
    print(f"串口连接出错: {e}")
except KeyboardInterrupt:
    print("用户手动终止程序。")
finally:
    if 'ser' in locals() and ser.is_open:
        ser.close()
        print("串口已关闭。")

  • 代码说明
  1. 导入模块:导入 serial 模块以使用串口通信功能。
  2. 打开串口:使用 serial.Serial 函数打开指定的串口,需要传入串口名称、波特率和超时时间。
  3. 读取数据:在一个无限循环中,使用 ser.readline() 方法读取一行数据,并将其解码为字符串。
  4. 异常处理:使用 try-except 块捕获可能出现的串口连接错误和用户手动终止程序的情况。
  5. 关闭串口:在程序结束时,确保关闭串口连接,释放资源。

3.2 安装pyserial库

为Python 环境安装 pyserial 库,以实现串口通信。

pip install pyserial

警告:脚本pyserial-miniterm.exe和pyserial-ports.exe安装在'C:\Users\26025\AppData\Local\Packages\PythonSoftwareFoundation中。Python.3.13_qbz5n2kfra8p0\LocalCache\local packages\Python313\Scripts'不在环境变量PATH中。

可以将此目录添加到PATH中。

3.3 测试

  • 运行Python程序

python serial-data.py

Ctrl+C退出程序。

  • 数据格式

接收到的数据: x_value: 5.654867, y_value: -0.533738

接收到的数据: x_value: 5.969026, y_value: -0.355825

接收到的数据: x_value: 0.000000, y_value: 0.000000

接收到的数据: x_value: 0.314159, y_value: 0.372770

接收到的数据: x_value: 0.628319, y_value: 0.559154

接收到的数据: x_value: 0.942478, y_value: 0.838731

4. 将读出的数据以波形显示

4.1 写代码文件

  • 用下面的命令通过记事本(Notepad)编辑Python代码文件

notepad serial-plot.py

创建新文件:

import serial
import matplotlib.pyplot as plt

try:
    ser = serial.Serial('COM4', 115200, timeout=1)

    print(f"成功连接到串口: {ser.name}")

    # 初始化存储 x 和 y 值的列表
    x_values = []
    y_values = []

    # 初始化图形窗口
    plt.ion()
    fig, ax = plt.subplots()

    while True:
        # 读取一行数据
        data = ser.readline().decode('utf-8').strip()
        if data:
            print(f"接收到的数据: {data}")
            try:
                # 提取 x_value 和 y_value
                x_str = data.split('x_value: ')[1].split(',')[0]
                y_str = data.split('y_value: ')[1]
                x = float(x_str)
                y = float(y_str)
                x_values.append(x)
                y_values.append(y)

                # 绘制波形图
                ax.clear()
                ax.plot(x_values, y_values)
                plt.draw()
                plt.pause(0.1)
            except (IndexError, ValueError):
                print("数据解析出错,请检查数据格式。")

except serial.SerialException as e:
    print(f"串口连接出错: {e}")
except KeyboardInterrupt:
    print("用户手动终止程序。")
finally:
    if 'ser' in locals() and ser.is_open:
        ser.close()
        print("串口已关闭。")
    plt.close()

  • 代码说明
  1. 导入模块:新增导入 matplotlib.pyplot 模块,用于绘图。
  2. 初始化列表:定义 x_values 和 y_values 列表,用来存储从串口接收到的 x 和 y 值。
  3. 初始化图形窗口:使用 plt.ion() 开启交互模式,创建图形窗口和坐标轴。
  4. 数据解析:在接收到数据后,通过字符串分割和类型转换提取出 x 和 y 值,并添加到对应的列表中。
  5. 绘图:每次接收到新数据后,清空当前图形,重新绘制 x 和 y 的波形图,然后更新图形窗口。
  6. 异常处理:添加了对数据解析过程中可能出现的 IndexError 和 ValueError 的处理。
  7. 关闭资源:在程序结束时,关闭串口连接和图形窗口。

4.2 安装matplotlib库

这个库用于在Python 环境中绘制图形。

pip install matplotlib

4.3 测试

  • 运行Python程序

python serial-plot.py

近似正弦波。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨之清风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值