MongoDB保存一个正确的错误

时间:2018-01-07 21:05:06

标签: node.js mongodb mongoose arduino node-serialport

这是我的第一个使用这些技术的项目,英语不是我的母语,原谅我犯了所有错误。

我正在制作实时Arduino NodeJS MongoDB项目。我的主要目标是从arduino获取湿度,温度和气体值。将它们存储在Mongodb中并在网站上发布这些值(localhost for now)。这是我的NodeJS文件。情侣变量是土耳其语,但我认为它并不重要。

// Express bir server kurduk
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
var port = process.env.PORT || 8000;
// 8000. Porttan bağlantıyı sağlıyoruz
// mongoose kullandığımız veri tabanı kısmımız
var mongoose = require('mongoose');
var promise = mongoose.connect('mongodb://localhost/deneme2', {
  useMongoClient: true,

});
promise.then(function(db) {
console.log('database e baglanildi')

});

// mongoose şeması tanımlaması
var Schema = mongoose.Schema;

var Veri = new Schema({
    nem:  String,
    sicaklik: String,
    sicaklik2: String,
    sicaklik3: String,
    gas: String,
    body:   String,
    date: { type: Date,default: Date.now }});
var Veriler = mongoose.model('veri', Veri);

// server dinleniyor fonksiyonu
server.listen(port, function () {
    console.log('Server listening at port %d', port);
});

// yönlendirme

app.use(express.static(__dirname + '/public'));

var SerialPort = require("serialport").SerialPort
var serialPort = new SerialPort("/dev/ttyACM0", { //Arduino bağlantısını sağladığımız USB portumuz
    autoOpen: false,
    parser: SerialPort.parsers.readline('\r\n'),
    baudrate:115200 // bitrate'imiz
}); 
//serialporttan okuyan ve datayı ekranımıza yazan fonksiyon
serialPort.open(function () {
    console.log('NodeJS Arduino Projemiz Hazır');
    serialPort.on('data', function(data) {
        console.log(data);
        io.sockets.emit('message', data.toString());
        var test=data.toString();
        var temp=test.split(",");
        var veritabani=new Veriler({
          nem: temp[0],
          sicaklik: temp[1],
          sicaklik2: temp[2],
          sicaklik3: temp[3],
          gas: temp[4]
        }); 
        veritabani.save(function(err){
         if(err) throw err
        });
});   

   }); 


app.get('/', function (req, res) {
    res.sendFile(__dirname + '/index.html');
});

io.on('connection', function (socket) {

});

一切都很好。我这样从Arduino获取数据31.0,24.0,297.0,185 我将它保存到数据库,但这是第一个错误的对象

{
    "_id" : ObjectId("5a5285dd36e0c007967c3f66"),
    "nem" : "",
    "date" : ISODate("2018-01-07T20:41:01.168Z"),
    "__v" : 0
}

这是第二个正确的对象。

{
    "_id" : ObjectId("5a5285dd36e0c007967c3f67"),
    "nem" : "32.0",
    "sicaklik" : "24.0",
    "sicaklik2" : "297.0",
    "sicaklik3" : "56.0",
    "gas" : "228",
    "date" : ISODate("2018-01-07T20:41:01.193Z"),
    "__v" : 0
}

它继续下去,就像这样一个正确的错误。我使用800毫秒延迟,但我会尝试改变延迟。我不知道是什么问题。我的html文件:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>Ev Otomasyonu</title>
    <script src="/socket.io/socket.io.js"></script>
    <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
    <script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
    <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
    <script>
        var socket = io.connect('http://localhost');
        socket.on('message',function(data){
            test=data.toString(); 
            temp=test.split(',');
            $('#nem').temp[0];
            $('#sicaklik').text(temp[1]);
            $('#sicaklik2').text(temp[2]);
            $('#sicaklik3').text(temp[3]);
            $('#gas').text(temp[4]);
        });
    </script>
</head>
<body>
<div>
    <h1>Nem</h1>
    <h1 id='nem'></h1>
</div>

<div>
    <h1>Celcius</h1>
    <h1 id='sicaklik'></h1>
</div>
<div>
    <h1>Fahrenheit</h1>
    <h1 id='sicaklik2'></h1>
</div>
<div>
    <h1>Kelvin</h1>
    <h1 id='sicaklik3'></h1>
</div>
<div>
    <h1>Gaz</h1>
    <h1 id='gas'></h1>
</div>

</body>
</html>

只是在写标题时,我没有给出我的价值观。我假设它是因为之前保存的数据库中的第一个对象。

1 个答案:

答案 0 :(得分:0)

根据serialport package中的示例代码,您正在使用&#39;流动模式&#39;这可以引入这种行为。您是否尝试使用非流动模式?

参见示例代码:

// Switches the port into "flowing mode"
port.on('data', function (data) {
  console.log('Data:', data);
});

// Read data that is available but keep the stream from entering "flowing mode"
port.on('readable', function () {
  console.log('Data:', port.read());
});