一、前言
任何的电子设备在工作过程中必定会产生发热的现象,而不控制好设备的温度的话,很有可能会损坏设备,或者照成设备的性能下降,本文将通过学习如何读取树莓派CPU温度值,方便后期对树莓派做一些相应的控制措施。
在树莓派操作系统中,有一个读取温度值的入口,通过读取这个入口返回的值来获得树莓派实时的温度值,具体入口为:
/sys/class/thermal/thermal_zone0/temp
二、具体操作
本文将通过3种操作方式来获取该温度值:
- shell编程操作
- C语言文件操作
- Python文件操作
2.1 通过shell编程获得cup温度值
进入树莓派终端控制台,依次输入以下指令获取实时温度值:
进入根目录
cd /
读取temp文件,获得温度值
cat sys/class/thermal/thermal_zone0/temp
\#系统返回实时值
40622
[说明]
1)通过cat命令读取存放在 sys/class/thermal/thermal_zone0 目录下的温度文件temp获得返回值。
2)返回值为一个5位数的数值,实际温度为将该值除以1000即可!单位为摄氏度!
2.2 通过C语言编程获得cpu温度值
选定一个目录,并在目录中创建cpu_temp.c文件,将以下代码输入:
#include <stdio.h>
#include <stdlib.h>
//导入文件控制函数库
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define TEMP_PATH "/sys/class/thermal/thermal_zone0/temp"
#define MAX_SIZE 20
int main(void)
{
int fd;
double temp = 0;
char buf[MAX_SIZE];
// 以只读方式打开/sys/class/thermal/thermal_zone0/temp
fd = open(TEMP_PATH, O_RDONLY);
//判断文件是否正常被打开
if (fd < 0)
{
fprintf(stderr, "failed to open thermal_zone0/temp\n");
return -1;
}
// 读取内容
if (read(fd, buf, MAX_SIZE) < 0)
{
fprintf(stderr, "failed to read temp\n");
return -1;
}
// 转换为浮点数打印
temp = atoi(buf) / 1000.0;
printf("temp: %.3f\n", temp);
// 关闭文件
close(fd);
}
编译C代码,输入以下指令:
gcc -o cpu_temp cpu_temp.c
运行程序
./cpu_temp
系统返回实时值:
temp : 40.622
程序解读:
1) 关于open()、read()、close()函数使用,可看:【fcntl.h函数库的常用函数使用】。
2) atoi(buf)函数是将buf中的字符串数据转换层整形数。
3) gcc -o cpu_temp cpu_temp.c :gcc为编译器、 -o参数表示将cpu_temp.c文件编译成可执行文件并存放到 cpu_temp文件夹中。
2.3 通过python语言编程获得cpu温度值
选定一个目录,并在目录中创建 cpu_temp.py 文件,将以下代码输入:
#! /usr/bin/python
#! -*- coding: utf-8 -*-
# 打开文件
file = open("/sys/class/thermal/thermal_zone0/temp")
# 读取结果,并转换为浮点数
temp = float(file.read()) / 1000
# 关闭文件
file.close()
# 向终端控制台打印
print "temp : %.3f" %temp
执行脚本
Python cpu_temp.py
系统返回实时值
Temp : 41.163
三、小结
以上3总方式都可获取树莓派cpu实时的温度值,通过访问目录下的temp文件获取返回值,在程序上对返回值稍作转换变成我们需要的数,在以上的3种方式中,通过python获得数据更为简便!