自己的Node.JS + Arduino的家居控制系统

很久以前的课设时实现了自己的一个想法,无线控制屋里的灯,再也不用每次都要站起来去手动关灯了。为了能通用些,写了成了一个小的框架,每个控制功能作为一个“驱动/模块“,然后在这个基础上把温湿度传感,红外/空调遥控之类的都做了出来。之后借来的Intel Gailieo还回去了,开始磨磨蹭蹭地把系统放到了树梅派上,然后改进了一下Arduino端的结构,也尝试写了一个比较通用的框架。

使用Node.js作为服务器提供Web端控制,通过不同的通讯模块(现在有NRF24L01,网络和WIFI)处理请求和传感器发回的信息等,将用户请求发送到下位机(比如Arduino),服务器处理各种传感器和控制器的具体任务。

Arduino上尝试实现了一个库,提供一个框架,方便实现硬件逻辑,可以将一个操作绑定到一个函数上,实现不同操作的处理。

服务器端对应的灯的“驱动”目前看起来是这样的:

var light = {};
var plat = undefined;

light.decorate = function (thing, desc){
  thing.turnOff = function(){
    var op = {
      'op':'turnOff',
    }
    thing.send(op);
  }
  thing.turnOn = function(){
    var op = {
      'op':'turnOn',
    }
    thing.send(op);
  }
  thing.powerOff = thing.turnOff;
  thing.powerOn = thing.turnOn;
  thing.receives.add(function(data){
    thing.status = data.status;
  })
  thing.interfaces['Power On'] = {
    type:'switch',
    name:'Power On',
    desc:'开灯',
    action:{
      1:'turnOn',
      0:'turnOff'
    },
    value:'power'
  };
}

light.init = function (base){
  plat = base;
}


module.exports = light;

Arduino上用自己的这个框架的话代码也比较干净利索,目前看起来是这样:

#define RF24_ADDR 0xFFFF000001
//#define SOME_DEBUG
//#define SOME_ERROR
#include <ArduinoJson.h>
#include <EEPROM.h>
#include <SPI.h>
#include "printf.h"
#include "Some.h"

Thing<link_RF24> me(0,
                    "{\"name\":\"智能灯\",\"groups\":{\"power\":{\"hasBattery\":false},\"smart\":{\"alwaysOn\":true,\"heartBeat\":false},\"light\":{}}}");


void turnOn(void) {
  Serial.println("turnOn");
  digitalWrite(6, LOW);
  me.send("{\"power\":1}");
}

void turnOff(void) {
  Serial.println("turnOff");
  digitalWrite(6, HIGH);
  me.send("{\"power\":0}");
}

void setup() {
//  Serial.begin(115200);
//  printf_begin();
  pinMode(6, OUTPUT);
  digitalWrite(6, LOW); //Turn the light on as soon as possible.
  me.setup();
  me.poke();
  me.on("turnOn", turnOn);
  me.on("turnOff", turnOff);
  turnOn();
}

void loop(void) {
  delay(50);
  me.refresh();
}

不少地方需要跟进,比如使用Arduino设备的自动发现,给每个设备分配更加独立可识别的ID,加密和安全性等,服务器中对事件的处理等等。

目前服务器跑在树梅派上,使用Arduino改造了自己的屋顶灯,做了几个传感器,跑得很欢。

持续更新中…

Github:

Server:https://github.com/ryncsn/some

Arduino:https://github.com/ryncsn/some-arduino

One thought on “自己的Node.JS + Arduino的家居控制系统”

  1. 不知道现在这个项目你做成什么样子啦,好想看一看哈哈!
    感觉联系不上你0.0 可回邮件联系啦!

Leave a Reply

Your email address will not be published. Required fields are marked *