nodejs中的asynchronous树莓派事件
我将一个button连接到树莓派GPIO端口:
pi-gio节点js模块只允许拉取当前状态,但不能等待状态改变:
gpio.read(16, function(err, value) { if(err) throw err; console.log(value); // The current state of the pin });
有没有解决schemeasynchronous绑定事件?
在这个例子中,只要按下button就可以了。
我build议使用名为onoff的模块。
它能够观察一个值文件,而不是通过轮询间歇性地对CPU进行赋税。
我用node.js做了一个小testing应用程序,用它来testingLED和button,你可以在这里查看 。
不幸的是,使用硬件GPIO时不会产生事件。 您可以通过使用发射器和setInterval
创build一个事件来创build一个定时器,每setInterval
检查一次状态,然后将事件发送给应用程序。
var ee = new process.EventEmitter(), buttonState; ee.on('stateChange', function(previousValue, value){ console.log('button state changed from', previousValue, 'to', value); }); setInterval(function(){ gpio.read(16, function(err, value) { if(err){ ee.emit('error', err); } else{ if(buttonState !== value){ var previousState = buttonState; buttonState = value; ee.emit('stateChange', previousState, value); } } }); }, 50); //check button state every 50ms
您可以调整计时器到您的要求。 我认为50ms是一个很好的数字,因为如果速度更快,人眼不可能检测到差异。
另外,还有一个与node.js非常相似的项目(不pipe更多的简化)叫做Espruino 。
它运行在Raspberry Pi(以及许多低功耗的ARM微控制器)上,支持HTTP,并且有一个名为setWatch的函数,其function与您所需要的完全一致。