Qt-SmartDashboard 是一个基于 Qt5 的工控风格智能仪表盘监控软件,用于实时监控和显示 STM32 设备上报的传感器数据。软件支持串口通信、实时曲线图表、自定义仪表盘控件、数据记录与回放等功能,适用于工业自动化、环境监测、设备调试等场景。
- 串口通信管理:自动扫描可用串口,支持波特率/数据位/停止位/校验位配置
- 实时数据解析:支持 JSON 格式数据帧,带帧头检测和 CRC 校验
- 自定义仪表盘控件:QPainter 手绘弧形仪表,渐变色进度条、刻度线、数值动画
- 实时波形图表:4 通道实时滚动曲线(温度/湿度/光照/气压),自动 Y 轴缩放
- 状态面板:卡片式传感器值显示,连接状态指示灯
- 数据记录与回放:按天生成 CSV 文件,支持带时间戳记录和回放控制
- 工控风格 UI:Catppuccin 深色主题,工业监控 HMI 风格
| 传感器 | 字段 | 单位 | 范围 |
|---|---|---|---|
| 温度 | T | °C | -40 ~ 85 |
| 湿度 | H | %RH | 0 ~ 100 |
| 光照 | L | Lux | 0 ~ 65535 |
| 气压 | P | hPa | 300 ~ 1100 |
STM32 上报 JSON 数据帧格式:
{"T":25.3,"H":65.2,"L":450,"P":1013.25,"ts":123456}帧结构:[0xAA][0x55][JSON数据][CRC16][0x0D][0x0A]
Qt-SmartDashboard/
├── CMakeLists.txt # CMake 构建脚本
├── README.md # 项目文档
├── .gitignore # Git 忽略规则
├── include/ # 头文件目录
│ ├── mainwindow.h # 主窗口
│ ├── serial_port_manager.h # 串口管理器
│ ├── data_parser.h # 数据协议解析器
│ ├── gauge_widget.h # 自定义仪表盘控件
│ ├── wave_chart_widget.h # 自定义波形图控件
│ ├── status_panel.h # 状态面板控件
│ └── data_logger.h # 数据记录器
├── src/ # 源文件目录
│ ├── main.cpp # 程序入口
│ ├── mainwindow.cpp # 主窗口实现
│ ├── serial_port_manager.cpp # 串口管理器实现
│ ├── data_parser.cpp # 协议解析器实现
│ ├── gauge_widget.cpp # 仪表盘控件实现
│ ├── wave_chart_widget.cpp # 波形图控件实现
│ ├── status_panel.cpp # 状态面板实现
│ └── data_logger.cpp # 数据记录器实现
└── resources/ # 资源文件目录
├── style.qss # 工控风格深色主题样式表
└── icons.qrc # Qt 资源文件
MainWindow
├── SerialPortManager ──→ DataParser
├── GaugeWidget (×4: 温度/湿度/光照/气压)
├── WaveChartWidget (4通道实时曲线)
├── StatusPanel (状态指示卡片)
└── DataLogger (CSV 记录/回放)
- 语言: C++11/14
- 框架: Qt 5.12+
- 模块: Core, Widgets, SerialPort, Charts
- 构建: CMake 3.14+
- 样式: QSS (Catppuccin 深色主题)
- 安装 Qt 5.12 或更高版本(需包含 SerialPort 模块)
- 安装 CMake 3.14 或更高版本
- 支持的编译器:
- Windows: MSVC 2015+ 或 MinGW
- Linux: GCC 5+
- macOS: Clang
# 配置 Qt 环境变量
set CMAKE_PREFIX_PATH=C:/Qt/5.15.2/msvc2019_64
# 创建构建目录
mkdir build && cd build
# 生成项目
cmake .. -G "Visual Studio 16 2019" -A x64
# 编译
cmake --build . --config Releaseset CMAKE_PREFIX_PATH=C:/Qt/5.15.2/mingw81_64
mkdir build && cd build
cmake .. -G "MinGW Makefiles"
cmake --build .export CMAKE_PREFIX_PATH=/opt/Qt/5.15.2/gcc_64
mkdir build && cd build
cmake ..
make -j$(nproc)- 打开 Qt Creator
- 选择 "打开文件或项目",选择
CMakeLists.txt - 配置构建套件 (Kit)
- 点击 "构建" → "构建项目"
- 通过 USB 串口线连接 STM32 设备
- 在菜单栏选择 "设置" → "串口配置"
- 选择正确的 COM 端口和波特率(默认 115200)
- 点击 "连接" 按钮
- 仪表盘显示各传感器当前值,弧形进度条随数值变化
- 波形图实时滚动显示 4 通道数据变化趋势
- 状态面板以卡片形式显示当前传感器读数
- 连接后自动开始数据记录
- CSV 文件按日期保存在
logs/目录 - 文件名格式:
sensor_data_YYYYMMDD.csv
- 在菜单栏选择 "工具" → "数据回放"
- 选择要回放的 CSV 文件
- 使用播放控制(播放/暂停/停止/速度调节)
| 快捷键 | 功能 |
|---|---|
| F5 | 连接/断开串口 |
| F6 | 开始/停止记录 |
| F7 | 清除波形数据 |
| Ctrl+O | 打开回放文件 |
| Ctrl+Q | 退出程序 |
STM32 端需要按照以下协议格式上报数据:
// 数据帧格式
// [0xAA][0x55][JSON字符串][CRC16低字节][CRC16高字节][0x0D][0x0A]
// 示例代码(基于 HAL 库)
void SendSensorData(float temp, float humi, uint16_t light, float pressure) {
char json_buf[128];
int len = snprintf(json_buf, sizeof(json_buf),
"{\"T\":%.1f,\"H\":%.1f,\"L\":%u,\"P\":%.2f,\"ts\":%lu}",
temp, humi, light, pressure, HAL_GetTick());
uint8_t frame[256];
uint16_t idx = 0;
// 帧头
frame[idx++] = 0xAA;
frame[idx++] = 0x55;
// JSON数据
memcpy(&frame[idx], json_buf, len);
idx += len;
// CRC16校验
uint16_t crc = CRC16_Calc(&frame[2], len);
frame[idx++] = crc & 0xFF;
frame[idx++] = (crc >> 8) & 0xFF;
// 帧尾
frame[idx++] = 0x0D;
frame[idx++] = 0x0A;
HAL_UART_Transmit(&huart1, frame, idx, 100);
}MIT License
蔡浩宇 (Cai Haoyu) · GitHub