[英]Cannot Display two String Array Esp8266 on data parser nodejs
我有從ESP8266測得的數據,這些數據存儲在一個字符串數組中,並使用Node.js顯示到JavaScript HTML,但我只是將數據作為一個數組而不是作為兩個數組來獲取。
我的Arduino代碼:
...
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);
}
我的串行監視器顯示:
measure1: 12.34 23.45
measure2: 34.56 45.67
我的Node.js代碼:
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
,我只是將所有數據作為一個數組日志獲取:
data: 12.34 23.45 34.56 45.67
不是我想要的兩個數組的日志,像這樣:
字符串數組“ measure1”為:
data1: 12.34 23.45
字符串數組“ measure2”為:
data2: 34.56 45.67
數據解析器只有一個字符串數組而不是兩個字符串數組!
對不起,我英語不好。
var hum-2 = result[2]
應該
var hum-1 = result[2]
完整的代碼將是
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()+' %'
});
});
});
現在,您將擁有兩個不同的變量中的數據。
在開始下一個串行輸出之前,請確保將串行刷新出緩沖區:
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
}
解析器在消息之間找不到分隔符“ \\ n”。
在您的arduino代碼中,添加一行measure2 += "\\n";
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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.