24

ボタンを 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
});

イベントを非同期にバインドするソリューションはありますか?

この例では、これはボタンが押されるたびになります。

4

4 に答える 4

11

onoffというモジュールを使用することをお勧めします。

一定間隔でのポーリングで CPU に負担をかけずに、値ファイルを監視する機能があります。

node.js を使用して小さなテストアプリを作成し、LED とボタンを試してみました。こちらで確認できます。

于 2013-05-24T06:32:54.237 に答える
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

タイマーを要件に合わせて調整できます。50msの方が速いと人間の目では違いを検出できないので、50msが良い数値だと思います。

于 2013-01-21T15:44:31.890 に答える
3

私はちょうどこのモジュールに出くわしました

https://github.com/EnotionZ/GpiO

詳しくは見ていませんが、バックグラウンドで setInterval メソッドを使用しているようです。

于 2013-01-21T17:24:31.047 に答える
0

余談ですが、Espruinoと呼ばれる node.js に非常によく似た (ただし、はるかに削減された) プロジェクトがあります。

これは Raspberry Pi (および多くの低電力 ARM マイクロコントローラーも) で実行され、HTTP をサポートし、必要な方法で正確に動作するsetWatchと呼ばれる関数を備えています。

于 2013-02-07T10:35:42.367 に答える