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中环境变量包括系统 ...
随机推荐
- jQ的显式迭代和隐式迭代
jQ的显示迭代 隐式迭代 let lis = document.querySelector('li') lis.forEach(function (value, index) { value.styl ...
- Swift系列七 - 汇编分析值类型
通过汇编分下值类型的本质. 一.值类型 值类型赋值给var,let或者给参数传参,是直接将所有内容拷贝一份.类似于对文件进行复制粘贴操作,产生了全新的文件副本,属于深拷贝(deep copy). 示例 ...
- [bug] mysql 忘记密码
参考 https://www.cnblogs.com/black-fact/p/11613361.html
- lua中求table长度--(转自有心故我在)
关于lua table介绍,看以前的文章http://www.cnblogs.com/youxin/p/3672467.html. 官方文档是这么描述#的: 取长度操作符写作一元操作 #. 字符串的长 ...
- Linux中级之keepalived配置
hacmp: ibm的高可用集群软件,并且是商业的(收费),一般用于非x86架构机器当中 AIX,Unix 去IOE:ibm,oracle,emckeepalived: 一款高可用集群软件,利用vrr ...
- make clean 和 make distclean区别-(转自秋水Leo)
make clean仅仅是清除之前编译的可执行文件及配置文件. 而make distclean要清除所有生成的文件. Makefile 在符合GNU Makefiel惯例的Makefile中,包含了一 ...
- Linux系统添加永久静态路由的方法(包含Centos7)
一.使用route命令添加 使用route 命令添加的路由,机器重启或者网卡重启后路由就失效了,方法:A.添加到主机的路由# route add –host 192.168.1.10 dev eth0 ...
- Java注解类型(@Annotation)
简述 注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类.而我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象$Proxy1.通过代理对象调 ...
- 常用Python第三方库简介
如果说强大的标准库奠定了Python发展的基石,丰富的第三方库则是python不断发展的保证,随着python的发展一些稳定的第三库被加入到了标准库里面,这里有6000多个第三方库的介绍 下表中加粗并 ...
- 第11讲 | TCP协议(上):因性恶而复杂,先恶后善反轻松
第11讲 | TCP协议(上):因性恶而复杂,先恶后善反轻松 TCP 包头格式 我们先来看 TCP 头的格式.从这个图上可以看出,它比 UDP 复杂得多. 首先,源端口号和目标端口号是不可少的,这一点 ...