找回密码
 立即注册

QQ登录

只需一步,快速开始

树莓派 SAKS 扩展板实用应用 之 CPU 温度显示和警报



本文所介绍的内容基于树莓派瑞士军刀扩展板(SAKS),由于 SAKS 基于树莓派通用的 GPIO 设计,文中的原理和代码也适用于其他情况。

29.jpg

本节以 SAKS扩展板为硬件基础,实现将树莓派的 CPU 或 GPU 的温度显示在数码管上。当温度超过阀值时,自动触发 SAKS 扩展板上的蜂鸣器响起警报。
由于我们已经开始基于 SAKS SDK 开发(了解 SAKS SDK 发布的信息请阅读这里),本例程中涉及到的 SAKS 扩展板引脚编号我们根本不需要再关心。
可能你还不知道,树莓派内置了一个传感器你可以用来获取树莓派的CPU和GPU温度。这对于保护你的设备非常有用,这样就可以在树莓派温度过高的时候关掉树莓派或者在温度过热的时候报警。
首先,要获取树莓派 CPU和 GPU 的温度,我们封装了以下方法:

  1. import commands

  2. def get_cpu_temp():
  3.     tempFile = open( "/sys/class/thermal/thermal_zone0/temp" )
  4.     cpu_temp = tempFile.read()
  5.     tempFile.close()
  6.     return float(cpu_temp) / 1000
  7.     #如果你想使用华氏温度,打开注释
  8.     #return float(1.8*cpu_temp)+32

  9. def get_gpu_temp():
  10.     gpu_temp = commands.getoutput( '/opt/vc/bin/vcgencmd measure_temp' ).replace( 'temp=', '' ).replace( '\'C', '' )
  11.     return float(gpu_temp)
  12.     #如果你想使用华氏温度,打开注释
  13.     # return float(1.8* gpu_temp)+32
复制代码

这里面有两个方法:get_cpu_temp 和 get_gpu_temp。它们俩都返回一个float型的摄氏温度值。(如果你想使用华氏温度,打开里面的两行注释)。现在,让我们把所有信息输出到 SAKS 扩展板的数码管上吧。
下面直接调用SAKSSDK的方法来让数码管和蜂鸣器工作(这里只定义了CPU温度获取,如果你希望显示GPU温度,加入上文中的方法定义并修改调用即可)。

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. #导入 SAKS SDK 模块
  4. from sakshat import SAKSHAT
  5. import time
  6. import commands

  7. #Declare the SAKS Board,定义一个SAKS对象
  8. SAKS = SAKSHAT()

  9. #返回浮点型的CPU温度
  10. def get_cpu_temp():
  11.     tempFile = open( "/sys/class/thermal/thermal_zone0/temp" )
  12.     cpu_temp = tempFile.read()
  13.     tempFile.close()
  14.     return float(cpu_temp) / 1000
  15.     #如果你想使用华氏温度,打开注释
  16.     #return float(1.8*cpu_temp)+32

  17. #主程序入口
  18. if __name__ == "__main__":
  19.     while True:
  20.         t = get_cpu_temp()
  21.         #如果你希望实时温度的数值输出在屏幕上请取消下面的注释
  22.         #print("%.2f" % t)
  23.         #调用SAKS的数码管对象(digital_display),让他按照指定格式显示(show)温度数值
  24.         SAKS.digital_display.show("%.2f" % t)
  25.         #这里暂时设定为50度警报响起
  26.         if t > 50:
  27.             #调用SAKS的蜂鸣器对象(buzzer),让他按照按照一定的频率发出警报(beepAction),下面的参数是以2毫秒的间隔鸣响30次
  28.             SAKS.buzzer.beepAction(0.02,0.02,30)
  29.         time.sleep(1)

  30.     input("Enter any keys to exit...")
复制代码

其中“%.2f” 格式化字符串表示显示的数值保留2位小数。由于数码管的 show 方法已经封装了数码管的逻辑,因此任何时候调用数码管显示数值,只需要调用这个方法,把数值作为参数提供即可。将上面的程序源码保存为 main.py 接下来如果要运行,请注意程序开头的 from sakshatimport SAKSHAT,需要导入 SAKS SDK 模块。为此我们需要将 SAKS SDK 模块的相关文件和 main.py 放在一起才能正确执行 main.py 程序。我们准备了一个包含 main.py 和 SAKS SDK 的包并在 Github 上提供下载:https://github.com/spoonysonny/S ... temperature-display
在终端运行:

  1. git clone https://github.com/spoonysonny/SAKS-tutorials.git
  2. cd SAKS-tutorials
  3. cd CPU-temperature-display
  4. sudo python main.py
复制代码

CPU 温度数值实时显示在了 SAKS 扩展板上。有了这样的保护之后,你大概可以安心地超频了吧!

30.jpg
分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册