用pyqtgraph和pyserial接收串口16进制数据并过滤部分数据后绘制动态图
时间: 2024-05-03 09:23:13 浏览: 169
以下是一个示例代码,可以通过pyqtgraph和pyserial接收串口16进制数据并过滤部分数据后绘制动态图:
```python
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout
from PyQt5.QtCore import QTimer
import pyqtgraph as pg
import serial
class SerialMonitor(QWidget):
def __init__(self):
super().__init__()
# 设置串口参数
self.ser = serial.Serial()
self.ser.baudrate = 115200
self.ser.port = 'COM5'
self.ser.open()
self.ser.flushInput()
# 创建图形窗口和绘图区域
self.win = pg.GraphicsWindow(title='Serial Monitor')
self.win.resize(800, 600)
self.p = self.win.addPlot()
self.p.setRange(xRange=[0, 100], yRange=[-50, 50])
self.curve = self.p.plot(pen='y')
# 创建定时器
self.timer = QTimer()
self.timer.timeout.connect(self.update)
def update(self):
# 读取串口数据
data = self.ser.read_all()
# 将16进制字符串转换为整数列表
nums = [int(data[i:i+2], 16) for i in range(0, len(data), 2)]
# 过滤数据,只保留大于10的数字
nums = [num for num in nums if num > 10]
# 绘制数据
self.curve.setData(nums)
def start(self):
self.timer.start(10)
if __name__ == '__main__':
app = QApplication(sys.argv)
monitor = SerialMonitor()
monitor.show()
monitor.start()
sys.exit(app.exec_())
```
在上述代码中,我们创建了一个`SerialMonitor`类,该类继承自`QWidget`,并包含了串口读取和绘图的相关逻辑。具体来说,我们在构造函数中设置了串口参数,并创建了一个图形窗口和绘图区域。在`update`方法中,我们首先读取串口数据,然后将16进制字符串转换为整数列表。接着,我们过滤数据,只保留大于10的数字,并将其绘制在图形窗口中。
最后,在`main`函数中,我们创建了一个应用程序对象,并实例化了`SerialMonitor`类。我们调用`show`方法显示窗口,并调用`start`方法启动定时器,定期更新绘图。
阅读全文