使用Node-XBee和Node-SerialPort从XBee中了解串行数据

在以下代码中使用node-serialportnode-xbee从Router ATconfiguration中的XBee系列2中读取传入的XBee帧。 电位器连接到XBee的引脚20 AD0模拟input引脚。 所有4个模拟引脚AD0AD1AD2AD3被使能,只有AD1被连接到某个东西。

你如何解释frame_objectdata数组? 这里显然是一个趋势,当0V被馈送到XBee时,我们收到一个以元素0,0,2,14,2,8,2,15结束的数组data 。 当3.3V供给XBee时, dataarrays以元素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引脚input0V时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引脚input3.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 ] } 

检查ATIS响应格式的文档。

头字节包括帧的端点(232 = 0xE8)和簇(193,5 = 0xC105)。 input样本之前,我不确定0,145和1。 我觉得5, 1之后的字节解码如下:

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

然后读取已启用的数字input(0x0000)的16位数据。

然后读取一个使能的模拟input(0x0F)的8位数据。

如果有任何使能的数字input,则对于所有的数字读数将有一个16位的值。

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

 reference voltage * reading / 0x03FF 

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

要了解数据,你可以做到以下几点

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