node.js 串口模块事件类型

标签 node.js serial-port

是否可以按照socket.io允许的方式在传输数据时声明一个事件类型。目前用串口写的是:

serialPort.write("OMG IT WORKS\r");

接收为:

serialPort.on("data", function (data) {
    foo(data);
});

我想传输一些不同的事件,例如“位置更新”、“数据”、“时间同步”等

例如 serialPort.emit("positionUpdate", slavePosition);

谢谢

最佳答案

编辑:似乎serialport接受一个可选的 parser,它接受一个 EventEmitter 和一个原始缓冲区:

var myParser = function(emitter, buffer) {
  // Inspect buffer, emit on emitter:
  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) {
  // Do stuff
});

更新:显然,您将需要缓冲传入的数据,以某种方式处理数据等,但只有您知道预期的数据。你可以看看serialport's readline parser作为介绍。

未经测试,我认为这是更好的方法,但我在下面留下了我的初步解决方案。

您可以使用代理来做到这一点:

var events = require('events');
var util = require('util');

var SerialProxy = function(serialport){
  events.EventEmitter.call(this);
  var self = this;
  serialport.on("data", function(data) {
    // Inspect data to see which event to emit
    // data is a Buffer object
    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) {
  // ...
});

关于node.js 串口模块事件类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9499854/

相关文章:

http - Node.JS 中的基本 HTTP 身份验证?

c - linux设置串口中断

python - 当另一个程序正在使用串行端口时,我如何连接并向串行端口发送命令?

winapi - RS232(Com 端口)RTS/CTS/DTR/DSR 的低级控制可能吗?

mysql - 书架级联删除

node.js - 如何在 node/express 中发送自定义 http 状态消息?

c++ - 将 char[] 附加到具有特定长度的 std::string

c - 将 ctrl-z 发送到 C 中的串行端口(GSM SMS)

javascript - “导入”语句在呈现的 HTML 中的脚本中不起作用

mysql - Node 应用程序无法连接到远程 MySQL 数据库