2017-12-19 26 views
0

私はNode.JSとArduinoを初めて使用しています。私はそれにArduinoのセットアップといくつかのセンサーがあります。私はArduinoで温度と湿度の値を読み取っています。このような私のシリアルモニタ出力:NodeJSシリアルポートの値の読み取りの問題

  1. NodeJSを使用し、シリアルモニタ出力を引っ張っ:

    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 
    

    が、私は3つのことをしたいです。

  2. MongoDBを使用した値の保存
  3. 作成したWebサイトへの値の送信

この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を使用する方法について作業しています。どんな助けもありがとう。

答えて

0

私の問題の答えが見つかりました。

上記のプログラムの実装方法によって、シリアルポートは「データ」イベントを頻繁にできるだけ早く発生させます。それは私があなたが期待していると思っている 'データ'イベントを発射する前に、完全なテキスト行を受け取るのを待つことはありません。 Arduinoのスケッチが115200ボーでできるだけ早く情報を出力していれば、Node.jsプログラムは読み込みを開始しようとすると困難になります。おそらくこれが問題です。 Node.jsのプログラムとArduinoのは、おそらく彼らの通信を調整する必要があります。

パーサと呼ばれるシリアルポートでのラインのコンセプトにより、テキスト読み上げラインがあります。それで私の問題も解決しました。今では行ずつ読み込むしようとしているので、このようなコードを変更する

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

で働いていました。

関連する問題