Raspberry Pi 樹莓派 GPIO

Raspberry Pi 樹莓派 GPIO

即便你 樹莓派 的用途,是拿來作為超迷你 PC 使用,而不是用來作為連接各種傳感器的物聯網控制版,你還是有可能會需要認識樹莓派的 GPIO。

外接風扇

最簡單的 GPIO 應用莫過於外接散熱風扇了,通常只需要用到兩根接腳提供風扇電源,因此多半選擇 Pin# 0406。如果覺得風扇噪音太大、太吵,則可以改接 3.3V 如 Pin# 01 或是 17

可調速度風扇

如果採用的是可調速風扇模組,應該是安裝在 Pin# 03040506 等四根 GPIO 接腳上,透過 Pin# 03GPIP02 進行 PWM 運作模式以便控制風扇速度。

附上兩個程式控制範例

隨溫度上昇加快轉速

 1#!/usr/bin/env python
 2# encoding: utf-8
 3# From: shumeipai.net
 4
 5import RPi.GPIO
 6import time
 7
 8RPi.GPIO.setwarnings(False)
 9RPi.GPIO.setmode(RPi.GPIO.BCM)
10RPi.GPIO.setup(2, RPi.GPIO.OUT)
11pwm = RPi.GPIO.PWM(2, 100)
12
13fan = False
14start = 40
15stop = 27
16
17try:
18    with open('/sys/class/thermal/thermal_zone0/temp') as f:
19        while True:
20            cur = int(f.read()) / 1000
21            now = time.strftime("%H:%M:%S",time.localtime(time.time()))
22
23            if not fan and cur >= start:
24                pwm.start(100)
25                fan = True
26                print("[%s] Fan on @ %s" % (now, cur))
27
28            if fan and cur <= stop:
29                pwm.stop()
30                fan = Fale
31                print("[%s] Fan off @ %s" % (now, cur))
32
33        time.sleep(1)
34
35except KeyboardInterrupt:
36    pwm.stop()

超過 Threshold 值後開啟風扇

 1#!/usr/bin/env python
 2# encoding: utf-8
 3
 4import RPi.GPIO
 5import time
 6
 7RPi.GPIO.setwarnings(False)
 8RPi.GPIO.setmode(RPi.GPIO.BCM)
 9RPi.GPIO.setup(2, RPi.GPIO.OUT)
10pwm = RPi.GPIO.PWM(2, 100)
11
12speed = 0
13prv_temp = 0
14
15try:
16    tmpFile = open('/sys/class/thermal/thermal_zone0/temp')
17    while True:
18        cpu_temp = int(tmpFile.read())
19        tmpFile.close()
20
21        if cpu_temp >= 34500 :
22        if prv_temp < 34500 :
23            #啟動時防止風扇卡死先全功率轉 0.1 秒
24            pwm.start(0)
25            pwm.ChangeDutyCycle(100)
26            time.sleep(.1)
27
28            speed = min( cpu_temp/125-257 , 100 )
29            pwm.ChangeDutyCycle(speed)
30        else :
31            pwm.stop()
32
33        prv_temp = cpu_temp
34        time.sleep(5)
35
36except KeyboardInterrupt:
37    pass
38
39pwm.stop()