我是Node.JS和Arduino的新手。我有一个Arduino设置和几个传感器。我正在用Arduino读取温度和湿度值。我的串口监视器输出如下:
Humiditiy (%): 44.00
Temperature (Celcius): 26.00
Temperature (Kelvin): 299.00
Temperature (Fahrenheit): 58.00
Gas Value: 341
Humiditiy (%): 44.00
Temperature (Celcius): 26.00
Temperature (Kelvin): 299.00
Temperature (Fahrenheit): 58.00
Gas Value: 341
我想要三件事:
我尝试使用此NodeJS文件从串行监视器中提取值,并将输出放到控制台。
// Setup basic express server
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
// Routing
var SerialPort = require("serialport").SerialPort
var serialPort = new SerialPort("/dev/ttyACM0", {
baudrate:115200
}, false); // this is the openImmediately flag [default is true]
serialPort.open(function () {
serialPort.on('data', function(data) {
console.log('Receiving data' + data);
});
});
但是终端的输出很奇怪,但这是我得到的最佳输出。
Receiving dataty (%)
Receiving data: 44.00
Temperature (Celcius): 26.00
Temperature
Receiving data(Kelvin): 299.00
Temperature (Fahrenheit): 58.00
Receiving data
Receiving dataz
Receiving dataas Value: 380
现在我正在研究如何将Mongo与串口一起使用。任何帮助将不胜感激。
答案 0 :(得分:1)
我找到了问题的答案。
上面发布的程序的实现方式,serialport将尽可能快地发送'数据'事件。在触发“数据”事件之前,它不会等待接收完整的文本行,这是我认为您期望的。如果Arduino草图以115200波特率尽快输出信息,那么Node.js程序在尝试开始读取时会遇到困难。也许这就是问题所在。 Node.js程序和Arduino应该协调他们的沟通。
串行端口中有一个逐行概念的文本读取,称为解析器。这也解决了我的问题。
OVERLAPPED
更改这样的代码是有效的,因为现在它正在尝试逐行阅读。
答案 1 :(得分:0)
以下代码适用于最新的串行端口libray更改
var serialport = require('serialport');
serialport.list(function (err, ports) {
ports.forEach(function(port) {
console.log(port.comName);
});
});
var portName="COM1";
var myPort = new serialport(portName, 9600);
var Readline = serialport.parsers.Readline; // make instance of Readline parser
var parser = new Readline(); // make a new parser to read ASCII lines
myPort.pipe(parser); // pipe the serial stream to the parser
myPort.on('open', showPortOpen);
parser.on('data', readSerialData);
function showPortOpen(){
console.log("Port opened");
}
function readSerialData(data){
console.log("data received "+data);
}