nodejs中的asynchronous树莓派事件

我将一个button连接到树莓派GPIO端口:

http://adafruit.com/products/801

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是一个很好的数字,因为如果速度更快,人眼不可能检测到差异。

我刚刚穿过这个模子

https://github.com/EnotionZ/GpiO

我没有深入的看,但似乎它在后台使用setInterval方法。

另外,还有一个与node.js非常相似的项目(不pipe更多的简化)叫做Espruino 。

它运行在Raspberry Pi(以及许多低功耗的ARM微控制器)上,支持HTTP,并且有一个名为setWatch的函数,其function与您所需要的完全一致。