Raspberry Pi 樹莓派 GPIO

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

外接風扇

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

可調速度風扇

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

附上兩個程式控制範例

隨溫度上昇加快轉速

#!/usr/bin/env python
# encoding: utf-8
# From:shumeipai.net

import RPi.GPIO
import time

RPi.GPIO.setwarnings(False)
RPi.GPIO.setmode(RPi.GPIO.BCM)
RPi.GPIO.setup(2, RPi.GPIO.OUT)
pwm = RPi.GPIO.PWM(2, 100)

fan = False
start = 40
stop = 27

try:
	with open('/sys/class/thermal/thermal_zone0/temp') as f:
		while True:
			cur = int(f.read()) / 1000
			now = time.strftime("%H:%M:%S",time.localtime(time.time()))

			if not fan and cur >= start:
				pwm.start(100)
				fan = True
				print("[%s] Fan on @ %s" % (now, cur))

			if fan and cur <= stop:
				pwm.stop()
				fan = Fale
				print("[%s] Fan off @ %s" % (now, cur))

		time.sleep(1)

except KeyboardInterrupt:
	pwm.stop()

超過 Threshold 值後開啟風扇

#!/usr/bin/env python
# encoding: utf-8

import RPi.GPIO
import time

RPi.GPIO.setwarnings(False)
RPi.GPIO.setmode(RPi.GPIO.BCM)
RPi.GPIO.setup(2, RPi.GPIO.OUT)
pwm = RPi.GPIO.PWM(2, 100)

speed = 0
prv_temp = 0

try:
	tmpFile = open('/sys/class/thermal/thermal_zone0/temp')
	while True:
		cpu_temp = int(tmpFile.read())
		tmpFile.close()

		if cpu_temp >= 34500 :
		if prv_temp < 34500 :
			#啟動時防止風扇卡死先全功率轉 0.1 秒
			pwm.start(0)
			pwm.ChangeDutyCycle(100)
			time.sleep(.1)

			speed = min( cpu_temp/125-257 , 100 )
			pwm.ChangeDutyCycle(speed)
		else :
			pwm.stop()

		prv_temp = cpu_temp
		time.sleep(5)

except KeyboardInterrupt:
	pass

pwm.stop()

外接 RTC

  1. Gerice
  2. Energy
  3. Test
初級班導師

研究興趣廣泛,涵蓋 AIoT 相關產品

相關