前段时间将吃灰了很久的树莓派重新拿出来准备尝试使用树莓派本地部署ollama语言模型,考虑到树莓派的性能,决定稍微升级一下它的散热系统。现有散热系统采取芯片上涂抹硅脂粘贴散热片的被动散热方式,在此基础上,我准备增加一个风扇。
树莓派GPIO接口能够提供的最大电压为5V,故此选择5V风扇进行散热。但这样的选择面临着一个问题,风扇一直转很吵,并且也不是一直需要风扇进行散热,只是需要风扇在超过一定温度时进行工作,而树莓派不能主动控制5V供电的输出与关闭,这上面的5V接口是从树莓派的供电接口分流过来的,没有经过任何芯片。
为此,我添加了一颗S8050三极管对风扇进行控制,如果有朋友想采用这个方案,不一定非要使用S8050,使用任何一个型号的三极管都可以。
三极管具有三个引脚,各个引脚的功能如下图所示。
从上面的引脚示意图可作如下电路图:
按照上图焊接后,将三条线按照电路图插在树莓派上,然后在树莓派上使用命令测试了。
在测试前,需要安装WiringPi,由于该文章写于2025年,树莓派官网提供的最新系统镜像已经不自带WiringPi了,作者长时间未更新,导致apt-get安装无法查找到软件包。网上的wget方法下载到的软件包架构与树莓派不符,无法使用。
如今,安装WiringPi需要使用git命令clone,然后本地进行build。具体命令如下:
git clone https://github.com/WiringPi/WiringPi.git
cd ~/wiringPi
./build
我这边的网络无法连接github,在实际操作时我clone了镜像站。如果大家也遇到了同样的问题,可以修改git clone命令后的仓库链接为镜像站链接。
build完毕后,使用sudo gpio -v命令查看版本成功,则代表WiringPi安装成功。再使用sudo gpio readall命令查看当前GPIO接口情况。
这里我们选择的是4号引脚提供5V供电,6号引脚作为GND,8号引脚作为控制三极管的信号接口。主要查看一下8号引脚在WiringPi中的PIN,它的PIN为15,目前的模式为输入模式。
再使用sudo gpio mode 15 out切换至输出模式,使用sudo gpio mode 15 output也可以。
切换完毕后readall的内容就出现了变化,可见我们已经成功修改了8号引脚的模式状态。现在就可以使用命令来控制风扇的开关了。
#高电平开启风扇
sudo gpio write 15 1
#低电平关闭风扇
sudo gpio write 15 0
至此还不够,我们需要达成的目的是达到一定温度自动开启风扇,降至一定温度自动关闭风扇。树莓派自带了一个文件输出当前CPU部分的温度,内容为5位数字,数字单位为毫摄氏度。
#查看当前温度
cat /sys/class/thermal/thermal_zone0/temp
温度获取部分无需我们再添加温度模块检测了,下面直接编写shell脚本。脚本的基本原理:获取当前温度,与设定的高温度变量进行比对,如果高于该温度则给三极管一个高电平开启风扇,如果低于设定的低温度,则给三极管一个低电平关闭风扇。下面是具体代码:
#!/bin/bash
# 配置参数
HIGH_TEMP=55 # 高于此温度开启风扇
LOW_TEMP=45 # 低于此温度关闭风扇
GPIO_PIN=15 # 使用的GPIO引脚PIN
# 初始化GPIO
/usr/local/bin/gpio mode $GPIO_PIN out
/usr/local/bin/gpio write $GPIO_PIN 0
# 初始状态
FAN_STATE=0
while true; do
# 获取CPU温度(摄氏度)
TEMP=$(cat /sys/class/thermal/thermal_zone0/temp | awk '{print $1/1000}')
# 温度高于HIGH_TEMP且风扇未开启
if (( $(echo "$TEMP > $HIGH_TEMP" | bc -l) )) && [ $FAN_STATE -eq 0 ]; then
/usr/local/bin/gpio write $GPIO_PIN 1
FAN_STATE=1
# 温度低于LOW_TEMP且风扇未关闭
elif (( $(echo "$TEMP < $LOW_TEMP" | bc -l) )) && [ $FAN_STATE -eq 1 ]; then
/usr/local/bin/gpio write $GPIO_PIN 0
FAN_STATE=0
fi
sleep 5 # 每5秒检测一次
done我将该脚本保存在了etc目录下命名为fan,这样使用命令/etc/fan就可以快速开启了。编写完毕后可以手动运行一下该脚本看一下是否可以正常使用,测试结束后,就可以写到开机启动中自动运行了。
相关推荐
- 树莓派下部署nginx出现502报错的故障排查及解决方案 2025-05-02
评论0
暂时没有评论