add handler and pir

master
IoTcat 5 years ago
parent 3ae03886af
commit 1762c4cc46
  1. 66
      node/README.md
  2. 33
      node/app.js
  3. 2
      node/package.json
  4. 232
      node/wiot.js

@ -157,6 +157,11 @@ wiot.loop([MCU0, MCU1], () => {
### wiot.client事件绑定
`.on(event, handler)`
**client事件列表**
- `begin` 开始于单片机正常交互
- `disConnected` 与单片机断开连接
- `reConnected` 与单片机恢复连接
```js
var MCU = new wiot.client({"MAC": "xx:xx:xx:xx:xx:xx"});
@ -166,15 +171,27 @@ MCU.on('disConnected', function () {
});
```
**事件列表**
- `begin` 开始于单片机正常交互
- `disConnected` 与单片机断开连接
- `reConnected` 与单片机恢复连接
`.pinOn(pin, event, handler)`
**pin事件列表**
- `on` pin口电位从低到高
- `off` pin口电位从高到低
- `change` pin口电位变化
```js
var MCU = new wiot.client({"MAC": "xx:xx:xx:xx:xx:xx"});
MCU.pinOn(wiot.D2, 'on', function () {
// 当MCU的D2电位由低到高时会执行
console.log('D2 from LOW to HIGH!!');
});
```
## 常用模块
### led
### LED
+ `wiot.led(MCU, pin)`: 声明一个led模块
+ `wiot.led.getStatus()`: 获取led状态
+ `wiot.led.set(status, time = 0, isSmooth = false)`: 设置led状态,起始状态,中间状态,最终状态,周期
@ -207,3 +224,42 @@ myLED.clear();
```
### PIR 红外人体传感器
+ `wiot.pir(MCU, pin)`: 声明一个PIR模块
+ `wiot.pir.getStatus()`: 获取PIR状态,返回值wiot.HIGH(有人),wiot.LOW(无人)
#### 事件触发器
+ `wiot.pir.on(event, handler)`
**事件列表**
- `detected` 探测到人
- `undetected` 人体移动出探测范围
- `change` 状态改变,包括有人到无人和无人到有人
```js
MCU0 = new wiot.client({MAC: "xx:xx:xx:xx:xx:xx"});
var myPIR = wiot.pir(MCU0, wiot.D2); //新建一个pir对象,使用MCU0上的D2口
/* 输出pir状态到控制台 */
console.log(myPIR.getStatus());
/* 当探测到人,打印 "Detected People!" 到控制台 */
myPIR.on("detected", ()=>{
console.log("Detected People!");
});
/* 人移动出探测范围,打印 "No People!!" 到控制台 */
myPIR.on("undetected", ()=>{
console.log("No People!!");
});
/* 当状态改变,执行指令 */
myPIR.on("change", ()=>{
/* 你的指令 */
});
```

@ -1,5 +1,5 @@
var wiot = require('./wiot');
MyMCU = new wiot.client({MAC: "3C:71:BF:3A:F7:66", pin: {D4: 1}, okDelayTime: 30,debug: 1});
MyMCU = new wiot.client({MAC: "3C:71:BF:3A:F7:66", pin: {D4: 1}, okDelayTime: 30,hint: 1,debug: 1});
//q = new wiot.client({MAC: "3C:71:BF:3A:F6:83", pin: {D3: 1} });
/*
var i = 0;
@ -16,10 +16,39 @@ wiot.loop([MyMCU], ()=>{
}
});*/
/*
var myLED = wiot.led(MyMCU, wiot.D4); //新建一个led对象,使用MCU0上的D4口
myLED.set([wiot.HIGH, wiot.LOW, 30, 0], [3000, 4000, 2000, 1000], true);
/*
myLED.set(wiot.LOW);
setTimeout(()=>{
if(!myLED.getStatus()){
myLED.set(wiot.HIGH);
}
}, 15000)
}, 15000);*/
var pir = wiot.pir(MyMCU, wiot.D2);
pir.on("detected", ()=>{
console.log("Found People!!!");
});
pir.on("undetected", ()=>{
console.log("No People");
});
pir.on("change", ()=>{
console.log("PIR State Changed!!!");
});
pir.on("change", ()=>{
console.log("PIR2222222222222222 State Changed!!!");
});

@ -1,6 +1,6 @@
{
"name": "wiot",
"version": "0.0.19",
"version": "0.0.20",
"description": "An awesome iot system for web developers~",
"main": "wiot.js",
"scripts": {

@ -2,7 +2,7 @@
* @Author: IoTcat (https://iotcat.me)
* @Date: 2019-05-04 18:59:49
* @Last Modified by: IoTcat
* @Last Modified time: 2019-05-17 11:37:13
* @Last Modified time: 2019-05-17 14:23:42
*/
var wiot_client = function (o_params) {
var o = {
@ -25,6 +25,7 @@ var wiot_client = function (o_params) {
HIGH: 255,
LOW: 0,
data: {},
fData: {},
ip: "default",
ip_range: "192.168.0",
localIP: "127.0.0.1",
@ -63,7 +64,7 @@ var wiot_client = function (o_params) {
D7: 0,
D8: 0
},
on: (event, handler) => {
on: (event, handler = ()=>{}) => {
if(event == 'begin'){
o.begin = handler;
}
@ -74,9 +75,184 @@ var wiot_client = function (o_params) {
o.reConnected = handler;
}
},
pinOn: (pin, event, handler = ()=>{}) => {
if(!isNaN(pin)) pin = 'D' + pin;
if(event == "on"){
o.pinEvents[pin].onEvents.push(handler);
}
if(event == "off"){
o.pinEvents[pin].offEvents.push(handler);
}
if(event == "change"){
o.pinEvents[pin].changeEvents.push(handler);
}
},
begin: () => {},
disConnected: ()=>{},
reConnected: ()=>{}
reConnected: ()=>{},
pinEvents: {
D1: {
onEvents: [],
offEvents: [],
changeEvents: [],
on: ()=>{
o.pinEvents.D1.onEvents.map((v)=>{
v();
});
},
off: ()=>{
o.pinEvents.D1.offEvents.map((v)=>{
v();
});
},
change: ()=>{
o.pinEvents.D1.changeEvents.map((v)=>{
v();
});
}
},
D2: {
onEvents: [],
offEvents: [],
changeEvents: [],
on: ()=>{
o.pinEvents.D2.onEvents.map((v)=>{
v();
});
},
off: ()=>{
o.pinEvents.D2.offEvents.map((v)=>{
v();
});
},
change: ()=>{
o.pinEvents.D2.changeEvents.map((v)=>{
v();
});
}
},
D3: {
onEvents: [],
offEvents: [],
changeEvents: [],
on: ()=>{
o.pinEvents.D3.onEvents.map((v)=>{
v();
});
},
off: ()=>{
o.pinEvents.D3.offEvents.map((v)=>{
v();
});
},
change: ()=>{
o.pinEvents.D3.changeEvents.map((v)=>{
v();
});
}
},
D4: {
onEvents: [],
offEvents: [],
changeEvents: [],
on: ()=>{
o.pinEvents.D4.onEvents.map((v)=>{
v();
});
},
off: ()=>{
o.pinEvents.D4.offEvents.map((v)=>{
v();
});
},
change: ()=>{
o.pinEvents.D4.changeEvents.map((v)=>{
v();
});
}
},
D5: {
onEvents: [],
offEvents: [],
changeEvents: [],
on: ()=>{
o.pinEvents.D5.onEvents.map((v)=>{
v();
});
},
off: ()=>{
o.pinEvents.D5.offEvents.map((v)=>{
v();
});
},
change: ()=>{
o.pinEvents.D5.changeEvents.map((v)=>{
v();
});
}
},
D6: {
onEvents: [],
offEvents: [],
changeEvents: [],
on: ()=>{
o.pinEvents.D6.onEvents.map((v)=>{
v();
});
},
off: ()=>{
o.pinEvents.D6.offEvents.map((v)=>{
v();
});
},
change: ()=>{
o.pinEvents.D6.changeEvents.map((v)=>{
v();
});
}
},
D7: {
onEvents: [],
offEvents: [],
changeEvents: [],
on: ()=>{
o.pinEvents.D7.onEvents.map((v)=>{
v();
});
},
off: ()=>{
o.pinEvents.D7.offEvents.map((v)=>{
v();
});
},
change: ()=>{
o.pinEvents.D7.changeEvents.map((v)=>{
v();
});
}
},
D8: {
onEvents: [],
offEvents: [],
changeEvents: [],
on: ()=>{
o.pinEvents.D8.onEvents.map((v)=>{
v();
});
},
off: ()=>{
o.pinEvents.D8.offEvents.map((v)=>{
v();
});
},
change: ()=>{
o.pinEvents.D8.changeEvents.map((v)=>{
v();
});
}
}
}
};
/* merge paras */
@ -521,7 +697,19 @@ var wiot_client = function (o_params) {
checkStatus();
if (o.LastConnectTime + o.errDelayTime > Date.parse(new Date())) {
o.isConnected = true;
for(var i = 1; i <= 8; i ++){
var s = 'D' + i;
if(o.fData[s] != o.data[s]){
o.pinEvents[s].change();
if(o.data[s] == 0){
o.pinEvents[s].off();
}else{
o.pinEvents[s].on();
}
}
}
http_connected_callback();
o.fData = o.data;
return;
}
ping.promise.probe(o.ip, {
@ -649,11 +837,6 @@ var wiot_led = (obj, pin) => {
return;
},
setBreath: (status = [], time = []) => {
/*var t_t = time[time.length - 1];
for(var t = time.length - 1; t > 0; t --){
time[t] = time[t - 1];
}
time[0] = t_t;*/
o.t_interval = setInterval(()=>{
var totalTime = 0;
for(var i = 0; i < status.length; i ++){
@ -676,13 +859,11 @@ var wiot_led = (obj, pin) => {
time[t] = time[t - 1];
}
time[0] = t_t;
o.t_interval = setInterval(()=>{
var totalTime = 0;
for(var i = 0; i < status.length; i ++){
totalTime += time[i];
setTimeout((i)=>{
console.log(i);
o.MCU.write(o.pin, status[i]);
}, totalTime, i);
}
@ -700,6 +881,34 @@ var wiot_led = (obj, pin) => {
return o;
};
/* pir */
var wiot_pir = (obj, pin) => {
var o = {
MCU: obj,
pin: pin,
getStatus: () => {
return o.MCU.read(o.pin);
},
on: (event, handler = ()=>{}) => {
if(event == "detected"){
o.MCU.pinOn(o.pin, "on", handler);
}
if(event == "undetected"){
o.MCU.pinOn(o.pin, "off", handler);
}
if(event == "change"){
o.MCU.pinOn(o.pin, "change", handler);
}
}
};
return o;
};
/* exports */
exports.HIGH = 255;
exports.LOW = 0;
@ -719,4 +928,5 @@ exports.client = wiot_client;
exports.loop = wiot_loop;
exports.begin = wiot_begin;
exports.led = wiot_led;
exports.led = wiot_led;
exports.pir = wiot_pir;
Loading…
Cancel
Save