“使用Python串口实时显示数据并绘图的例子,通过pyserial库实现串口通信,结合数据处理和可视化工具如pyqtgraph。”
在Python编程中,串口通信是连接硬件设备和软件的重要手段,尤其在嵌入式系统、物联网(IoT)和自动化项目中常见。`pyserial`是一个方便的库,它提供了Python接口,允许开发者与串行端口进行交互。在本例中,我们将详细介绍如何使用`pyserial`进行串口通信,并实时显示接收到的数据,甚至将这些数据进行绘图。
首先,确保你正确地安装了`pyserial`库。在命令行环境中,可以运行`pip install pyserial`进行安装。如果遇到“‘E:\Anaconda3\Scripts\pip-script.py’ is not present.”的错误,你可以使用`easy_install pip`命令解决后再尝试安装。
`pyserial`的基本用法包括打开、写入、读取和关闭串口。例如,`ser = serial.Serial(0)`会打开默认的第一个串口(在Windows系统下通常是`COM1`)。使用`ser.write("hello")`可以向串口发送数据,而`ser.close()`则用于关闭串口。为了查看串口状态,可以使用`ser.isOpen()`。
串口的一些关键属性包括:
- `name`: 设备名称
- `portstr`: 已废弃,现在推荐使用`name`代替
- `port`: 读写端口号
- `baudrate`: 波特率,例如9600、115200等
- `bytesize`: 字节大小,通常为8
- `parity`: 校验位,如`serial.PARITY_NONE`
- `stopbits`: 停止位,通常为1或2
- `timeout`: 读取超时设置
- `writeTimeout`: 写入超时
- `xonxoff`: 软件流控
- `rtscts`: 硬件流控
- `dsrdtr`: 硬件流控
- `interCharTimeout`: 字符间隔超时
在实际应用中,你需要根据串口设备的具体设置来配置这些属性。例如,以下是最基础的串口通信代码片段:
```python
import serial
port = "COM5" # 串口名称
bps = 9600 # 波特率
timeout = 5 # 超时时间
# 初始化串口
ser = serial.Serial(port, int(bps), timeout=1, parity=serial.PARITY_NONE, stopbits=1)
if ser.isOpen():
print("打开成功")
# 向串口写入数据
ser.write("hello".encode()) # 需要编码为字节字符串
# 读取数据
data = ser.readline().decode() # 以/n结束的数据行
# 关闭串口
ser.close()
```
对于实时显示和绘图,可以结合其他Python库如`matplotlib`或`pyqtgraph`。`pyqtgraph`是一个强大的实时图形库,适合实时数据显示和交互。你可以定期读取串口数据,然后将其传递给`pyqtgraph`的绘图函数,如`plot()`,以动态展示数据变化。
下面是一个简单的例子,展示了如何使用`pyqtgraph`实时绘制接收到的串口数据:
```python
import time
import pyqtgraph as pg
from PyQt5.QtWidgets import QApplication
import serial
app = QApplication([])
win = pg.GraphicsWindow(title="实时串口绘图")
plotWidget = win.addPlot(title="串口数据")
dataSeries = plotWidget.plot()
ser = serial.Serial(port, bps, timeout=1)
while True:
if ser.isOpen():
data = ser.readline().decode().strip()
try:
value = float(data)
dataSeries.setData(x=[time.time()], y=[value]) # 更新数据
except ValueError:
pass
time.sleep(0.1) # 控制更新速度
app.exec_()
ser.close()
```
这段代码创建了一个实时更新的图表窗口,不断从串口读取数据并将其作为Y轴值,X轴值对应于时间戳。注意,你需要根据实际串口数据格式处理数据转换(这里假设接收到的是浮点数)。
通过以上介绍,你应该能够理解如何使用Python的`pyserial`库进行串口通信,以及如何结合`pyqtgraph`库实现实时数据的图形化展示。在实际项目中,你可能需要根据具体需求调整代码,比如添加错误处理、数据缓存、多线程等高级功能。