编辑:看起来串口接受一个可选的解析器
,它使用一个事件发射器
和原始缓冲区:
var myParser = function(emitter, buffer) {
if(buffer.toString("utf8", 0, 3) === "foo")
emitter.emit("foo", buffer);
else
emitter.emit("data", buffer);
};
var serialport = new SerialPort("/dev/foo", { parser: myParser });
serialport.on("foo", function(data) {
});
更新:显然,您需要缓冲接收到的数据,以某种方式对其进行处理等,但只有您知道要期望什么数据。您可以查看串行端口的readline解析器作为介绍。
(点击链接)
没有测试它,我认为这是更好的方法,但我将保留我的初始解决方案如下。
您可以使用代理来实现此操作:
var events = require('events');
var util = require('util');
var SerialProxy = function(serialport){
events.EventEmitter.call(this);
var self = this;
serialport.on("data", function(data) {
var prefix = data.toString("utf8", 0, 3);
if(prefix === "foo")
self.emit("foo", data.toString("utf8", 3));
else if(prefix === "bar")
self.emit("bar", data.toString("utf8", 3));
else
self.emit("data", data.toString("utf8"));
});
};
util.inherits(SerialProxy, events.EventEmitter);
使用方法:
var serialProxy = new SerialProxy(serialport);
serialProxy.on("foo", function(data) {
});
serialProxy.on("bar", function(data) {
});
serialProxy.on("data", function(data) {
});
buffer.toString('utf8', 0, 3)
来操作Buffer
。请参阅node.js缓冲区文档。 - Linus Thiel/dev/urandom
作为“串行端口”,因为我没有一个...),它可以工作。你真的指定它为var serialport = new SerialPort("/dev/foo", { parser: myParser });
吗? - Linus ThielsetInterval( function(){ serialPort1.write("footest"); //console.log("msg sent"); },2000);`
- htown0724082myParser
,或者将其声明为一个函数:function myParser(emitter, buffer) { ... }
。 - Linus Thiel