node-serialport
和node-xbee
从路由器AT配置中的XBee Series 2读取传入的XBee帧。电位计连接到XBee的引脚20 AD0
模拟输入引脚。所有4个模拟引脚AD0
,AD1
,AD2
,AD3
均已启用,只有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 ] }
答案 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()));