Написал консоль для Raspberry Pi с Node.js

Node.js задняя часть Hadoop малиновый пирог
Написал консоль для Raspberry Pi с Node.js

🚧 Ссылка на блог:Пишем консоль для Raspberry Pi с помощью Node.js | Эмбер

Когда я был первокурсником, я купил много Raspberry Pis, потому что в то время я ничего не знал, поэтому большую часть времени я ставил их в угол, чтобы есть пепел. Недавно я видел иностранного брата в археологииСоздайте кластер Hadoop с Raspberry, я достал Raspberry Pi и переделал его, чтобы использовать его в качестве центра умного дома. К счастью, он был использованlegoКорпус аттракциона, который теперь легко восстановить, выглядит следующим образом после того, как с ним повозились. чтобы иметь возможностьiOSлучшее использованиеHomeKitДля управления несколькими умными светильниками Xiaomi дома я выбралHomeAssistantКак центр умного дома, тепловыделение Raspberry Pi стало проблемой.

雪乃坐镇保佑不出 bug

Юкино сидит и благословляет жуков

Первоначально, когда я купил Raspberry Pi, я принес вентилятор, но все они были напрямую подключены к интерфейсу питания Raspberry Pi, то есть,3.3vприведенный в действиеGPIOШтифт не может быть забит5vРабочее напряжение вентилятора, а с другой стороны этот маленький вентилятор очень шумит, да и подшипник невыносим, ​​когда подшипник крутится день и ночь (один завешался), так что я пошел к всемогущему сокровищу купить встроенный стандартВентилятор с магнитной левитацией,6cmВоздушный тракт может рассеивать тепло для двух Raspberry Pis одновременно. Факты доказали, что вентилятор на магнитной подвеске действительно оправдывает свою репутацию, объем воздуха действительно большой, а звука нет вообще. Однако, чтобы продлить срок службы подшипника, необходимо разработать программу управления вентилятором, которой можно было бы управлять с помощью программирования.

После некоторого поиска я сослалсяэтостатья. Выше было сказано,3.3vизGPIOНапрямую подавать питание на вентилятор невозможно, поэтому я выбрал триодное решение в блоге и спроектировал эту схему:

电路图

Онлайн CircuteLab Нетmotor,использоватьlampМомент

Я выбрал то же, что и в блогеS9012изPNPТип трехполюсный, вентилятор положительный и малиновый5vВывод подключен, минус подключен к эмиттеру триода, а база триода подключена к тому, который вы хотите использоватьGPIOбулавка (например, вот я8штырь (GPIO 14)) подключены, и коллектор можно заземлить. См. распиновку Raspberry Pi ниже:

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Производительность Raspberry Pi в любом случае не очень хорошая, после долгой работы Raspberry Pi не будет греться, но процессор компьютера не сядет.туман, предполагается, что повторная операцияDOMНакладные расходы на производительность все еще слишком велики, и в следующем году они снова будут использоваться.VueРефакторинг.

Ссылка на ссылку