Linux中使用QT读取并显示温度传感器数值
环境:
Ubuntu 16.04 64 bit
QT5.13.1/QT5.12
原理
对于Linux来说一切都是文件,温度传感器也是个文件,如果要获取某个温度传感器的数值,可以读取相应的文件,Linux某些版本中,有一些温度传感器对应的文件在目录/sys/class/hwmon,比如我的一台装了ubuntu 1604的电脑,内核是4.15,如下:

其中hwmon0是跟w83627芯片相关的,w83627(DA00-WW83627DHG-P.pdf)是nuvoton(以前的华邦)出的监控IC,hwmon1目录对应的是CPU内部的温度传感器(Kernel driver k10temp)。这些传感器的信息可以使用cat命令读出。
要使用QT编写个程序来显示某个传感器的数值,只需要实现读取温度传感器对应的文件即可。
创建工程
先做个简单的,使用QT的Label显示我的电脑CPU温度,也就是对应hwmon1目录下对应的文件。创建个Qt Widgets Application工程,命名为cpu_temp,基类选择QDialog,选择创建ui,创建之后如下:

修改UI文件
修改UI文件,首先调整下UI的大小,然后添加Label控件并命名为value,如下:

读取的方式
从之前用cat查看CPU温度传感器对应的文件可知,该文件是个文本文件,只要一文本方式读取该文件的全部内容就可以获得该CPU的当前温度了,读出来的数值是CPU温度的实际值的1000倍,接下来只需要实现个读取文本文件的程序就基本上实现了,
然后在dialog.h中添加头文件:
#include "QFile"
并在类声明中声明个QFile变量:
QFile f;
实现代码
定义个宏来表示CPU温度传感器对应的文件:
#define SENSOR_PATH "/sys/class/hwmon/hwmon1/temp1_input"
然后实现读取的程序并显示到Label控件中:
QFile f(SENSOR_PATH);
if(!f.open(QIODevice::ReadOnly))
{
this->ui->value->setText("Open faile");
return;
}
QString va = f.readAll();
QString temp = va.left(2) + "." + va.mid(2,2) + "℃";
this->ui->value->setText(temp);
f.close();
编译运行结果如下:

每隔一段时间读取一次
程序还是非常简单的,不过,该程序只能显示运行该程序的那一瞬间CPU的温度,并不能实时显示CPU的温度,也没什么用。为了让该程序更有实用性,使用QT的定时器QTimer,实现每 1 秒读取一次并显示出来,具体代码在:cpu_temp_V0.01
在arm Linux 中运行
代码没有改动,交叉编译后,在一块基于S5P4418的板子上运行如下:

由于该板子自带的传感器的驱动好像有问题,读出来的数据不正常,我接了个LM75,所以上面显示的并不是CPU的温度。
sensors
上面使用到的工具 sensors,有些电脑可能没安装,安装方法如下:
sudo apt-get install lm-sensors hddtemp
sudo sensors-detect
sensors
lm_sensors projectinformation
Linux中使用QT读取并显示温度传感器数值的更多相关文章
- Linux 中使用 QT Charts 显示温度传感器
前一篇笔记中实现了QT的Label控件显示CPU的温度,只能显示当前的温度,并不能反映CPU温度的变化情况,现在来实现使用QT Charts的曲线图实现一个实时曲线来显示CPU的温度. 添加对Qt C ...
- linux中sudo如何读取标准输入作为密码,避免每次都输入密码?
需求描述: 今天想要在生产环境中,弄自动部署的脚本,但是现在呢,需要sudo权限,每次都要输入.就想看sudo如何能从标准输入读取密码. 操作过程: 1.原来的方法 [deployer@testvm ...
- linux中使用opdir_readdir读取目录中的信息
#include <dirent.h>#include <stdio.h>#include <stdlib.h> int main(int argc, char * ...
- 【Qt开发】【VS开发】【Linux开发】OpenCV、Qt-MinGw、Qt-msvc、VS2010、VS2015、Ubuntu Linux、ARM Linux中几个特别容易混淆的内容
[Qt开发][VS开发][Linux开发]OpenCV.Qt-MinGw.Qt-msvc.VS2010.VS2015.Ubuntu Linux.ARM Linux中几个特别容易混淆的内容 标签:[Qt ...
- Linux中Qt的安装
1.下载Ot安装包 Qt5.30的下载地址如下,在网页中打开找到需要的资源,下载.run格式的安装软件. http://download.qt.io/archive/qt/5.3/5.3.0/qt-o ...
- CMake中添加Qt模块的合理方法
https://www.jianshu.com/p/7eeb6f79a275 转载自这里 用CMake来组织的工程中要用Qt首先要设置.找到Qt相关模块.主要是通过find_package这个CMak ...
- Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式
Linux就这个范儿 第15章 七种武器 linux 同步IO: sync.fsync与fdatasync Linux中的内存大页面huge page/large page David Cut ...
- 【转】windows和linux中搭建python集成开发环境IDE
本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...
- Linux中环境变量文件及配置
Linux中环境变量文件及配置 一.环境变量文件介绍 转自:http://blog.csdn.net/cscmaker/article/details/7261921 Linux中环境变量包括系统 ...
随机推荐
- checked 和 prop() (散列性比较少的)
在<input class="sex1" type="radio" checked>男 checked表示该框会被默认选上 prop()操作的是D ...
- NumPy之:ndarray中的函数
NumPy之:ndarray中的函数 目录 简介 简单函数 矢量化数组运算 条件逻辑表达式 统计方法 布尔数组 排序 文件 线性代数 随机数 简介 在NumPy中,多维数组除了基本的算数运算之外,还内 ...
- [BD] Flume
什么是Flume 采集日志,存在HDFS上 分布式.高可用.高可靠的海量日志采集.聚合和传输系统 支持在日志系统中定制各类数据发送方,用于收集数据 支持对数据进行简单处理,写到数据接收方 组件 sou ...
- elasticksearch分词,导致kibana的url出现问题
在Kibana的展示页面中,我们点击Table的左侧栏,发现Elasticsearch中的数据在展示中是正确的数据,比如:agent中www.baidu.com/test,该界面中会正确的显示为www ...
- Centos 7.4搭建es7.12.0+Skywalking7.8.5
Skywalking整体架构图和分布式追踪系统原理:https://blog.csdn.net/weixin_39866487/article/details/111581322 软件包版本1.ela ...
- 8.模块定义导入优化time datetime内置模块
1.模块(module)的定义:本质就是.py的python文件用来从逻辑上组织python代码(变量\函数\类\逻辑:实现一个功能)包(package)的定义:用来从逻辑上组织模块的,本质就是一个文 ...
- 安全漏洞扫描工具 burpsuite V1.7.32 资料
安装包下载地址:http://www.downxia.com/downinfo/229728.html 实战教程:https://t0data.gitbooks.io/burpsuite/conten ...
- brk 和 sbrk 区别
转自:https://www.cnblogs.com/chengxuyuancc/p/3566710.html brk和sbrk的定义,在man手册中定义了这两个函数: 1 #include < ...
- unity中使用Highlighting System v4.0插件给物体添加高亮
插件:Highlighting System v4.0 操作:在摄像机上挂上HighlightingRenderer脚本 脚本目录在\Assets\Plugins\HighlightingSystem ...
- 'utf-8' codec can't decode byte 0xd5 in position XXX: invalid continuation byte问题
找了一下午,各种资料搜集,愣是没搜出来答案. 结果今天早上,做一个小小的改变,就整出来了... 步骤如下: 1.打开excel,全选数据 2.新建记事本,粘贴,选择脚本,更改字体: 3.新建Excel ...