前言
风扇对树莓派来说貌似不是必须,官方也没说要使用风扇,但有总比没有好,一般的树莓派盒子都会留个风扇位,就像我淘来的这块树莓派已经预装了一个小风扇。
问题
这是一个5v的小风扇,默认插在以下两个针脚
插上电源即转,不管你温度多少度,甚至树莓派关机状态它也转。
白天还好没啥感觉,到了晚上这小风扇的噪音真不可忽视吵的人烦燥,我看了下cpu温度才26度左右,能耗上来说也是浪费,想着能不能自动启停达到一定温度再转呢?
网上已经有不少人有相同的遭遇,解决方案也都有了,我们可以直接搬来参考。
查看针脚图
树莓派的GPIO可以控制电源的输出,所以我们先要了解一下树莓派的针脚图。
可以使用命令: gpio readall
pi@raspberrypi:~ $ gpio readall
Oops - unable to determine board type... model: 17
但是我在用的时候却发现上面错误,查询资料应该是wiringpi的版本太低导致,参考文档:
http://wiringpi.com/wiringpi-updated-to-2-52-for-the-raspberry-pi-4b/
更新:
cd /tmp
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
更新之后便正常,上面那张即是我树莓派的针脚图。
硬件安装
树莓派GPIO的输出是3.3v,小风扇是5v,看网上方案都说要接三级管增强电压啥的,这玩意虽然不值钱但是我没有啊,走个淘宝还没邮费零头贵。
以我小时候多年拆装玩具的经验,5v的小电器3.3v供电虽说马力不强,但勉强应该能用的起来才对,就先试试。
将小风扇的两个针角改插到以下两个位置:
地线不变,俗称的火线改换到GPIO,可以看到上图中Mode已经为OUT了,因为截图时我已经设置完了。
实测不加三级管也可以用,就是风扇转的慢一点,但是也够用了。
软件控制
上面针脚都已经接好,接下来就是写脚本进行控制了。
网上很多都是python控制,其实用shell就可以完成。
以下是控制的shell脚本:
#!/bin/bash
echo "$(date "+%Y-%m-%d %H:%M:%S") start fan control"
sudo gpio mode 1 output
while [[ 1 == 1 ]];do
cputemp=`cat /sys/class/thermal/thermal_zone0/temp`
temp=$[ $cputemp/1000 ]
time=$(date "+%Y-%m-%d %H:%M:%S")
#温度大于55度开启风扇
if [[ $temp > 55 ]];then
sudo gpio write 1 1
echo "$time 开启风扇,当前温度:$temp"
fi
#温度小于48度关闭风扇
if [[ $temp < 48 ]];then
sudo gpio write 1 0
echo "$time 关闭风扇,当前温度:$temp"
fi
sleep 10
done
最后,在/etc/rc.local
文件的 exit 0 之前添加一行,让脚本开机启动:
su pi -c "exec nohup /home/pi/fan.sh > /home/pi/fan.log &"