树莓派能够在很是低的功率下运行linux系统,可是会面临着一个树莓派过热的问题,因此咱们给树莓派各类降温方案:加散热片,加风扇。javascript
个人树莓派装上了散热片,可是温度仍是会稳定在50度左右,快到夏天了,估计立刻就撑不住了,据说超过70度会自动关机,尚未发生过超过70度的状况。java
加装了一个5V的风扇,可是因为是5V的,只能接在VCC的5V引脚上,也就是BOARD的4脚上。树莓派的5V脚是不能编程控制的,只有GPIO脚才能,可是GPIO脚的电压是3.3V,带不动风扇。此时有两种,一种是继电器,一种是三极管,我准备用三极管,这个比较简单。python
学过模电的同窗应该都知道,三极管的三个脚,E-B-C。(举例使用的是PNP型)linux
思路大概是这样的,咱们首先要获取CPU的温度,这个在树莓派上能够直接获取的,当温度太高时(好比超过45度),咱们就开启风扇;当温度降到必定的值时(好比39度),咱们就关闭风扇。编程
开启和关闭风扇咱们是经过三极管来控制的,将风扇的正极接在树莓派的VCC5V电源上,负极接三极管的E脚,三极管的C脚接树莓派的GND,三极管的B脚接树莓派的某个GPIO口(此处咱们以18口来说)。这样咱们就能够经过控制GPIO口来控制风扇的中止了。spa
树莓派如何和GPIO联系呢。Python为咱们提供了一个库,RPI.GPIO。利用这个库咱们能够编写python程序来控制GPIO输出电平。code
程序文件cdn
import time
try:
import RPi.GPIO as GPIO
except RuntimeError:
print("No Repo found,Please install!")
#获取温度
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)
# 先关闭电风扇
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.LOW)
is_close = False
else:
if temp < 39.0:
print(time.ctime(), temp, 'close air fan')
GPIO.output(channel, GPIO.HIGH)
is_close = True
time.sleep(2.0)
print(time.ctime(), temp)
if __name__ == '__main__':
main()复制代码
上面的文件是引用的Board中的18脚。
blog
如图所示,也就是GPIO.5,你们接线的时候要注意,别接错了。ip
最后咱们须要为三极管的B脚接上一个电阻就OK了。
参考连接:树莓派 40Pin 引脚对照表
参考连接:树莓派 根据 CPU 温度控制风扇起停