这是我的第一个使用这些技术的项目,英语不是我的母语,原谅我犯了所有错误。
我正在制作实时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>
只是在写标题时,我没有给出我的价值观。我假设它是因为之前保存的数据库中的第一个对象。
答案 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());
});