2017-07-10 186 views
1

我有一個Bash腳本(見下文),它通過GPIO引腳控制繼電器。它工作正常,但我注意到Pi的CPU變得非常熱 - 在運行時高達83C左右,而在Pi空閒時從大約40C升高。Raspberry Pi - 引起過熱的Bash腳本

我看過CPU使用率和腳本,它一直運行,使用16%的CPU。

有沒有人有任何想法爲什麼這種過熱發生?

謝謝。

#!/bin/bash 

    while true; do 
    s=$(date +%S) 

    if [ $s -eq 58 -o $s -eq 28 ]; then 
    sleep 1.9 

    echo "1" > /sys/class/gpio/gpio6/value 
    sleep 0.5 
    echo "0" > /sys/class/gpio/gpio6/value 
    sleep 1 
    fi 

    done 
+2

你正在運行一個無限循環,只是每隔一段時間就暫停一次。這不可避免地會導致CPU以幾乎儘可能快的速度運行! –

回答

1

有兩件事情我在想。由於您似乎希望每30秒打開一次繼電器半秒,因此您正在運行的環路數量比您需要的多得多。你可以睡在整個循環1秒在幹什麼以下

#!/bin/bash 

while true; do 
s=$(date +%S) 

if [ $s -eq 58 -o $s -eq 28 ]; then 
sleep 1.9 

echo "1" > /sys/class/gpio/gpio6/value 
sleep 0.5 
echo "0" > /sys/class/gpio/gpio6/value 
fi 

sleep 1 

done 

我在想另一件事是:

一個你正在檢查一堆大部分可能消耗太多電流繼電器電路。你有任何與繼電器串聯的限流電阻嗎?這是我首先要檢查的,因爲你的bash腳本中沒有任何大規模的計算。這對於Rasperry Pi來說也是非常過分的,但這是一個完全不同的野獸。

1

GPIO引腳的額定值僅爲幾毫安。根據繼電器類型的不同,不需要晶體管或達林頓的升壓操作大多數繼電器。如果正確選擇,正確偏置晶體管將限制來自GPIO引腳的電流,並提供足夠的電流來操作繼電器。沒有這種風險,你的Pi可能會這樣做。然後它關閉到電子堆棧交換;)

而正如其他人已經指出,你處於一個緊密的循環。