用 Node.js 給樹莓派寫了個控制檯

🚧 博客連接:用 Node.js 給樹莓派寫了個控制檯 | Amber前端

大一的時候就買了不少樹莓派,由於那時候還啥也不會,就大部分時間放在角落裏吃灰。最近考古看到一篇外國老哥用樹莓配搭建 Hadoop 集羣的文章,就把樹莓派拿出來從新改造了一下,做爲智能家居中心使用。好在當初就是用 lego 搭的外殼,如今要翻修也很容易,已經搗鼓以後看起來就像下面那樣。爲了能在 iOS 上用 HomeKit 控制家裏的幾個小米的智能燈,我選擇了 HomeAssistant 做爲智能家居中心,但樹莓派的散熱就成了個問題。node

雪乃坐鎮保佑不出 bug

雪乃坐鎮保佑不出 bugexpress

原本買樹莓派的時候就帶了風扇,但都是直接插在樹莓派的供電接口上的,也就是說,3.3v 供電的 GPIO 引腳是無法驅動 5v 工做電壓的風扇的,並且另外一方面這小風扇很是吵,並且成天整晚的開着承軸受不了(已經掛了一個了),因此我就去萬能的某寶買了一個建準的磁懸浮風扇6cm 的風徑能夠給兩個樹莓派同時散熱。事實證實磁懸浮風扇果真名不虛傳,風量大還真的一點聲音都沒有。但爲了延長承軸壽命,仍是要設計一套能夠經過編程控制的風扇控制程序。apache

通過一番搜索,我參考了這篇文章。上面已經說過了,3.3vGPIO 是無法直接給風扇供電的,因此我選擇了博文中的三極管方案,設計了這樣的電路:編程

電路圖

在線的 CircuteLab 沒有 motor,用 lamp 將就一下吧bootstrap

我和博文中同樣選擇了 S9012PNP 型三極管,風扇正極與樹莓派 5v 引腳相連,負極與三極管發射極相連,三極管基極與你想要使用的 GPIO 引腳(好比我這裏就是 8 號引腳 (GPIO 14)) 相連,集電極接地便可。參考下面的樹莓派引腳圖:後端

rpi-gpio

⚠️ 注意 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 通信就好了。雖然簡單但代碼比較繁瑣,就不在這裏貼出來了,給幾個截圖意思一下:

性感風扇在線調戲

preview

搭配 HomeAssistant 食用風味更佳

不過我不清楚是否是 d3.js 的鍋,反正如今性能不是很好,長時間運行後樹莓派卻是不燙了,電腦的 CPU 卻下不來了大霧,估計反覆操做 DOM性能開銷仍是太大了,等明年再用 Vue 重構吧。

參考連接

相關文章
相關標籤/搜索