Разделение данных, полученных с последовательного порта узла

Я использую Arduino для получения значений от разных датчиков и печати этих значений (например, температуры и влажности).

serial.println(tempval);
serial.println(moistval);

Я хочу разделить данные, которые я получаю от последовательного порта узла, чтобы я мог четко определить значения температуры и влажности в узле.

Вот мой код NodeJS:

var serialport = require("serialport");
var SerialPort = serialport.SerialPort;

var portName = process.argv[2];


var myPort = new SerialPort(portName,{
   baudRate:9600,
   parser: serialport.parsers.readline('\n')

});

myPort.on('data', function (data) {
  console.log('Data: ' + data);
});

Я думаю, что мне нужны массивы, но я не могу реализовать. Любые предложения о том, как я могу это сделать?

Заранее спасибо!


person Deant    schedule 24.04.2016    source источник


Ответы (1)


Вы должны попросить Arduino сообщить, какие данные он отправляет, а не только сами необработанные данные. Например:

Serial.print(F("temperature: "));
Serial.println(tempval);
Serial.print(F("moisture: "));
Serial.println(moistval);

Затем ваш код Node.js может анализировать каждую строку как пару имя:значение. Вы можете упростить этот синтаксический анализ, если Arduino отформатирует строку как JSON.

Кроме того, если у вас есть обе части данных, доступные одновременно, вы можете отправить их обе в одной строке. Это может сделать вещи немного проще. Сторона Ардуино:

Serial.print(F("{\"temperature\": "));
Serial.print(tempval);
Serial.print(F(", \"moisture\": "));
Serial.print(moistval);
Serial.println(F("}"));

Сторона Node.js:

myPort.on('data', function (data) {
  console.log(JSON.parse(data));
});
person Edgar Bonet    schedule 13.05.2016