首页 文章

NodeJS串口值读取问题

提问于
浏览
0

我是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并拉动串行监视器输出 .

  • 使用MongoDB存储值

  • 将值发送到我创建的网站 .

我尝试使用此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与串口一起使用 . 任何帮助将不胜感激 .

1 回答

  • 1

    我找到了问题的答案 .

    上面发布的程序的实现方式,serialport将尽可能快地发送“数据”事件 . 在触发“数据”事件之前,它不会等待接收完整的文本行,这是我认为您期望的 . 如果Arduino草图以115200波特率尽快输出信息,则Node.js程序在尝试开始读取时会遇到困难 . 也许这就是问题所在 . Node.js程序和Arduino应该协调他们的沟通 .

    串行端口中有一个逐行概念的文本读取,称为解析器 . 这也解决了我的问题 .

    var serialPort = new SerialPort("/dev/ttyACM0", {
        autoOpen: false,
        parser: SerialPort.parsers.readline('\n'),
        baudrate:115200
    });
    

    改变这样的代码是有效的,因为现在它试图逐行阅读 .

相关问题