首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能在数据解析器nodejs上显示两个字符串数组Esp8266

不能在数据解析器nodejs上显示两个字符串数组Esp8266
EN

Stack Overflow用户
提问于 2018-07-23 11:53:13
回答 3查看 285关注 0票数 8

我从ESP8266中测量数据,我存储在一个字符串数组中,我使用Node.js向JavaScript显示数据,但是我只是将数据作为一个数组而不是两个数组。

我的Arduino代码

代码语言:javascript
复制
...
int temp1, hum1, temp2, hum2;
...
void setup(){
serial.begin(9600);
serial1.begin(115200);
...
}``

void loop(){
...
float t1 = bme1.readTemperature();
float h1 = bme1.readHumidity();
float t2 = bme2.readTemperature();
float h2 = bme2.readHumidity();

temp1 = t1;
hum1 = h1;
temp2 = t2;
hum2 = h2;

getStrings();
delay(3000);
...
}

void getStrings(){
String measure1=" "; String measure2=" ";
  measure1 += temp1;
  measure1 += " ";
  measure1 += hum1;
  measure1 += " ";
  Serial.println(measure1);
  measure2 += temp2;
  measure2 += " ";
  measure2 += hum2;
  measure2 += " ";
  Serial.println(measure2);
}

我的串行监视器显示:

代码语言:javascript
复制
measure1: 12.34 23.45
measure2: 34.56 45.67

我的Node.js代码:

代码语言:javascript
复制
    var exs = require('express');
        var app = exs();
        var http = require('http').Server(app);
        var io = require('socket.io')(http);
        var port = require('serialport');
        var parsers = port.parsers;
        var parser = new parsers.Readline({delimiter:'\n'});
        var ports = new port("/dev/ttyUSB0", {baudRate:115200,parser:parser}, false);

        process.setMaxListeners(Infinity);
        ports.pipe(parser);
        ports.on('open', function(){
            console.log('portOpened');
            io.on('connection', function(socket){
                ports.on('data', function(data){
                console.log('data: '+data);
                    parser.on('data', function(data){
                    var result = data.split(" ");
                    var temp-1 = result[1]
                    var hum-1 = result[2]
                    var temp-2 = result[3]
                    var hum-2 = result[4];
                        io.sockets.emit('update', {
                            tmp_1:temp-1.toString()+' *C',
                            hum_1:hum-1.toString()+' %',
                            tmp_2:temp-2.toString()+' *C',
                            hum_2:hum-2.toString()+' %'
                        });
                    }); 
                });
            });
        });
        ...

当我调用npm start时,我只需要将所有数据作为一个数组日志:

代码语言:javascript
复制
data: 12.34 23.45 34.56 45.67

不是我想要的两个数组日志,如下所示:

字符串数组'measure1‘作为:

代码语言:javascript
复制
data1: 12.34 23.45

字符串数组'measure2‘作为:

代码语言:javascript
复制
data2: 34.56 45.67

数据解析器只有一个字符串数组,而不是两个字符串数组!

抱歉,我的英语不好。

EN

回答 3

Stack Overflow用户

发布于 2018-09-20 11:48:48

代码语言:javascript
复制
var hum-2 = result[2]

应该是

代码语言:javascript
复制
var hum-1 = result[2]

完整代码将是

代码语言:javascript
复制
ports.on('data', function(data){
console.log('data: '+data);
    parser.on('data', function(data){
    var result = data.split(" ");
    var temp-1 = result[1]
    var hum-1 = result[2]
    var temp-2 = result[3]
    var hum-2 = result[4];
    var data1 = temp-1+' '+hum-1;
    var data2 = temp-2+' '+hum-2;
    console.log('data1: '+data1);
    console.log('data2: '+data2);
        io.sockets.emit('update', {
            tmp_1:temp-1.toString()+' *C',
            hum_1:hum-1.toString()+' %',
            tmp_2:temp-2.toString()+' *C',
            hum_2:hum-2.toString()+' %'
        });
    }); 
});

现在,您将在两个不同的vars中获得数据。

票数 2
EN

Stack Overflow用户

发布于 2018-09-20 08:13:28

在启动下一个串行输出之前,确保将串行排除出缓冲区:

代码语言:javascript
复制
void getStrings(){
String measure1=" "; String measure2=" ";
  measure1 += temp1;
  measure1 += " ";
  measure1 += hum1;
  measure1 += " ";
  Serial.println(measure1);
  Serial.flush(); // FLUSH
  measure2 += temp2;
  measure2 += " ";
  measure2 += hum2;
  measure2 += " ";
  Serial.println(measure2);
  Serial.flush(); // FLUSH
}
票数 1
EN

Stack Overflow用户

发布于 2018-09-20 00:59:50

解析器没有在消息之间找到分隔符"\n“。

在您的arduino代码中添加行measure2 += "\n";

代码语言:javascript
复制
void getStrings(){
  String measure1=" "; String measure2=" ";
  measure1 += temp1;
  measure1 += " ";
  measure1 += hum1;
  measure1 += " ";
  Serial.println(measure1);
  measure2 += temp2;
  measure2 += " ";
  measure2 += hum2;
  measure2 += " ";
  measure2 += "\n";
  Serial.println(measure2);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51478168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档