环境:

  • 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

参考:archlinux lm_sensors

lm_sensors projectinformation

Linux中使用QT读取并显示温度传感器数值的更多相关文章

  1. Linux 中使用 QT Charts 显示温度传感器

    前一篇笔记中实现了QT的Label控件显示CPU的温度,只能显示当前的温度,并不能反映CPU温度的变化情况,现在来实现使用QT Charts的曲线图实现一个实时曲线来显示CPU的温度. 添加对Qt C ...

  2. linux中sudo如何读取标准输入作为密码,避免每次都输入密码?

    需求描述: 今天想要在生产环境中,弄自动部署的脚本,但是现在呢,需要sudo权限,每次都要输入.就想看sudo如何能从标准输入读取密码. 操作过程: 1.原来的方法 [deployer@testvm ...

  3. linux中使用opdir_readdir读取目录中的信息

    #include <dirent.h>#include <stdio.h>#include <stdlib.h> int main(int argc, char * ...

  4. 【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 ...

  5. Linux中Qt的安装

    1.下载Ot安装包 Qt5.30的下载地址如下,在网页中打开找到需要的资源,下载.run格式的安装软件. http://download.qt.io/archive/qt/5.3/5.3.0/qt-o ...

  6. CMake中添加Qt模块的合理方法

    https://www.jianshu.com/p/7eeb6f79a275 转载自这里 用CMake来组织的工程中要用Qt首先要设置.找到Qt相关模块.主要是通过find_package这个CMak ...

  7. 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 ...

  8. 【转】windows和linux中搭建python集成开发环境IDE

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  9. Linux中环境变量文件及配置

    Linux中环境变量文件及配置   一.环境变量文件介绍 转自:http://blog.csdn.net/cscmaker/article/details/7261921 Linux中环境变量包括系统 ...

随机推荐

  1. java面试一日一题:java中一个对象实例的结构是什么样子的

    问题:请讲下在java程序运行时一个对象实例的数据结构是什么样子的 分析:该问题主要考察对java中对象的理解,在程序运行过程中一个对象实例是以什么样的形式存在的 回答要点: 主要从以下几点去考虑, ...

  2. 面试侃集合 | LinkedBlockingQueue篇

    面试官:好了,聊完了ArrayBlockingQueue,我们接着说说LinkedBlockingQueue吧 Hydra:还真是不给人喘口气的机会,LinkedBlockingQueue是一个基于链 ...

  3. [bug] Hive启动报错:hive Name node is in safe mode.

    关闭HDFS安全模式 hadoop dfsadmin -safemode leave

  4. SimpleSelectionSort

    简单选择排序 <script type="text/javascript"> var obj={ data:[0,3,1,5,7,4,8,9,5], length:8 ...

  5. 佳能m62套机5500 佳能EOS M50 M6 MARK2 II二代 最低到过5800

    佳能m62套机5500 佳能EOS M50 M6 MARK2 II二代

  6. 网络安全服务(Network Security Services, NSS

    网络安全服务(Network Security Services, NSS)是一套为网络安全服务而设计的库 支持支持安全的客户端和 服务器应用程序.使用NSS构建的应用程序可以支持SSL v2 和v3 ...

  7. Docker Swarm(三)Service(服务)分配策略

    Service的分配原則 預設分散至多個nodes上 使用率較低的node優先配置 使用者可自行定義此分配模式 Service分配的3種方式 Service Constraints (服务约束) 参考 ...

  8. 使用cockpit管理kvm虚拟机

    在Centos8.2主机上部署kvm,使用cockpit管理 首先检测cpu是否支持虚拟化 [root@localhost ~]# cat /proc/cpuinfo | grep vmx flags ...

  9. STM32之HAL库、标准外设库、LL库(STM32 Embedded Software)-(转载)

    STM32 Embedded Software  工作以来一直使用ST的STM32系列芯片,ST为开发者提供了非常方便的开发库.到目前为止,有标准外设库(STD库).HAL库.LL库 三种.前两者都是 ...

  10. mysql基础之mariadb库管理和表管理语句

    一.数据库管理语句 1.Syntax: CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification] ... cr ...