還沒了解本節用到的材料,先去看看昨天的介紹喔~
由於這款Relay最多可接四個風扇,因此除了上置兩個原預留兩個安裝空間外
額外在磁碟陣列位置加裝排風扇的目的是為了讓壅擠的磁碟陣列保持適當溫度
畢竟在AIO環境中,硬碟一定會頻繁讀取
必須以降溫為優先考量
機櫃安裝圖
Relay電路圖(常閉接法)
辛苦的接完電路後,要來實作程式了
開頭有講到目標是要"自控"機櫃內的陣列位置風扇
所以我們要讓樹梅派和主機處在一個網段下
讓數梅派去不斷驗證主機是否開機
如果開機就啟動陣列位置風扇,反之則不啟動
要達成此效果,我們要使用網路工具ping
讓樹梅派相隔已幾秒就驗證一下主機是否處在開機狀態(或網路是否連通)
以下是我自己寫的程式碼,請讀者依自身情況做修改:
(如有不懂詳讀註解或在留言區提問~)
#!/usr/bin/python
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import os,time
#ping 方法(method) 函式
#每做一次就會回傳一次主機(unraid)狀態
#0表示無回應(no response)或斷線(time out)
def autoctrl(host):
response = os.system("ping -c 1 " + host)
return response
#定義主機IP
#繼電器腳位預設22請自行修改
unraid ="<你的主機IP>"
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
#輸出主程式
if __name__ == '__main__':
try:
#每五秒就做一次ping函式
while True:
time.sleep(5)
autoctrl(unraid)
if autoctrl(unraid) == 0:
GPIO.setup(22, GPIO.OUT, initial=GPIO.HIGH)
GPIO.output(22, GPIO.HIGH)
time.sleep(0.1)
print("{} front fan is on".format(unraid))
else:
GPIO.setup(22, GPIO.OUT, initial=GPIO.HIGH)
GPIO.output(22, GPIO.LOW)
time.sleep(0.1)
print("{} front fan is off".format(unraid))
except:
exit("exit")
#中止程式時清除GPIO
finally:
GPIO.cleanup()
exit("exit")
最後來講講如何在樹梅派開機時自動運行程式
以免重開機後無法自動控制風扇
1.修改rc.local檔案
sudo nano /etc/rc.local
2.加入開機執行指令即可小技巧
採用土法煉鋼法
由於開機當下python主程式一定還沒啟動
所以直接延遲個幾秒鐘即可~
sleep 20s &&
python3 /home/pi/Downloads/cmd/switch_autoctrl.py &