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

栏目: Node.js · 发布时间: 5年前

内容简介:大一的时候就买了很多树莓派,因为那时候还啥也不会,就大部分时间放在角落里吃灰。最近考古看到一篇外国老哥本来买树莓派的时候就带了风扇,但都是直接插在树莓派的供电接口上的,也就是说,经过一番搜索,我参考了这篇文章。上面已经说过了,

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

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

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

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

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

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

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

:warning: 注意 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 通讯就行了。虽然简单但代码比较繁琐,就不在这里贴出来了,给几个截图意思一下:

这里有个超大的动图...

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

搭配 HomeAssistant 食用风味更佳

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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

AI·未来

AI·未来

李开复 / 浙江人民出版社 / 2018-9-1 / 62

迎来“深度学习”这项重大技术突破后,人工智能已经从发明的年代步入了实干的年代。 现在已是未来,我们所处的时代,已经与过去完全不同。面对已经来临的、机遇与挑战并存的人工智能时代,我们必须了解人工智能,跟上人工智能发展的脚步,这样才能不被时代淘汰。 全球目前人工智能发展的情况是怎样的? 全球的人工智能巨头企业有哪几家,现在它们有什么贡献?未来它们又将如何改变世界? 人工智能已经......一起来看看 《AI·未来》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

SHA 加密
SHA 加密

SHA 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具