分离从节点串口获取的数据
Separating data obtained from node serial port
我正在使用 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);
});
我认为我应该使用数组,但我无法implement.Any 关于如何做到这一点的建议?
提前致谢!
你应该让Arduino告诉它正在发送什么样的数据,而不是
只有原始数据本身。例如:
Serial.print(F("temperature: "));
Serial.println(tempval);
Serial.print(F("moisture: "));
Serial.println(moistval);
然后您的 Node.js 代码可以将每一行解析为 name:value 对。你可以
通过让 Arduino 将该行格式化为 JSON.
来简化此解析
此外,如果您恰好同时拥有这两条数据
时间,然后您可以在同一行中发送它们。这可以使事情
稍微简单一点。 Arduino 方面:
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));
});
我正在使用 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);
});
我认为我应该使用数组,但我无法implement.Any 关于如何做到这一点的建议?
提前致谢!
你应该让Arduino告诉它正在发送什么样的数据,而不是 只有原始数据本身。例如:
Serial.print(F("temperature: "));
Serial.println(tempval);
Serial.print(F("moisture: "));
Serial.println(moistval);
然后您的 Node.js 代码可以将每一行解析为 name:value 对。你可以 通过让 Arduino 将该行格式化为 JSON.
来简化此解析此外,如果您恰好同时拥有这两条数据 时间,然后您可以在同一行中发送它们。这可以使事情 稍微简单一点。 Arduino 方面:
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));
});