2017-07-10 137 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可能会这样做。然后它关闭到电子堆栈交换;)

而正如其他人已经指出,你处于一个紧密的循环。