是一个 mini 版的 PC,麻雀虽小,五脏俱全,信用卡大小一般的版子,网口,USB 口,基本功能一个都不少。而价格只要 200 块钱左右。
树莓派可以 24 小时开着,耗电非常少。然而还是会发热的,70 度以上就会触发它过热关机了,尤其是夏天快到了,很容易就把树莓派给烧了。
记得有一个夏天,我把树莓派放在屋里,上面运行了一个 git 服务器,等我晚上回来的时候,一股烧焦的味道就飘了过来。从那以后树莓派的散热我一定会优先考虑。
散热片,淘宝上的价格通常在 5 元以下,散热片基本可以解决绝大部分的散热问题。通常购买树莓派的时候,店主也会赠送。
考虑到更恶劣的情况下,还需要再加一个风扇。风扇通常有两种,直径 2cm 和直径 4cm 的。实际使用时发现 2cm 的风量实在是太小,最后直接换了 4cm 的大口径风扇。
风扇开着有点吵,而且开的时间太久了的话,风扇还容易坏掉。所以研究了一下,弄出来一个根据 CPU 温度自动控制风扇起停的方案。
树莓派的 GPIO 口输出电流很低,无法带动风扇,所以还需要一个三极管来放大电流。
我用的型号是 S9012PNP,价格差不多是 3 分钱一个。
原理图大概这个样子
三极管的 E 接正极(右上角第二个),B 接 GPIO 口(建议用 21 号口,最右下方,比较好找),C 接风扇的负极(右上角第三个)。B 口建议再加上一个 1K 的电阻,防止三极管过热。
温度传感器是 CPU 内置的,通过读取系统的
/sys/class/thermal/thermal_zone0/temp
文件就可以获取到温度。用 Python 代码就是
def cpu_temp():
with open("/sys/class/thermal/thermal_zone0/temp", 'r') as f:
return float(f.read())/1000
而 GPIO 口的电压高低可以通过 python 的 RPi.GPIO 库来控制。比如想设置 IO-21 号口为高电平,代码是
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(21, GPIO.OUT)
GPIO.output(21, GPIO.HIGH)
整合起来的代码如下
import sys
import time
try:
import RPi.GPIO as GPIO
except RuntimeError:
print("Error importing RPi.GPIO! This is probably because you need superuser privileges. You can achieve this by using 'sudo' to run your script")
def cpu_temp():
with open("/sys/class/thermal/thermal_zone0/temp", 'r') as f:
return float(f.read())/1000
def main():
channel = 18
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
# close air fan first
GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH)
is_close = True
while True:
temp = cpu_temp()
if is_close:
if temp > 45.0:
print time.ctime(), temp, 'open air fan'
GPIO.output(channel, GPIO.HIGH)
is_close = False
else:
if temp < 38.0:
print time.ctime(), temp, 'close air fan'
GPIO.output(channel, GPIO.LOW)
is_close = True
time.sleep(2.0)
print time.ctime(), temp
if __name__ == '__main__':
main()
代码中使用了双区间,从而避免了温度变化时,风扇状态的频繁变化。
实际的布线图,则是多加了一个二极灯(主要是为了方便看),面包版直接贴到外壳的侧面。
最近发现用继电器也很方便,简单了画了一个连线图
继电器实在淘宝上买的,才 5 块钱,挺便宜的,当时买的时候还包邮。附上购买链接,仅供参考
最后的效果图
大功告成。
当风扇转的时候,二极灯也跟着亮起来。
之后真的就可以整夜整夜的开着树莓派,而不用担心过热的问题了。每当树莓派 CPU 高速运转的时候,风扇就会转起来,其他时候,风扇就会安静下来。用手感觉一下 CPU 的温度,凉凉的,非常好。