0

OS X のノードで実行し、node-serialportを使用して Arduino と通信しようとしています。Arduino IDE のシリアル モニタまたは OS X ユーティリティSerialToolsを使用すると、Arduino へのすべての通信が期待どおりに機能します。ただし、ノードアプリを実行しているだけで、node-serialport は接続が成功したことを通知しますが、通信が得られません。最初に Arduino IDE のシリアル モニターまたは SerialPorts を使用して arduino に接続し、ノード アプリを実行すると、ノード アプリはノード シリアルポートを使用してデータを正常に送受信します。

私はシリアル通信に精通していませんが、他のシリアルユーティリティは接続を適切に開始できるようです (これは node-serialport で利用できます) が、node-serialport は単独では接続できません。

完全にすべての接続情報を取得して、ユーティリティの成功した接続を node-serialports の非動作接続と比較できる方法はありますか?

なぜこれが起こっているのかについての他のアイデアはありますか?

4

1 に答える 1

0

実用的な解決策がありますが、残念ながら完全な説明ではありません。DTR/RTS が FTDI ベースの Arduino ボードに送信された後に何が起こっているかなど、いくつかの関連する問題を確認します。、ノード アプリを再起動するだけで (別のシリアル接続アプリを必要とするのではなく)、ノードがシリアル ポート経由で通信できるようになると判断しました。私は私の深さを超えていますが、最初にRTS接続を確立するとarduinoが再起動し、それが発生した後にのみノードシリアルポートが接続を介して通信できると思われます。

私の回避策は、2番目のシリアルポート接続を試みる前にArduinoをリセットする時間を与えることです。

var firstConnect = true;
serialPort.open(function (error) { 
    if (firstConnect){
        firstConnect = false;
        //First connection, letting Arduino reset
        setTimeout(function(){serialPort.open()},4000)
    } else {
        //Second connection, which will work
        serialPort.on('data', function(data) {
            //data parsing function
            //...
        }
    }
});
于 2015-04-19T23:12:59.493 に答える