2

node-serialportnode-xbee在以下代码中用于从路由器 AT 配置中的 XBee 系列 2 读取传入的 XBee 帧。一个电位器连接到AD0XBee 的 20 号模拟输入引脚。所有 4 个模拟引脚AD0, AD1, AD2,AD3均已启用,仅AD1连接到某物。

你如何解释接收到的data数组frame_object?这里显然有一个趋势,当 0V 输入 XBee 时,我们会收到一个data以 elements 结尾的数组0, 0, 2, 14, 2, 8, 2, 15。当 3.3V 被馈送到 XBee 时,data数组以 elements 结束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 ] }
4

2 回答 2

2

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

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

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

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

然后是启用的模拟输入 (0x0F) 的 8 位读数。

如果有任何启用的数字输入,那么所有数字读数都会有一个 16 位的值。

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

reference voltage * reading / 0x03FF

所以,在你的情况下,3.3V * 0x03FF / 0x03FF = 3.3V.

于 2014-02-27T17:36:54.343 回答
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()));
于 2016-11-18T15:49:47.553 回答