node.js - onoff - nodejs raspberry
Async raspberry pi gpio eventos en nodejs (4)
Conecté un botón a los puertos GPIO de la Raspberry Pi:
El módulo pi-gpio node js solo permite extraer el estado actual pero no esperar un cambio de estado:
gpio.read(16, function(err, value) {
if(err) throw err;
console.log(value); // The current state of the pin
});
¿Hay alguna solución para enlazar eventos de forma asíncrona?
En este ejemplo, esto sería cada vez que se presiona el botón.
Acabo de encontrarme con este modulo
https://github.com/EnotionZ/GpiO
No lo he analizado en profundidad, pero parece que utiliza el método setInterval en segundo plano.
Como nota al margen, hay un proyecto muy similar a node.js (sin embargo, mucho más reducido) llamado Espruino .
Esto se ejecuta en Raspberry Pi (y también en muchos microcontroladores ARM de baja potencia), es compatible con HTTP y tiene una función llamada setWatch que se comporta exactamente de la manera que usted necesita.
desafortunadamente no se genera ningún evento al usar el hardware GPIO. Puede crear un evento utilizando un emisor y setInterval
para crear un temporizador que verifique el estado de vez en cuando y luego emita un evento a su aplicación.
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
Puede ajustar el temporizador a sus necesidades. Creo que 50ms es un buen número ya que no es posible que el ojo humano detecte la diferencia si es más rápido.