Понимание последовательных данных из 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()));
Другие вопросы по тегам