Python串口数据实时绘图
简介
随着物联网的发展,串口通信在数据传输方面扮演着重要的角色。而Python作为一种功能强大且易于学习的编程语言,具有广泛的应用领域,也可以用来实现串口数据的实时绘图。本文将介绍如何使用Python通过串口接收数据,并实时将数据可视化为图表。
准备工作
在开始之前,我们需要安装PySerial库,它是Python中用于串口通信的标准库。可以使用以下命令在终端中安装PySerial:
pip install pyserial
接收串口数据
首先,我们需要确定要接收串口的设备名称。可以通过以下代码查看当前可用的串口设备:
import serial.tools.list_ports
ports = serial.tools.list_ports.comports()
for port, desc, hwid in sorted(ports):
print(f"{port}: {desc} [{hwid}]")
上述代码将输出所有可用的串口设备以及它们的描述信息。
接下来,我们将使用PySerial库来打开串口并接收数据。以下是一个示例代码:
import serial
port = 'COM1' # 替换为实际的串口设备名称
baud_rate = 9600
ser = serial.Serial(port, baud_rate)
while True:
if ser.in_waiting > 0:
data = ser.readline().decode('utf-8').rstrip()
print(data)
上述代码中,我们使用serial.Serial
函数打开了一个串口,并指定了波特率。然后,我们进入了一个无限循环,在每次循环中检查是否有数据可读取。如果有数据可读取,我们将读取数据并将其转换为字符串格式,然后打印出来。
实时绘图
要将串口数据实时绘制为图表,我们将使用Matplotlib库。Matplotlib是一个用于绘制2D图形的Python库,可以生成各种类型的图表。
以下是一个示例代码,演示如何实时绘制一个折线图:
import serial
import matplotlib.pyplot as plt
port = 'COM1' # 替换为实际的串口设备名称
baud_rate = 9600
ser = serial.Serial(port, baud_rate)
x_data = []
y_data = []
plt.figure()
line, = plt.plot(x_data, y_data)
plt.xlabel('Time')
plt.ylabel('Value')
plt.title('Real-time Data')
while True:
if ser.in_waiting > 0:
data = ser.readline().decode('utf-8').rstrip()
value = float(data)
x_data.append(len(x_data))
y_data.append(value)
line.set_xdata(x_data)
line.set_ydata(y_data)
plt.xlim(0, len(x_data))
plt.ylim(min(y_data), max(y_data))
plt.pause(0.01)
上述代码中,我们首先创建了一个空的折线图,并设置了横轴和纵轴的标签以及标题。然后,我们进入了一个无限循环,在每次循环中检查是否有数据可读取。如果有数据可读取,我们将读取数据并将其转换为浮点数格式。接下来,我们将新的数据点添加到数据列表中,并更新图表的数据。最后,我们使用plt.pause
函数来暂停0.01秒,以便能够实时显示图表。
总结
通过使用PySerial和Matplotlib库,我们可以轻松地实现Python串口数据的实时绘图。首先,我们使用PySerial库来接收串口数据,并使用Matplotlib库来实时绘制图表。这种方法可以帮助我们可视化串口数据并更好地理解数据的变化。同时,我们还可以根据实际需求,对代码进行修改和扩展,以满足不同的应用场景。
状态图
下面是一个使用mermaid语法绘制的状态图,展示了整个数据接收和绘图的流程:
stateDiagram
[*] --> 接收数据
接收数据 --> 绘制图表
绘制图表 --> 接收数据
以上