如何产看树莓派 cpu温度cpu温度

树莓派上使用yeelink监控CPU、GPU温度 - 简书
树莓派上使用yeelink监控CPU、GPU温度
yeelink是一个物联网服务网站,可以将传感器的数据上传到yeelink上,将数据更好的展示出来,而且,可以使用yeelink开发更多有趣的东西,比如使用手机开关门窗等等。这篇文章教大家如何将树莓派的CPU、GPU温度传感器数据上传到yeelink上,并且进行监控,这样就可以以直观的图表查看树莓派的温度。一、准备工作所需材料:树莓派一台,B或者B+信号的都可以树莓派需要联网1、注册yeelink账号在 注册一个账号并且登陆,按照开发指南添加设备、添加传感器
yeelink开发指南
yeelink开发指南
2、获取key以及传感器URL在管理页面可以获得您的API Key,把他记下来在用户中心页面,可以看到添加的传感器URL,共有两个,分别是树莓派CPU、GPU传感器URL。获得这些数据后就可以连接树莓派进行下一步的开发了。
二、使用yeelink API开始上传数据在准备工作完成后,可以登陆树莓派进行下一步工作。1、安装vimsudo apt-get install vim2、更新系统sudo apt-get update3、新建文件 yeelink.py 添加以下内容
#!/usr/bin/env python
-- coding: utf-8 --
import requestsimport jsonimport timeimport commandsdef main()://需要填自己申请到的yeelink api Key 以及你的数据的url apiheaders = {'U-ApiKey': 'af14fd8', 'content-type': 'application/json'} apiurl_gpu = '' apiurl_cpu = ''//查看GPU温度 gpu = commands.getoutput( '/opt/vc/bin/vcgencmd measure_temp' ).replace( 'temp=', '' ).replace( '\'C', '' ) gpu = float(gpu) payload_gpu = {'value': gpu} r = requests.post(apiurl_gpu, headers=apiheaders, data=json.dumps(payload_gpu))//查看CPU温度 file = open("/sys/class/thermal/thermal_zone0/temp") cpu = float(file.read()) / 1000 file.close() payload_cpu = {'value': cpu} r = requests.post(apiurl_cpu, headers=apiheaders, data=json.dumps(payload_cpu)) time.sleep(1)if name == 'main': main()
4、运行 yeelink.py 文件,开始上报数据py yeelink.py等待程序执行完成,这时登陆yeelink网站,就可以看到树莓派的CPU、GPU温度数据了。三、自动树莓派上传温度数据第二步完成后,只有运行yeelink.py这个文件才能上报树莓派的温度监控数据,如果我们想让它自动完成,那么可以新建一个定时任务,来每隔一定时间自动上报温度数据。方法如下:1、新建crontab计划任务crontab -e2、输入计划任务详细的格式可以参考
这篇文章,我们这里设定一个每隔5分钟上传数据的任务,在文件的最下方添加/5
python ~/yeelink.py就像这样
这样就实现了树莓派每隔5分钟自动上传CPU、GPU温度数据的功能,就可以看到树莓派的CPU、GPU温度信息了。
树莓派CPU温度监控信息
树莓派CPU温度监控信息
树莓派GPU温度监控信息
树莓派GPU温度监控信息
监控页面在这里:
原创文章,转载请注明: 转载自
本文地址: 链接:1272人阅读
树莓派(2)
CPU的温度可以从一个系统临时文件中读取:/sys/class/thermal/thermal_zone0/temp
GPU温度也可以从一个文件中读取:/opt/vc/bin/vcgencmd measure_temp
import commands
def get_cpu_temp():
tempFile = open( &/sys/class/thermal/thermal_zone0/temp& )
cpu_temp = tempFile.read()
tempFile.close()
return float(cpu_temp)/1000
def get_gpu_temp():
gpu_temp = commands.getoutput( '/opt/vc/bin/vcgencmd measure_temp' ).replace( 'temp=', '' ).replace( '\'C', '' )
float(gpu_temp)
def main():
print &CPU temp: &, str(get_cpu_temp())
print &GPU temp: &, str(get_gpu_temp())
if __name__ == '__main__':
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:40550次
积分:1032
积分:1032
排名:千里之外
原创:54篇
译文:10篇
(2)(2)(1)(4)(1)(5)(8)(5)(6)(9)(1)(11)(1)(18)博客访问: 1251641
博文数量: 372
博客积分: 8284
博客等级: 中将
技术积分: 4577
注册时间:
天行健,君子以自强不息
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Python/Ruby
1、编写python脚本
#no 2.2.6&&&&&&&&&&&&&&&&&&&& File: post_temp
#/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import json
# 打开文件
file = open("/sys/class/thermal/thermal_zone0/temp")
# 读取结果,并转换为浮点数
temp = float(file.read()) / 1000
# 关闭文件
file.close()
# 向控制台打印结果
print "temp : %.1f" %temp
apiurl ='http://api.yeelink.net/v1.1/device/16485/sensor/28490/datapoints'
#'http://api.yeelink.net/v1.1/device/1949/sensor/2510/datapoints'
# 用户密码, 指定上传编码为JSON格式
apiheaders = {'U-ApiKey': 'a3ac2fb0XXXX', 'content-type': 'application/json'}
# 字典类型数据,在post过程中被json.dumps转换为JSON格式字符串 {"value": 48.123}
payload = {'value': temp}
r = requests.post(apiurl, headers=apiheaders, data=json.dumps(payload))
# 打印返回码
print "response status: %d" %r.status_code
2、python post_temp
会提示requests没有安装。错误如下:
3、再网上搜了下,找到一个老外的论坛:
/questions//importerror-no-module-named-requests
里面的原话是这样说的:
Use $ pip install requests if you have an osx/ linux system with pip installed, or
> Path\easy_install.exe requests if you have a
windows machine, where easy_install can be found in your Python\Scripts
folder, if it was installed. (Note Path\easy_install.exe is an example,
mine is C:\Python32\Scripts\easy_install.exe)
4、所以要安装requests,但是在终端输入命令 pip install requests,提示没有安装pip。
5、安装pip。
sudo apt-get install python-pip
6、然后安装requests
apt-get install requests
7、执行脚本
python post_temp
终端效果如下:
yeelink云端效果如下:
1、定时传输温度值到yelink
脚本代码如下:
nano& post_temp_bytime
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import json
import time
def main():
&&&&&&&&fileRecord = open("result.txt", "w")
&&&&&&&&fileRecord.write("connect to yeelink\n");
&&&&&&&&fileRecord.close()
&&&&&&&&while True:
&&&&&&&&&&&&&&&&# 打开文件
&&&&&&&&&&&&&&&&file = open("/sys/class/thermal/thermal_zone0/temp")
&&&&&&&&&&&&&&&&# 读取结果,并转换为浮点数
&&&&&&&&&&&&&&&&temp = float(file.read()) / 1000
&&&&&&&&&&&&&&&&# 关闭文件
&&&&&&&&&&&&&&&&file.close()
&&&&&&&&&&&&&&&&# 设备URI
&&&&&&&&&&&&&&&&apiurl = 'http://api.yeelink.net/v1.1/device/16485/sensor/28490/datapoints'
&&&&&&&&&&&&&&&&# 用户密码, 指定上传编码为JSON格式
&&&&&&&&&&&&&&&&apiheaders = {'U-ApiKey': 'a3ac2fb0XXXX', 'content-type': 'application/json'}
&&&&&&&&&&&&&&&&# 字典类型数据,在post过程中被json.dumps转换为JSON格式字符串 {"value": 48.123}
&&&&&&&&&&&&&&&&payload = {'value': temp}
&&&&&&&&&&&&&&&&#发送请求
&&&&&&&&&&&&&&&&r = requests.post(apiurl, headers=apiheaders, data=json.dumps(payload))
&&&&&&&&&&&&&&&&# 向控制台打印结果
&&&&&&&&&&&&&&&&fileRecord = open("result.txt", "a")
&&&&&&&&&&&&&&&&strTime = time.strftime('%Y-%m-%d:%H-%M-%S',time.localtime(time.time()))
&&&&&&&&&&&&&&&&fileRecord.writelines(strTime + "\n")
&&&&&&&&&&&&&&&&strTemp = "temp : %.1f" %temp + "\n"
&&&&&&&&&&&&&&&&fileRecord.writelines(strTemp)
&&&&&&&&&&&&&&&&fileRecord.writelines(str(r.status_code) + "\n")
&&&&&&&&&&&&&&&&fileRecord.close()
&&&&&&&&&&&&&&&&time.sleep(10)
if __name__ == '__main__':
&&&&&&&&main()
这里再强调一下,一定要注意代码的缩进,代码的层次缩进用tab键
执行脚本& python post_temp_bytime
程序就会一直执行,按ctrl+c就可以退出,然后通过yeelink查看数据
让定时发送温度程序开机自启动
1、编写启动post_temp_bytime& 的脚本
nano& bootup.sh
#!/bin/bash
&cd /home/pi/test
&python post_temp_bytime &
2、把bootup.sh脚本添加到/etc/rc.local中
Nano /etc/rc.local
#!/bin/sh -e
# rc.local
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
# In order to enable or disable this script just change the execution
# By default this script does nothing.
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
&&printf "My IP address is %s\n" "$_IP"
/home/pi/test/bootup.sh
在exit 0前一行添加bootup.sh的路径,见上代码。
3、reboot,重启树莓派
ps aux |grep post_temp_bytime
效果如下图:
如果不是两行,说明没有开机自启动成功,脚本没有后台运行
也可以kill& -s& 9&& 2097& 来杀掉进程。如果提示进程不存在,就没有成功自启动。
4、在yeelink下看重启后传来的温度值
阅读(1981) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
目前网络上流传的检测树莓派 CPU 和 GPU 的温度主要是两个脚本,例子在这里( 和 )
我分别认真读了两段脚本,发现一个问题,截图如下:
如图所示,两个红框圈出来的地方,读取的是同样的内容,但一个是作为 CPU温度,另一个是作为 GPU温度。并且,运行结果也不一样,截图如下:
如图,其中第一个跑的脚本是对应第一图中右边一个脚本,第二个跑的脚本对应第一图中左边一个脚本。时间相差不超过2秒。
我的设备情况是:树莓派 2代,CPU 和 GPU 均贴了一块铜质散热片,未装入盒子内,使用 iPad mini 1代的充电头和摩托罗拉手机的 micro USB 线供电,使用网线接入路由器,采用 SanDisk Class10 8GB TF卡,刷入的系统为 -raspbian-wheezy,入手后未安装其他软件。
想问一下,到底哪一个才是正确的。
根据答案部分 前辈的回答,查看了他提供的,注意到下图中这样一部分内容:
这里的资料表明,vcgencmd measure_temp测出的是 CPU 的核心温度,那么现在的问题是,根据 前辈的回答:以CPU名义注册的温度传感器也只有一个,位于/sys/class/thermal/thermal_zone0。所以这两者都表示 CPU温度,所以想问,GPU 的核心温度怎么获取?
而根据 前辈给出的另一个链接里看到如下图这样的内容:
这是否说明,其实所谓获取到的 CPU温度 就是 CPU 和 GPU 的温度?如何区分两者呢?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
vcgencmd当然只有一个,位于/opt/vc/bin/vcgencmd。vcgencmd及所属的/opt/vc软件包,都是和VideoCore通讯的闭源程序(看名字就知道了)。
而以CPU名义注册的温度传感器也只有一个,位于/sys/class/thermal/thermal_zone0。
所以CPU和GPU温度分开测量,当然两者都是可信的。尤其是对于其实有4个CPU核心的Pi2来说更是如此。
测量结果不稳定的现象,具体来看表现为温度数据的更新其实是在“乱飘”。即使在同一个时间点(都不用差1秒钟)也可能读到两个差出很多的数据值。可以尝试以下命令来观察这个现象。
while :; do cat /sys/class/thermal/thermal_zone0/ done
while :; do vcgencmd measure_ done
但我确实不能解释这个是为什么。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
都是准确的,建议你同时执行两个程序看看,这两个文件都是系统生成文件,可以反应os从cpu获取的当时温度。
具体可以参考:
同步到新浪微博
分享到微博?
Hi,欢迎来到 SegmentFault 技术社区!⊙▽⊙ 在这里,你可以提出编程相关的疑惑,关注感兴趣的问题,对认可的回答投赞同票;大家会帮你解决编程的问题,和你探讨技术更新,为你的回答投上赞同票。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
扫扫下载 App
SegmentFault
一起探索更多未知}

我要回帖

更多关于 树莓派 cpu温度 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信