当前位置: 首页 > news >正文

基于 Art_DAQ、InfluxDB 和 PyQt 的传感器数据采集、存储与可视化

📚 目标

该项目旨在构建一个完整的传感器数据采集系统,集成以下三大核心技术:

  • Art_DAQ:用于高精度模拟信号采集(兼容 USB8814 等国产 DAQ 设备)
  • InfluxDB:高性能时序数据库,用于高效存储与查询时间序列数据
  • PyQt5 + pyqtgraph:构建跨平台图形用户界面(GUI)并实现实时数据可视化

最终成果:一个可独立运行的 .exe 软件,具备硬件连接检测、实时波形显示、数据保存为 CSV 等功能。

源码:https://gitee.com/phm720/signal-monitor


文章目录

    • 📚 目标
    • @[toc]
    • 🧰 一、环境准备
      • 1. 安装 Python
      • 2. 创建独立虚拟环境(避免依赖冲突)
      • 3. 安装核心依赖
      • 4. 安装 InfluxDB
      • 5. 安装 DAQ 驱动
      • 6.硬件连接
    • 🛠️ 二、项目结构
    • 🎨 三、设计用户界面(`.ui` 文件)
    • 💻 四、核心代码实现
      • 1. 导入必要模块
      • 2. 资源路径处理函数(关键!用于打包)
      • 3. 主窗口类定义
      • 4. 硬件连接检测
      • 5. 数据采集(多线程)
      • 6. 实时绘图更新
      • 7. 数据保存为 CSV
      • 8. 程序执行
    • 📦 五、打包为独立 `.exe` 文件
      • 1. 生成 `.spec` 文件
      • 2. 编辑 `main.spec`(关键配置,可参照 main.spec.bac)
      • 3. 打包
    • 🧪 六、部署与运行
      • 用户需准备:
      • 软件功能:
      • 截图:
    • 🔚 七、总结
    • 📎 附录:常见问题
      • Q1:打包后 UI 加载失败?
      • Q2:图标不显示?
      • Q3:体积太大?

🧰 一、环境准备

1. 安装 Python

下载地址:https://www.python.org/downloads/

⚠️ 推荐使用 Python 3.9,避免某些库的兼容性问题。


2. 创建独立虚拟环境(避免依赖冲突)

# 创建虚拟环境
python -m venv .venv# 激活环境
# Windows:
.venv\Scripts\activate

3. 安装核心依赖

pip install pyqt5
pip install pyqtgraph
pip install numpy
pip install pandas
pip install influxdb-client
pip install pyinstaller

✅ 或者执行此命令安装依赖 pip install -r requirements.txt


4. 安装 InfluxDB

  • 下载地址:https://www.influxdata.com/downloads/
  • 启动后,默认监听 http://localhost:8086

5. 安装 DAQ 驱动

  • USB8814 用户:作者使用的数据采集卡型号是USB8814,该型号数据采集卡的参数如下所示:

在这里插入图片描述

  • 需安装 ArtDAQ 驱动(厂商提供),ArtDAQ 驱动安装包(如下图所示)下载链接:https://bhpan.buaa.edu.cn/link/AAC0348032CA3B4733A7ED89FB6E86FDB4。

在这里插入图片描述

  • 安装方法:双击 Setup.exe,安装 ArtDAQ 1.8.31

在这里插入图片描述

  • 提取码可在评论区联系作者获取(发送自己的邮箱,5个工作日之内有回复)。

✅ 如果设备管理器或 Device Management & Configuration Tool - ART Technology 软件中,所连接的采集卡左侧有黄色三角警告图标,很有可能是数字签名问题,建议查阅驱动安装包目录下 ARTDAQ 使用方法-V6.01.pdf 的最后几页,以禁用驱动程序数字签名。

设备管理器界面:

在这里插入图片描述

ARTDAQ 软件界面:

在这里插入图片描述

6.硬件连接

整体连接:

在这里插入图片描述

这里用的是三轴加速度传感器,可读取 XYZ 三个方向上的加速度,对应 ai0ai1ai2 三个通道。

三轴加速度传感器:

在这里插入图片描述

USB8814 数据采集卡:

在这里插入图片描述


🛠️ 二、项目结构

sensor_monitor/
├── main.py                 # 主程序
├── mainwindow.ui           # Qt Designer 设计的界面
├── icon.ico                # 软件图标
├── requirements.txt        # 依赖列表
├── main.spec.bac           # 打包配置文件备份
├── README.md               # 项目说明
├── LICENSE                 # 软件许可
├── .gitignore              # git 项目文件
├── .venv/                  # 虚拟环境
├── assets/                 # README.md 依赖的资源
└── artdaq/                 # ArtDAQ 驱动包

🎨 三、设计用户界面(.ui 文件)

使用 Qt Designer 创建 mainwindow.ui,包含以下控件:

  • QPushButton:开始采集、停止采集、保存数据
  • QLabel:状态显示(如“采集中”、“空闲”)
  • PlotWidget:实时波形显示区域(pyqtgraph)
  • QLineEdit:采样率、通道数等参数输入

💡 保存后,用 uic.loadUi('mainwindow.ui', self) 在代码中加载。


💻 四、核心代码实现

1. 导入必要模块

import sys
import numpy as np
import pandas as pd
from datetime import datetime, timezone
from influxdb_client import InfluxDBClient
from PyQt5 import QtWidgets, uic
from PyQt5.QtWidgets import QMessageBox, QFileDialog
import pyqtgraph as pg
import artdaq  # 项目目录下要包含 artdaq 文件

2. 资源路径处理函数(关键!用于打包)

def resource_path(relative_path):try:base_path = sys._MEIPASSexcept Exception:base_path = os.path.dirname(os.path.abspath(__file__))return os.path.join(base_path, relative_path)

3. 主窗口类定义

class MainWindow(QtWidgets.QMainWindow):def __init__(self):super().__init__()# 动态加载 UIui_path = resource_path('mainwindow.ui')uic.loadUi(ui_path, self)# 初始化 InfluxDB 客户端self.influx_client = InfluxDBClient(url="http://localhost:8086",token="your-token",org="your-org")self.write_api = self.influx_client.write_api()# 硬件检测self.hardware_connected = Falseself.test_hardware_connection()if not self.hardware_connected:QMessageBox.critical(self, "硬件错误", "无法连接到采集卡,请检查设备。")self.startButton.setEnabled(False)else:QMessageBox.information(self, "连接成功", "已检测到采集卡。")# 初始化绘图self.plot_widget = self.findChild(pg.PlotWidget, 'plotWidget')self.curve = self.plot_widget.plot(pen='y')# 连接按钮信号self.startButton.clicked.connect(self.start_acquisition)self.stopButton.clicked.connect(self.stop_acquisition)self.saveButton.clicked.connect(self.save_data)self.is_running = Falseself.session_start = Noneself.session_end = None

4. 硬件连接检测

def test_hardware_connection(self):try:task = artdaq.Task()task.ai_channels.add_ai_voltage_chan("Dev1/ai0")  # 测试通道task.close()self.hardware_connected = Truereturn Trueexcept Exception as e:print(f"硬件检测失败: {e}")self.hardware_connected = Falsereturn False

5. 数据采集(多线程)

from PyQt5.QtCore import QThread, pyqtSignalclass DataAcquisitionThread(QThread):data_ready = pyqtSignal(np.ndarray)def __init__(self):super().__init__()self.running = Falsedef run(self):task = artdaq.Task()task.ai_channels.add_ai_voltage_chan("Dev1/ai0:7")  # 8 通道task.timing.cfg_samp_clk_timing(1000)  # 1kHz 采样率self.running = Truewhile self.running:data = task.read(number_of_samples_per_channel=100)self.data_ready.emit(np.array(data))task.close()

MainWindow 中启动线程:

def start_acquisition(self):self.acq_thread = DataAcquisitionThread()self.acq_thread.data_ready.connect(self.update_plot)self.acq_thread.start()self.is_running = Trueself.session_start = datetime.now().timestamp()

6. 实时绘图更新

def update_plot(self, data):if data.ndim > 1:data = data[0]  # 取第一通道示例self.curve.setData(data)

7. 数据保存为 CSV

def save_data(self):if not self.session_start or not self.session_end:QMessageBox.warning(self, "保存失败", "无采集数据。")returntry:query = f'''from(bucket: "sensor_data")|> range(start: {self.session_start}s, stop: {self.session_end}s)|> filter(fn: (r) => r._measurement == "voltage")|> pivot(rowKey:["_time"], columnKey: ["channel"], valueColumn: "_value")'''result = self.influx_client.query_api().query(query)# ... 转为 DataFrame 并保存为 CSVfilename, _ = QFileDialog.getSaveFileName(self, "保存数据", "", "CSV Files (*.csv)")if filename:df.to_csv(filename, index=False)QMessageBox.information(self, "保存成功", f"数据已保存至:\n{filename}")except Exception as e:QMessageBox.critical(self, "保存失败", str(e))

8. 程序执行

程序执行前务必在电脑上安装 ArtDAQ 驱动,并且连接好数据采集卡、传感器等硬件,同时启动 InfluxDB 服务,配置好 InfluxDB 各项参数,否则程序无法正常运行。
执行以下命令,执行程序:

python main.py

📦 五、打包为独立 .exe 文件

1. 生成 .spec 文件

pyinstaller --onefile --windowed --icon=icon.ico main.py

2. 编辑 main.spec(关键配置,可参照 main.spec.bac)

a = Analysis(['main.py'],datas=[('mainwindow.ui', '.'),      # 包含 UI 文件('artdaq', 'artdaq'),      # 包含驱动文件],hiddenimports=['influxdb_client','numpy',],excludes=['tkinter', 'matplotlib', 'PyQt5.Qt3D*', 'PyQt5.QtWeb*'],...
)exe = EXE(...,console=False,          # 无控制台icon='icon.ico',        # 图标
)

3. 打包

pyinstaller main.spec

输出文件位于 dist/Signaller.exe


🧪 六、部署与运行

用户需准备:

  1. 安装 ArtDAQ 驱动
  2. 启动 InfluxDB 服务
  3. 运行 Signaller.exe

软件功能:

  • 启动时自动检测硬件连接
  • 实时显示多通道波形
  • 支持开始/停止采集
  • 可将历史数据导出为 CSV

截图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

完整的演示视频:

https://v.youku.com/v_show/id_XNjQ5MzAwMDIxNg==.html


🔚 七、总结

技术作用
Art_DAQ高精度、低延迟数据采集
InfluxDB高效存储与查询时间序列数据
PyQt + pyqtgraph构建专业级 GUI 与实时可视化
PyInstaller打包为可分发的 .exe 软件

✅ 本系统适用于实验室监测、工业传感器采集、环境监控等场景,具备良好的扩展性与实用性。


📎 附录:常见问题

Q1:打包后 UI 加载失败?

→ 确保使用 resource_path() 获取路径。

Q2:图标不显示?

→ 安装 pillow,或使用专业工具生成标准 .ico 文件。

Q3:体积太大?

→ 使用干净虚拟环境 + excludes 排除无用模块。


文章转载自:

http://3KjaM7Cs.fwzjs.cn
http://gxoLphVb.fwzjs.cn
http://Y7YMysiS.fwzjs.cn
http://Yw5vpbvW.fwzjs.cn
http://9q9oEsxy.fwzjs.cn
http://Yk5Alb17.fwzjs.cn
http://d9G1lA7p.fwzjs.cn
http://P6tvx5ni.fwzjs.cn
http://YqwTJB0Y.fwzjs.cn
http://9zaXqLkh.fwzjs.cn
http://nq4pttYO.fwzjs.cn
http://cwCfqGJN.fwzjs.cn
http://5K0Pn46Q.fwzjs.cn
http://5uGv3zKh.fwzjs.cn
http://ebltTXoh.fwzjs.cn
http://ktqPLFxG.fwzjs.cn
http://7d1lc43h.fwzjs.cn
http://gh4DG9mY.fwzjs.cn
http://SagV6jkp.fwzjs.cn
http://k9Zxgag8.fwzjs.cn
http://WgzUJWx6.fwzjs.cn
http://KaZpSY11.fwzjs.cn
http://QxQn0AJO.fwzjs.cn
http://PAwtdMD7.fwzjs.cn
http://sRsBskGK.fwzjs.cn
http://ZnNl0wcD.fwzjs.cn
http://Ihi50HIp.fwzjs.cn
http://SFLOGtd6.fwzjs.cn
http://ymr9AteS.fwzjs.cn
http://34kdXIuY.fwzjs.cn
http://www.dtcms.com/a/379804.html

相关文章:

  • 【图像处理基石】图像压缩有哪些经典算法?
  • C语言实战:简单易懂通讯录
  • youte-agent部署(windows)
  • Python实现点云法向量各种方向设定
  • Linnux IPC通信和RPC通信实现的方式
  • apache实现LAMP+apache(URL重定向)
  • MongoDB 与 GraphQL 结合:现代 API 开发新范式
  • k8s-临时容器学习
  • uni-app 根据用户不同身份显示不同的tabBar
  • ubuntu18.04安装PCL1.14
  • Ubuntu 系统下 Anaconda 完整安装与环境配置指南(附常见问题解决)
  • 网络链路分析笔记mtr/traceroute
  • 在 Ubuntu 系统中利用 conda 创建虚拟环境安装 sglang 大模型引擎的完整步骤、版本查看方法、启动指令及验证方式
  • 基带与射频的区别与联系
  • 《企业安全运营周报》模板 (极简实用版)​
  • opencv基于SIFT特征匹配的简单指纹识别系统实现
  • Node.js 操作 Elasticsearch (ES) 的指南
  • 使用tree命令导出文件夹/文件的目录树( Windows 和 macOS)
  • Spring缓存(二):解决缓存雪崩、击穿、穿透问题
  • LabVIEW加载 STL 模型至 3D 场景 源码见附件
  • Tessent_ijtag_ug——第 4 章 ICL 提取(2)
  • 前端WebSocket实时通信实现
  • 2025年- H133-Lc131. 反转字符串(字符串)--Java版
  • 萨顿四条原则
  • NumPy 2.x 完全指南【三十八】伪随机数生成器
  • GitHub 热榜项目 - 日榜(2025-09-12)
  • O3.3 opencv指纹识别
  • 在线会议系统是一个基于Vue3 + Spring Boot的现代化在线会议管理平台,集成了视频会议、实时聊天、AI智能助手等多项先进技术。
  • 每日一算:打家劫舍
  • MemGPT: Towards LLMs as Operating Systems