Понимание последовательных данных из XBee с использованием Node-XBee и Node-SerialPort
node-serialport
а также node-xbee
используются в следующем коде для чтения входящих кадров XBee из XBee Series 2 в конфигурации Router AT. Потенциометр подключен к контакту 20 AD0
аналоговый входной вывод XBee. Все 4 аналоговых пина AD0
, AD1
, AD2
, AD3
включены, только AD1
связано с чем-то.
Как вы интерпретируете data
массив в frame_object
получено? Очевидно, здесь есть тенденция, когда на XBee подается 0V, мы получаем массив data
заканчивая элементами 0, 0, 2, 14, 2, 8, 2, 15
, Когда на XBee подается напряжение 3,3 В, data
массив заканчивается элементами 3, 255, 3, 255, 3, 255, 3, 255
,
Как вы преобразуете эти необработанные значения во что-то более значимое? 3, 255
выглядит как пара значений, которые обозначают 3,3 В? Но как мы можем получить от 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, когда на контакт XBee подается 0 В
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, когда на контакт XBee подается напряжение 3,3 В
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 ответа
Проверьте документацию на формат ATIS
ответ.
Байты заголовка включают в себя конечную точку (232 = 0xE8) и кластер (193, 5 = 0xC105) для кадра. Я не уверен насчет 0, 145 и лишних 1 до входной выборки. Я думаю, что байты после 5, 1
расшифровать следующим образом:
Начинается с 8-битного отсчета выборки (0x01).
Затем 16-разрядное чтение разрешенных цифровых входов (0x0000).
Затем 8-битное чтение разрешенных аналоговых входов (0x0F).
Если бы были какие-либо разрешенные цифровые входы, у вас было бы 16-битное значение для всех цифровых показаний.
Четыре аналоговых входа следуют (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()));