使用 Python 绘制串口数据的详细指南

在本指南中,我们将一起学习如何使用 Python 从串口读取数据并绘制这些数据。我们将分步了解整个流程,最后实现一个简单的可视化。对于串口数据的处理常用的库有 pyserial(用于串口通讯)和 matplotlib(用于绘图)。

整体流程

为了帮助你更好地理解整个过程,下面是一个简单的步骤表格:

步骤描述
1安装必要的 Python 库
2使用 pyserial 从串口读取数据
3处理读取到的数据
4使用 matplotlib 绘制数据
5显示绘制的图形

步骤细化

步骤 1:安装必要的 Python 库

在开始之前,你需要确保安装了 pyserialmatplotlib。你可以使用 pip 安装这些库:

pip install pyserial matplotlib
  • 1.

这条命令会从 Python 包索引 (PyPI) 下载并安装 pyserialmatplotlib 库。

步骤 2:使用 pyserial 从串口读取数据

接下来,我们需要设置串口并读取数据。创建一个名为 read_serial.py 的 Python 文件,并添加以下代码:

import serial
import time

# 设置串口参数
ser = serial.Serial('COM3', baudrate=9600, timeout=1)  # 这里可以更改为你的串口,比如'/dev/ttyUSB0'
time.sleep(2)  # 等待串口连接稳定

# 读取串口数据
def read_data():
    if ser.in_waiting > 0:  # 判断是否有数据可读
        data = ser.readline()  # 读取一行数据
        return data.decode('utf-8').strip()  # 解码并去掉首尾空格
    return None
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

这段代码的主要功能是连接指定的串口并读取数据。ser.readline() 方法用于读取串口传来的数据。

步骤 3:处理读取到的数据

假设我们从串口读取的数据是数字,我们需要将其存储在一个列表中。让我们继续在 read_serial.py 中添加处理数据的代码:

data_list = []

# 持续读取数据直到达到10个数据点
while len(data_list) < 10:
    value = read_data()
    if value is not None:  # 判断是否读取到数据
        data_list.append(float(value))  # 将字符串转换为浮点数并存入列表
        print(f"读取数据: {value}")  # 打印读取到的数据
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

在这段代码中,我们创建了一个 data_list 列表,以存储读取到的数据。我们会持续读取数据,直到收集到 10 个数据点为止。

步骤 4:使用 matplotlib 绘制数据

现在,我们将使用 matplotlib 来绘制读入的数据。让我们继续完善我们的代码:

import matplotlib.pyplot as plt

# 绘制数据
plt.plot(data_list, marker='o')  # 将数据点用圆形标记表示
plt.title('串口数据绘制')
plt.xlabel('数据点编号')
plt.ylabel('读取的值')
plt.grid()
plt.show()  # 显示图形
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

这段代码使用 matplotlibplot 方法绘制串口读取的数据,并在图形中添加一些标题和标签。

步骤 5:显示绘制的图形

将完整代码放在一起,你的 read_serial.py 文件应该如下所示:

import serial
import time
import matplotlib.pyplot as plt

# 设置串口参数
ser = serial.Serial('COM3', baudrate=9600, timeout=1)  # 这里可以更改为你的串口,比如'/dev/ttyUSB0'
time.sleep(2)  # 等待串口连接稳定

# 读取串口数据
def read_data():
    if ser.in_waiting > 0:  # 判断是否有数据可读
        data = ser.readline()  # 读取一行数据
        return data.decode('utf-8').strip()  # 解码并去掉首尾空格
    return None

data_list = []

# 持续读取数据直到达到10个数据点
while len(data_list) < 10:
    value = read_data()
    if value is not None:  # 判断是否读取到数据
        data_list.append(float(value))  # 将字符串转换为浮点数并存入列表
        print(f"读取数据: {value}")  # 打印读取到的数据

# 绘制数据
plt.plot(data_list, marker='o')  # 将数据点用圆形标记表示
plt.title('串口数据绘制')
plt.xlabel('数据点编号')
plt.ylabel('读取的值')
plt.grid()
plt.show()  # 显示图形
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
可视化流程图

我们可以使用 mermaid 语言来展示整个流程:

串口数据读取与可视化 1
安装库
安装库
1
安装 pyserial
安装 pyserial
1
安装 matplotlib
安装 matplotlib
读取数据
读取数据
1
设置串口参数
设置串口参数
1
读取串口数据至列表
读取串口数据至列表
绘制数据
绘制数据
1
使用 matplotlib 绘制数据
使用 matplotlib 绘制数据
串口数据读取与可视化

总结

通过本指南,我们完成了从串口读取数据并将其可视化的全过程。你可以根据需要调整代码中的串口和参数,也可以更改数据的处理方式。随着你对 Python 和数据可视化的理解加深,你可以创建更加复杂和有趣的项目。如果你在实现过程中遇到任何问题,不要犹豫,随时寻求更多的帮助和资料。祝你编程愉快!