樹莓派能夠在很是低的功率下運行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 溫度控制風扇起停