我正在使用用于node.js的serialport2库从arduino接收串行数据。这就像一个咒语,但PC运行节点时不时会由于EMI而决定停用USB端口。尽管立即重新激活了端口,但串行端口仍会断开连接。Node.js保持运行状态,但从不恢复与arduino的串行连接。
我希望使用Serialport的“ closed”事件,在短暂的延迟后,让节点重新连接到串行端口。到目前为止,这工作正常:
var SerialPort = require('serialport2').SerialPort;
var arduinoPort = '/dev/arduino';
// setting up the serial connection
var arduinoSerial = new SerialPort();
var connectArd = function() {
arduinoSerial.open(arduinoPort, {
baudRate: 9600,
dataBits: 8,
parity: 'none',
stopBits: 1,
flowControl: false
});
}
connectArd();
// do something with incoming data
arduinoSerial.on('data', function (data) {
.
.
.
});
// check for connection errors or drops and reconnect
var reconnectArd = function () {
console.log('INITIATING RECONNECT');
setTimeout(function(){
console.log('RECONNECTING TO ARDUINO');
connectArd();
}, 2000);
};
arduinoSerial.on('close', function(){
console.log('ARDUINO PORT CLOSED');
reconnectArd();
});
arduinoSerial.on('error', function (err) {
console.error("error", err);
reconnectArd();
});
一旦出现EMI或USB电缆断开连接,“ arduinoSerial”的“关闭”侦听器就会启动,等待大约2秒钟,然后重新连接到arduino。恢复连接,节点再次从arduino接收数据。
但是...这只能工作一次!当发生第二次断开连接时,节点停止接收数据,但是由于某种原因,此时不会触发“关闭”事件。我必须重新启动节点应用程序才能再次连接到arduino。
我对javascript很陌生,所以这很可能是菜鸟的错误。我究竟做错了什么?有人能指出我正确的方向吗?
(我知道我宁愿开始寻找干扰源,但是由于设备的可用性/处理原因,这种自动重新连接功能也会派上用场。)
谢谢
感谢您的回答。我能弄清楚。
var SerialPort = require('serialport2').SerialPort;
var arduinoPort = '/dev/arduino';
// setting up the serial connection
var connectArd = function() {
var arduinoSerial = new SerialPort();
arduinoSerial.open(arduinoPort, {
baudRate: 9600,
dataBits: 8,
parity: 'none',
stopBits: 1,
flowControl: false
});
// do something with incoming data
arduinoSerial.on('data', function (data) {
.
.
.
});
arduinoSerial.on('close', function(){
console.log('ARDUINO PORT CLOSED');
reconnectArd();
});
arduinoSerial.on('error', function (err) {
console.error("error", err);
reconnectArd();
});
}
connectArd();
// check for connection errors or drops and reconnect
var reconnectArd = function () {
console.log('INITIATING RECONNECT');
setTimeout(function(){
console.log('RECONNECTING TO ARDUINO');
connectArd();
}, 2000);
};
我认为突破是要求var arduinoSerial = new SerialPort();
每次重新连接。我猜想这(重新)吸引了听众,所以他们不会在arduinoSerial.on('close')
事件中迷路。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句