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

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

本文由树莓派实验室创作,遵循CC协议(署名-非商业性使用-禁止演绎-相同方式共享),欢迎树莓派爱好者们遵循协议内容转载传播。谢绝不遵守协议的转载和抄袭。

本节以 SAKS 扩展板为硬件基础,实现将树莓派的 CPU 或 GPU 的温度显示在数码管上。当温度超过阀值时,自动触发 SAKS 扩展板上的蜂鸣器响起警报。

由于我们已经开始基于 SAKS SDK 开发(了解 SAKS SDK 发布的信息请阅读这里),本例程中涉及到的 SAKS 扩展板引脚编号我们根本不需要再关心。

可能你还不知道,树莓派内置了一个传感器你可以用来获取树莓派的CPU和GPU温度。这对于保护你的设备非常有用,这样就可以在树莓派温度过高的时候关掉树莓派或者在温度过热的时候报警。

首先,要获取树莓派 CPU 和 GPU 的温度,我们封装了以下方法:

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
    #如果你想使用华氏温度,打开注释
    #return float(1.8*cpu_temp)+32

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

这里面有两个方法:get_cpu_temp 和 get_gpu_temp。它们俩都返回一个float型的摄氏温度值。(如果你想使用华氏温度,打开里面的两行注释)。现在,让我们把所有信息输出到 SAKS 扩展板的数码管上吧。

下面直接调用SAKS SDK的方法来让数码管和蜂鸣器工作(这里只定义了CPU温度获取,如果你希望显示GPU温度,加入上文中的方法定义并修改调用即可)。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#导入 SAKS SDK 模块
from sakshat import SAKSHAT
import time
import commands

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

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

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

    input("Enter any keys to exit...")

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

在终端运行:

sudo git clone https://github.com/spoonysonny/SAKS-tutorials.git
cd SAKS-tutorials/CPU-temperature-display
sudo python main.py

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

后面我们后面将开始介绍如何基于 SAKS 扩展板 DIY 各种有趣、实用的东西,欢迎持续关注!

本文属于《树莓派瑞士军刀扩展板(SAKS)DIY 教程》系列文章,查看系列文章目录,请访问:http://shumeipai.nxez.com/swiss-army-knife-shield-for-raspberry-pi-diy-tutorials