nodejs中的异步覆盆子pi gpio事件

jan*_*mon 24 node.js raspberry-pi

我将一个按钮连接到Raspberry Pi GPIO端口:

http://adafruit.com/products/801

PI-GPIO节点的js模块只允许拉动当前状态而不是等待状态变化:

gpio.read(16, function(err, value) {
    if(err) throw err;
    console.log(value);    // The current state of the pin
});
Run Code Online (Sandbox Code Playgroud)

有没有任何异步绑定事件的解决方案?

在这个例子中,每当按下按钮时都是如此.

小智 11

我建议使用名为onoff的模块.

它能够观察一个值文件,同时不会在间隔轮询中对cpu征税.

我用node.js制作了一个小测试应用程序,用它来试用LED和按钮,你可以在这里查看.


Rus*_*rry 10

遗憾的是,使用硬件GPIO时没有生成任何事件.您可以使用发射器创建事件,并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
Run Code Online (Sandbox Code Playgroud)

您可以根据需要调整计时器.我认为50ms是一个很好的数字,因为如果它更快,人眼不可能发现差异.