0

どちらのツールもこちらから入手できます: https://github.com/ninjablocks/433Utils/tree/master/RPi_utils

433mhz デバイスを管理するためのシンプルなインターフェイスが本当に必要です。しかし、私は良いものを見つけることができません。

そのため、nodejs の RCSwitch クラスへのラッパーを作成しようと、1 日中作業を続けてきました。send[code] - receive[callback[code]] の 2 つの単純なメソッドを使用

RCSwitch クラスの新しいインスタンスを作成しようとすると、このエラーが発生します。

node: symbol lookup error:
/root/nodemodule/example/build/Release/kaku.node: 
undefined symbol: _ZN8RCSwitchC1Ev

node-gyp で完全にコンパイルされますが、ノードを実行すると失敗します。

次に、exec を使用して、コードで sendCommand を実行します。(醜い私は知っている)

そして、RFSniffer を次のように動作させようとしました。

  1. ./RFSniffer > rfsniffer.log
  2. .次に、rfsniffer.log を tail -f します。

しかし、RFSniffer は私に何のデータも与えてくれません。

したがって、私の質問は、RFsniffer を tail -f で動作させるのを手伝ってくれる人はいますか? または、nodejs の c++ アドオンを修正するのを手伝ってくれる人がいるかもしれません:)

ラッパーコードは次のとおりです。

#include "RCSwitch.h"
#include <node.h>
#include <v8.h>

using namespace v8;

Handle<Value> CodeSend(const Arguments& args) {
  HandleScope scope;

  int PIN = 0;
    RCSwitch mySwitch = RCSwitch();
    mySwitch.enableTransmit(PIN);

    mySwitch.send(args[0]->IntegerValue(), 24);

  return scope.Close(True());
}

Handle<Value> CodeRecieve(const Arguments& args) {
    HandleScope scope;
    // Entry check
    if (args.Length() != 2) {
        ThrowException(Exception::TypeError(String::New("Wrong number of arguments")));
        return scope.Close(Undefined());
    }

    Local<String> name= args[0]->ToString();
    Local<String> msg = name;
    Local<Function> cb = Local<Function>::Cast(args[1]);

    const unsigned argc = 1;
    Local<Value> argv[argc] = { Local<Value>::New(msg) };
    cb->Call(Context::GetCurrent()->Global(), argc, argv);

    return scope.Close(Undefined());
}

extern "C" {
  static void init(Handle<Object> target) {
    if( wiringPiSetup() == -1 ) {
        ThrowException( Exception::TypeError( String::New( "rcswitch: GPIO initialization failed" ) ) );
        return;
    }

    NODE_SET_METHOD(target, "Send", CodeSend);
    NODE_SET_METHOD(target, "Recieve", CodeRecieve);


  }
  NODE_MODULE(kaku, init);
}

nodejsコード:

var addon = require('./build/Release/kaku');

console.log(addon.Send(1234));

addon.Recieve(1234, function (val) {
    console.log(val);
});
4

1 に答える 1

0

./RFSniffer > rfsniffer.log私はあなたと同じ問題を抱えていましたが、動作しない理由は、RFSniffer コードの printf() 関数がフラッシュされていないためです。

このソースコードで試してください:

/*
  RF_Sniffer

  Hacked from http://code.google.com/p/rc-switch/

  by @justy to provide a handy RF code sniffer
*/

#include "RCSwitch.h"
#include <stdlib.h>
#include <stdio.h>

RCSwitch mySwitch;

int main(int argc, char *argv[]) {

     // This pin is not the first pin on the RPi GPIO header!
     // Consult https://projects.drogon.net/raspberry-pi/wiringpi/pins/
     // for more information.
     int PIN = 2;

     if(wiringPiSetup() == -1)
       return 0;

     mySwitch = RCSwitch();
     mySwitch.enableReceive(PIN);  // Receiver on inerrupt 0 => that is pin #2

     while(1) {

      if (mySwitch.available()) {

        int value = mySwitch.getReceivedValue();

        if (value == 0) {
          printf("Unknown encoding");
        } else {
          printf("Received %i\n", mySwitch.getReceivedValue() );
        }

        fflush(stdout); // Add this line to flush the previous printf()
        mySwitch.resetAvailable();

      }

  }

  exit(0);

}

また、sudo パーミッションで RFSniffer ツールを実行すると、次のように実行できます。

sudo ./RFSniffer | sudo tee rfsniffer.log

また

sudo sh -c './RFSniffer >> rfsniffer.log'

于 2015-06-14T20:59:53.893 に答える