使用Node-XBee和Node-SerialPort了解来自XBee的串行数据

时间:2014-02-22 09:13:19

标签: node.js arduino xbee node-serialport node-xbee

以下代码中使用

node-serialportnode-xbee从路由器AT配置中的XBee Series 2读取传入的XBee帧。电位计连接到XBee的引脚20 AD0模拟输入引脚。所有4个模拟引脚AD0AD1AD2AD3均已启用,只有AD1与某些内容相关联。

您如何解释收到的data中的frame_object数组?这里显然是趋势,当0V被馈送到XBee时,我们收到以元素data结尾的数组0, 0, 2, 14, 2, 8, 2, 15。当3.3V馈入XBee时,data数组以元素3, 255, 3, 255, 3, 255, 3, 255结束。

如何将这些原始值转换为更有意义的值? 3, 255看起来像一对表示3.3V的值?但是我们如何从3, 255获得电压读数?

读取串口数据

var SerialPort = require('serialport').SerialPort;
var xbee_api = require('xbee-api');

var C = xbee_api.constants;

var xbeeAPI = new xbee_api.XBeeAPI({
  api_mode: 1
});

var serialport = new SerialPort("/dev/cu.usbserial-A702NY8S", {
  baudrate: 9600,
  parser: xbeeAPI.rawParser()
});

xbeeAPI.on("frame_object", function(frame) {
  console.log("OBJ> "+util.inspect(frame));
});

当XBee引脚馈入0V时,XBee帧

OBJ> { type: 145,
  remote64: '0013a20040b19213',
  remote16: '56bc',
  receiveOptions: 232,
  data: [ 232, 0, 146, 193, 5, 1, 1, 0, 0, 15, 0, 0, 2, 14, 2, 8, 2, 15 ] }

OBJ> { type: 145,
  remote64: '0013a20040b19213',
  remote16: '56bc',
  receiveOptions: 232,
  data: [ 232, 0, 146, 193, 5, 1, 1, 0, 0, 15, 0, 0, 2, 16, 2, 14, 2, 14 ] }

OBJ> { type: 145,
  remote64: '0013a20040b19213',
  remote16: '56bc',
  receiveOptions: 232,
  data: [ 232, 0, 146, 193, 5, 1, 1, 0, 0, 15, 0, 0, 2, 17, 2, 11, 2, 9 ] }

当XBee引脚馈入3.3V时,XBee帧

OBJ> { type: 145,
  remote64: '0013a20040b19213',
  remote16: '56bc',
  receiveOptions: 232,
  data: [ 232, 0, 146, 193, 5, 1, 1, 0, 0, 15, 3, 255, 3, 255, 3, 255, 3, 255 ] }

OBJ> { type: 145,
  remote64: '0013a20040b19213',
  remote16: '56bc',
  receiveOptions: 232,
  data: [ 232, 0, 146, 193, 5, 1, 1, 0, 0, 15, 3, 255, 3, 255, 3, 255, 3, 255 ] }

OBJ> { type: 145,
  remote64: '0013a20040b19213',
  remote16: '56bc',
  receiveOptions: 232,
  data: [ 232, 0, 146, 193, 5, 1, 1, 0, 0, 15, 3, 255, 3, 255, 3, 255, 3, 255 ] }

2 个答案:

答案 0 :(得分:2)

查看文档以了解ATIS响应的格式。

标头字节包括帧的端点(232 = 0xE8)和簇(193,5 = 0xC105)。我不确定输入样本前的0,145和额外1。我认为5, 1之后的字节解码如下:

以8位样本计数(0x01)开始。

然后读取已启用的数字输入(0x0000)。

然后对启用的模拟输入(0x0F)进行8位读取。

如果有任何已启用的数字输入,则所有数字读数都有16位值。

四个模拟输入跟随(3, 255 = 0x03FF),它们是一个缩放的10位值。

reference voltage * reading / 0x03FF

因此,在您的情况下,3.3V * 0x03FF / 0x03FF = 3.3V

答案 1 :(得分:0)

要了解您可以执行以下操作的数据

 xbeeAPI.on("frame_object", function (frame) {
             console.log("OBJ> " + frame);
             console.log("OBJ> " + util.inspect(frame));
             console.log("Data> " + util.inspect(frame.data.toString()));