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("串口已关闭。")
- 代码说明
- 导入模块:导入 serial 模块以使用串口通信功能。
- 打开串口:使用 serial.Serial 函数打开指定的串口,需要传入串口名称、波特率和超时时间。
- 读取数据:在一个无限循环中,使用 ser.readline() 方法读取一行数据,并将其解码为字符串。
- 异常处理:使用 try-except 块捕获可能出现的串口连接错误和用户手动终止程序的情况。
- 关闭串口:在程序结束时,确保关闭串口连接,释放资源。
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()
- 代码说明
- 导入模块:新增导入 matplotlib.pyplot 模块,用于绘图。
- 初始化列表:定义 x_values 和 y_values 列表,用来存储从串口接收到的 x 和 y 值。
- 初始化图形窗口:使用 plt.ion() 开启交互模式,创建图形窗口和坐标轴。
- 数据解析:在接收到数据后,通过字符串分割和类型转换提取出 x 和 y 值,并添加到对应的列表中。
- 绘图:每次接收到新数据后,清空当前图形,重新绘制 x 和 y 的波形图,然后更新图形窗口。
- 异常处理:添加了对数据解析过程中可能出现的 IndexError 和 ValueError 的处理。
- 关闭资源:在程序结束时,关闭串口连接和图形窗口。
4.2 安装matplotlib库
这个库用于在Python 环境中绘制图形。
pip install matplotlib
4.3 测试
- 运行Python程序
python serial-plot.py
近似正弦波。