当前位置:首页 > 物联网 > 智能应用
[导读]嵌入式开发中,调试传感器数据最原始的方式是看串口打印的数字,但一串冰冷的数值很难直观反映趋势。用Python在上位机实时绘制动态曲线,能让温度漂移、振动波形、信号毛刺一目了然。本文以PyQtGraph库为例,演示从串口读取传感器数据到实时滚动画布的完整实现。


嵌入式开发中,调试传感器数据最原始的方式是看串口打印的数字,但一串冰冷的数值很难直观反映趋势。用Python在上位机实时绘制动态曲线,能让温度漂移、振动波形、信号毛刺一目了然。本文以PyQtGraph库为例,演示从串口读取传感器数据到实时滚动画布的完整实现。

为什么选PyQtGraph

Matplotlib的animation模块也能实现动态绘图,但帧率超过10fps时CPU占用飙升,且交互卡顿。PyQtGraph基于Qt和OpenGL,专门为高性能实时可视化设计,在百万级数据点下依然流畅。它原生支持滚动视图、自动缩放和多曲线叠加,非常适合嵌入式上位机。

整体架构

传感器 → 串口 → Python串口线程 → 环形缓冲区 → PyQtGraph绘图线程

数据采集与UI渲染分离,避免串口阻塞界面。使用QTimer定时刷新画布,典型刷新间隔30ms(约33fps)。

核心代码实现

1. 串口数据采集线程

import serial, threading, collections


class SerialReader(threading.Thread):

   def __init__(self, port, baud=115200):

       super().__init__()

       self.ser = serial.Serial(port, baud, timeout=0.1)

       self.buffer = collections.deque(maxlen=500)  # 环形缓冲区

       self.running = True


   def run(self):

       while self.running:

           line = self.ser.readline()

           if line:

               try:

                   value = float(line.strip())

                   self.buffer.append(value)

               except ValueError:

                   pass


   def stop(self):

       self.running = False

       self.ser.close()

假设传感器每秒输出10个数值,每行一个浮点数,如23.45\n。

2. PyQtGraph实时绘图窗口

import pyqtgraph as pg

from pyqtgraph.Qt import QtCore, QtWidgets

import sys


class RealTimePlot(QtWidgets.QMainWindow):

   def __init__(self, reader):

       super().__init__()

       self.reader = reader

       self.setWindowTitle("传感器实时曲线")

       self.resize(800, 400)


       # 创建绘图部件

       self.plot_widget = pg.PlotWidget()

       self.setCentralWidget(self.plot_widget)

       self.curve = self.plot_widget.plot(pen='y')


       # 定时器:每30ms更新一次

       self.timer = QtCore.QTimer()

       self.timer.timeout.connect(self.update_plot)

       self.timer.start(30)


   def update_plot(self):

       # 从缓冲区取出所有数据并清空

       data = list(self.reader.buffer)

       self.reader.buffer.clear()

       if data:

           # 将新数据追加到现有曲线后方

           old_x, old_y = self.curve.getData()

           if old_x is None:

               x = list(range(len(data)))

               y = data

           else:

               x = list(old_x) + [old_x[-1] + i + 1 for i in range(len(data))]

               y = list(old_y) + data

               # 只保留最近500点

               if len(x) > 500:

                   x = x[-500:]

                   y = y[-500:]

           self.curve.setData(x, y)

           # 自动滚动X轴

           self.plot_widget.setXRange(max(0, x[-1]-500), max(500, x[-1]))

3. 主程序入口

if __name__ == '__main__':

   reader = SerialReader('COM3', 115200)

   reader.start()


   app = QtWidgets.QApplication(sys.argv)

   win = RealTimePlot(reader)

   win.show()

   app.exec_()

   reader.stop()

性能优化要点

缓冲区大小:maxlen=500足够显示最近5秒数据(每秒10个点)。若采样率1kHz,应增大到2000以上。

更新频率:QTimer(30ms)对应33fps,人眼已觉流畅。若CPU吃紧可改为50ms。

数据类型:使用numpy.array替代Python列表可进一步提升setData速度,但本例为保持简洁使用列表。

避免内存泄漏:每次update_plot清空缓冲区,旧数据被丢弃。

实际效果

用DHT22温度传感器配合ESP32,每200ms输出一次温度值。上位机运行上述代码,曲线平滑滚动,延迟低于一个采样周期。当温度从25°C升至30°C时,上升趋势清晰可见,无需盯着串口数字发呆。

扩展思路

多曲线叠加:创建多个plot()对象,分别绑定不同传感器通道。

坐标轴标签:添加setLabel('left', '温度 (°C)')和setLabel('bottom', '采样点')。

触发式截图:按空格键保存当前波形为PNG,用于测试报告。

网络数据源:将SerialReader替换为SocketReader,即可远程监控。

写在最后

Python+PyQtGraph的组合让嵌入式数据可视化变得像写脚本一样简单。从串口读取到动态曲线,核心代码不到80行,却解决了“数据太多看不懂”的根本痛点。对于需要长时间记录传感器趋势的调试场景,这套方案比商业数据采集软件更轻量、更可控。下次调试PID参数或分析振动信号时,不妨试试让数据“画”出来。



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

在工业物联网(IIoT)场景中,设备产生的海量时序数据需通过可视化工具转化为可操作的洞察。Grafana作为开源数据可视化领域的标杆工具,凭借其多数据源支持、动态仪表盘和灵活告警机制,已成为工业监控系统的核心组件。本文结...

关键字: 工业物联网 数据可视化 Grafana

在数字时代,大量的数据正在不断被生成和积累,而如何从这些海量的数据中提取有价值的信息成为了各个领域面临的重要挑战。数据可视化作为解决方案之一,通过将数据以视觉化形式呈现,帮助用户更直观地理解和分析数据。本文将探讨数据可视...

关键字: 数据可视化 数据分析 智能化

数据可视化是一种将数据转化为图形、图表或其他视觉元素的技术,目的是帮助人们更好地理解和解读数据。在当今大数据时代,数据可视化成为了数据分析与决策的重要工具。本文将介绍一些常见的数据可视化应用工具,帮助读者更好地选择合适的...

关键字: 数据可视化 大数据 图形

来到在渝中区,工作人员打开"渝中区基层智慧治理平台",人、房、地、事、物、组织等数据一目了然,实现跨层级、跨部门、跨业务联动,做到“一屏观天下”“一网统管”。据介绍,针对基层信息“多次采集、重复上报”难点,平台通过“渝快...

关键字: 大数据 智慧治理 数据可视化

在这篇文章中,小编将对工业大数据的相关内容和情况加以介绍以帮助大家增进对工业大数据的了解程度,和小编一起来阅读以下内容吧。

关键字: 工业大数据 大数据 数据可视化

随着智慧城市建设的不断发展,智慧园区作为智慧城市的先行区,其覆盖区域越来越大,产值越来越集中,对于园区数字化建设和智能化管理的诉求也愈加强烈。园区数字化管理是以实现园区多维度业务数据汇聚、融合、共享,通过可视化技术将园区...

关键字: 数据可视化 智慧城市 智慧园区 GIS

(全球TMT2021年9月14日讯)近日,亚马逊云科技宣布Amazon Managed Grafana正式可用,这是一项全面托管的数据可视化服务,使客户能够即时查询、关联、可视化运营指标/日

关键字: 亚马逊 数据可视化 ge

数据可视化是目前物联网的热门话题。随着越来越多的公司将数据驱动的计划和创新融入其整体战略和运营中,数据可视化的核心重要性正在不断增长。服务提供商和最终用户都开始认识到物联网应用的数据可视化工具的

关键字: 数据可视化 物联网

集中式加密货币交易所是加密货币生态系统中最重要的黑盒子。我们都有在使用它们,我们对它们又爱又恨,但是我们对它们的内在行为知之甚少。我们一直在埋头研究一系列机器学习模型,以帮助我们更好地理解加密货

关键字: 加密 模型 机器学习 数据可视化

大数据是近年来快速发展的技术领域,大数据相关基础设施、分析工具和应用系统都在快速发展。与此同时,大数据在各个领域中的应用也在不断快速地深入发展,并不断深入影响社会、工作、学习和生活。 数

关键字: 大数据 移动学习 数据可视化 终端
关闭