どちらのツールもこちらから入手できます: 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 を次のように動作させようとしました。
- ./RFSniffer > rfsniffer.log
- .次に、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);
});