购买树莓派也有一段时日了,当然了,几乎也是处于吃灰状态。
给树莓派安装过风扇的人都知道,如果给风扇接入5V的GPIO下,风扇的声音大到像是在拆家。
所以我机智的接入了3.5V稍微柔和了那么一点,去年跑了一整个夏天。
当时有一个想法是:我们可以通过 cat /sys/class/thermal/thermal_zone0/temp获得CPU的实时温度,那么判断这个值的大小,大于设定值让风扇工作,等待CPU的温度降下来到一个设定的温度就让风扇停止工作。
但是想法总是一闪而过也没有具体去做操作。
后来也看到了树莓派实现温度监控并控制风扇散热,但当时也懒没时间去做。
随着时间又来到了四月,树莓派的CPU温度逐渐又攀高了。
又看了一篇文树莓派配置自动风扇才想起来这个坑还没有填,所以今年让风扇也休息一下吧。
准备材料
以下列出材料类目,打出的价格都是含邮费的(包邮呀)
- 400孔面包板 x 1
- 杜邦线 x 40
- 面包板插线 x 65
- S9014三极管 x 20
实际上用不完这些材料的,但,人家卖家就这样卖,而且还巨便宜,还能怎么办?

连线参考图片
这里先搬几张图片吧。
- 树莓派40pin引脚对照图
 
- 参考的连线图1
 
- 参考的连线图2
 
- S9014三极管结构
 
三极管的E接正极,B接GPIO口,C接风扇的负极。B口建议再加上一个1K的电阻,防止三极管过热。(我使用的S9014没有使用1K电阻,看下来问题不大,反正挂了我还有19个 XD)
实际连线


踩到的一些坑
- 面包板连接线有几根有问题,导致电路不通,坑死QAQ,一根一根测试连接线。
- 参考别人的python脚本运行有问题,还得感谢echo少年的倾情解答。
代码
代码从TesterHome抄的,我加了一些注释~
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 | #!/usr/bin/python2
#coding:utf8
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 = 40
    GPIO.setmode(GPIO.BOARD)
    GPIO.setwarnings(False)
    #GPIO物理引脚BOARD编码
    # close air fan first
    GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH)
    #初始化风扇状态,实际测试下来,改成以下代码会更好哇?
    #GPIO.setup(channel, GPIO.OUT, initial=GPIO.LOW)
    is_close = True
    while True:
        temp = cpu_temp()
        if is_close:
            if temp > 50.0:
                #CPU温度超过50度打开风扇
                print time.ctime(), temp, 'open air fan'
                GPIO.output(channel, GPIO.HIGH)
                is_close = False
        else:
            if temp < 40.0:
                #CPU温度小于40度关闭风扇
                print time.ctime(), temp, 'close air fan'
                GPIO.output(channel, GPIO.LOW)
                is_close = True
        time.sleep(30.0)
        print time.ctime(), temp
if __name__ == '__main__':
    main()
 | 
 
将上面的代码复制粘贴保存为fan.py
然后运行脚本就O了python fan.py
当然了,最好的方法当然是用守护程序以及设置为开机自启动脚本了。
推荐使用PM2~
| 1
2
3
 | pm2 start fan.py -n auto-Fan
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u pi --hp /home/pi
pm2 save
 |