用 Node.js 给树莓派写了个控制台

? 博客链接:用 Node.js 给树莓派写了个控制台 | Amber

大一的时候就买了很多树莓派,因为那时候还啥也不会,就大部分时间放在角落里吃灰。最近考古看到一篇外国老哥用树莓配搭建 Hadoop 集群的文章,就把树莓派拿出来重新改造了一下,作为智能家居中心使用。好在当初就是用 lego 搭的外壳,现在要翻修也很容易,已经捣鼓之后看起来就像下面那样。为了能在 iOS 上用 HomeKit 控制家里的几个小米的智能灯,我选择了 HomeAssistant 作为智能家居中心,但树莓派的散热就成了个问题。

雪乃坐镇保佑不出 bug

本来买树莓派的时候就带了风扇,但都是直接插在树莓派的供电接口上的,也就是说,3.3v 供电的 GPIO 引脚是没法驱动 5v 工作电压的风扇的,而且另一方面这小风扇非常吵,而且整天整晚的开着承轴受不了(已经挂了一个了),所以我就去万能的某宝买了一个建准的磁悬浮风扇6cm 的风径可以给两个树莓派同时散热。事实证明磁悬浮风扇果然名不虚传,风量大还真的一点声音都没有。但为了延长承轴寿命,还是要设计一套可以通过编程控制的风扇控制程序。

经过一番搜索,我参考了这篇文章。上面已经说过了,3.3vGPIO 是没法直接给风扇供电的,所以我选择了博文中的三极管方案,设计了这样的电路:

在线的 CircuteLab 没有 motor,用 lamp 将就一下吧

我和博文中一样选择了 S9012PNP 型三极管,风扇正极与树莓派 5v 引脚相连,负极与三极管发射极相连,三极管基极与你想要使用的 GPIO 引脚(比如我这里就是 8 号引脚 (GPIO 14)) 相连,集电极接地即可。参考下面的树莓派引脚图:

⚠️ 注意 rpio 的引脚编号和实际的 gpio 端口号不完全对应,下面会讲到

接下来,通过 node.js 编程控制风扇自动停启。使用 node.js 是为了下面和控制台对接方便,示例代码如下:

const GPIO = require('rpio')
const PIN = 8 // 这里的 8 号引脚对应 gpio 14,其余请查阅 rpi gpio 手册:https://pinout.xyz/
const TEMP_LOW = 38 // 低于 38 摄氏度则停止运行
const TEMP_HIGH = 42 // 高于 42 摄氏度则开启风扇

const TEMP_FILE = '/sys/class/thermal/thermal_zone0/temp'

/**
 * 读取树莓派当前温度
 * return {Number} 当前温度
 */
function cpuTemp () {
  return parseFloat(require('fs').readFileSync(TEMP_FILE)) / 1000
}

setInterval(function () {
  temp = cpuTemp()
  console.log(`Current temp is ${temp}`)
  if (isClose) {
    if (temp > TEMP_HIGH) {
      GPIO.write(PIN, GPIO.LOW)
      console.log('Open air cooler')
      isClose = false
    }
  } else {
    if (temp < TEMP_LOW) {
      GPIO.write(PIN, GPIO.HIGH)
      console.log('Close air cooler')
      isClose = true
    }
  }
}, 2000) // 每 2s 刷新一次
复制代码

对了,这里有个坑忘了说。包括我参考的那篇博客在内,大部分网络上的资料都是通过给接口高电平来开启风扇的,但事实上这是以 NPN 型三极管计算的结果,要使得 PNP 工作于放大状态应该使发射结正偏集电结反偏,如果 GPIO 引脚这时给高电平是没法使三极管正常工作的,所以这里给低电平才对。

为了验证这个我还把尘封的模电书找了出来好好复习了一下。

Node 编写控制台后端还比较简单,主要架构就是 express 做服务端,bootstrap materialize design + d3.js 做前端页面,再通过 socket.io 作为 WebSocket 通讯就行了。虽然简单但代码比较繁琐,就不在这里贴出来了,给几个截图意思一下:

啊哦,你的浏览器好像不支持 <video> 标签,你可以下载后使用你喜爱的播放器打开~

性感风扇在线调戏

搭配 HomeAssistant 食用风味更佳

不过我不清楚是不是 d3.js 的锅,反正现在性能不是很好,长时间运行后树莓派倒是不烫了,电脑的 CPU 却下不来了大雾,估计反复操作 DOM性能开销还是太大了,等明年再用 Vue 重构吧。

参考链接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值