Подтвердить что ты не робот

Асинхронные малиновые события pi gpio в узлах

Я подключил кнопку к портам PIP GPIO для малины:

http://adafruit.com/products/801

Модуль pi-gpio node позволяет только вывести текущий статус, но не ждать для изменения состояния:

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

Есть ли какое-либо решение для асинхронного связывания событий?

В этом примере это будет всякий раз, когда нажимается кнопка.

4b9b3361

Ответ 1

Я бы предложил использовать модуль под названием onoff.

Он имеет возможность смотреть файл значений, не облагая налогом процессор с интервалом опроса.

Я сделал небольшое тестовое приложение с node.js, чтобы опробовать светодиоды и кнопки с ним, вы можете проверить здесь здесь.

Ответ 2

К сожалению, при использовании аппаратного 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

Вы можете настроить таймер на свои требования. Я думаю, что 50 мс - это хорошее число, так как человеческому глазу невозможно обнаружить разницу, если он быстрее.

Ответ 3

Я только что перешел к этому модулю

https://github.com/EnotionZ/GpiO

Я не смотрел в глубину, но кажется, что он использует метод setInterval в фоновом режиме.

Ответ 4

В стороне, есть проект, очень похожий на node.js(но гораздо более сокращенный), называемый Espruino.

Это работает на Raspberry Pi (и на многих микроконтроллерах с низким энергопотреблением ARM), поддерживает HTTP и имеет функцию setWatch, которая ведет себя точно так, как вам нужно.