四路温控风扇加持,从此树莓派集群不再”发烧“

在上手树莓派4之后,很多人会发现一个很明显的问题,就是树莓派4相比树莓派3代不仅CPU性能突飞猛进,发热量也更加“优秀”, 待机状态分分钟70度上下。所以这时候散热就显得很有必要了, 尤其是我这四台树莓派的集群,不做好散热分分钟变成小火炉。通常树莓派的散热方案有以下几种:

  • 散热片, 被动散热, 对于CPU频率不高的树莓派2和3有着良好的效果:

  • 风扇, 主动散热,成本低廉,散热效果明显:

  • 水冷, 主动散热,成本较高,结构复杂,体积较大,效果立杆见影:

对于CPU性能3倍于前一代产品(官方说的)的树莓派4来说,散热片完全压不住,水冷散热结构复杂,成本高, 要是漏液对树莓派来说更是致命,所以风扇是最佳散热方案。

我的树莓派集群使用的这种外壳:

每一层都有一个散热风扇,7x24小时运行,但是运行时间久了就有两个风扇要罢工了, 轴承滋滋的响。想着这么小的风扇老这么转着也不是办法,就有了做一个风扇温控的想法。清明放假三天,正值全国抗疫,索性就用这两天的时间做一个风扇控制器。

功能需求:

  • 能分别控制四个风扇开关
  • 可以根据每个树莓派CPU温度自动控制
  • 可以手动控制,控制方式包括按钮控制、网页控制
  • 最好指示灯显示每个风扇的状态

硬件材料:

  • 四路电机控制模块

  • 四颗彩色LED(2427 WS2812)

  • 四个TTP223触摸按钮

  • 主控芯片ESP8266

ESP8266

  • 排针若干, 导线若干

所有的元件如下图,成本在20元以内:

四路电机控制模块是之前买的,通过控制每一路的两个GPIO可以实现对电机的正反转和PWM调速,由于树莓派的风扇转向只有一个方向,也不需要PWM调速,所以只需将其中一个GPIO拉低, 控制另外一个GPIO就可控制风扇的起停。
控制四个风扇、四个按钮和ws2812,总共需要占用ESP8266的9个GPIO,我使用的MicroPython来编写控制的逻辑代码,按照MicroPython的文档说明的可用的GPIO:

看来要把所有的可用的GPIO都得占用了!

最终连接图如下:

又到了展现真正的技术的时候了(2427规格的ws2812不好焊接):

经过一下午的折腾,最终的完全按照连线图焊接好了:

先验证一下LED是否正常:

OK!

硬件部分基本完成,开始编写风扇的逻辑:控制逻辑很简单, 通过mqtt协议接收树莓派发过来的四台树莓派的CPU温度信息,当温度高于设定的值时, 开启对应的那台树莓派的风扇,当温度低于设定的值才关闭风扇,既然使用了mqtt也就很方便的接入了家里的homeassistant平台,可以实现web、天猫精灵控制。
而按下风扇对应的按钮也能实现手动开启/关闭风扇,或者通过homeassistant的页面手动远程控制, 当风扇开启时,对应的LED亮绿灯(无网络状态亮黄灯), 风扇关闭时对应的LED亮红灯。

根据以上控制流程,树莓派端有一个程序定时收集四台主机的CPU温度状态信息,并通过mqtt发布出去,ESP8266负责接收这些信息并根据每台树莓派的CPU温度值来控制对应的风扇。

树莓派上面的代码使用golang编写,ESP8266代码用python编写,详细见链接:欢迎讨论交流

代码上传运行测试:

最后应用在树莓派集群上,用于自动控制树莓派集群的风扇:

同时添加这四个风扇设备到homeassistant,这样就可以在手机或电脑上查看风扇的状态、控制风扇了:

经过几天的运行, 树莓派的CPU温度始终保持在设定的阈值(45°)附近,而风扇也不用一直运行了。