raspberry onoff nodejs node node.js raspberry-pi

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.


Yo sugeriría usar el módulo llamado onoff .

Tiene la capacidad de ver un archivo de valor sin afectar la CPU con sondeo en intervalos.

Hice una pequeña aplicación de prueba con node.js para probar leds y botones con ella, puedes verla here .


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.