重新连接到端口后,node.js serialport事件停止工作

病毒

我正在使用用于node.jsserialport2库从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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

放置JS后,Navigator停止工作

来自分类Dev

更新Node.js后,Node项目停止工作

来自分类Dev

app.js 文件在编辑后停止工作

来自分类Dev

连接到VPN时Docker暴露的端口停止工作

来自分类Dev

重新连接硬盘后,终端命令停止工作

来自分类Dev

USB端口停止工作

来自分类Dev

灰烬js-jQuery悬停效果在元素被{{/ if}}有条件隐藏和重新显示后停止工作

来自分类Dev

D3js碰撞在一段时间后停止工作

来自分类Dev

Node.JS停止工作,并且控制台被点淹没

来自分类Dev

一段时间后,node.js服务器在Windows上停止工作

来自分类Dev

添加FORM时JS停止工作

来自分类Dev

在运行任何其他事件后,Bootstrap工具提示停止工作

来自分类Dev

切换到其他窗口后,鼠标移动事件停止工作

来自分类Dev

打开Audacity后,耳机插孔端口停止工作

来自分类Dev

打开Audacity后,耳机插孔端口停止工作

来自分类Dev

几个USB端口停止工作

来自分类Dev

连接到LED标志后,计算机停止工作(使用USB电缆)

来自分类Dev

重新启动后 GNOME Shell 扩展停止工作

来自分类Dev

Zeitgeist卸载后Unity停止工作

来自分类Dev

vsFTPd在更新后停止工作

来自分类Dev

升级后SQLite停止工作

来自分类Dev

Qt升级后qDebug()停止工作

来自分类Dev

休眠后pulseaudio停止工作

来自分类Dev

iOS:AVCaptureOutput导航后停止工作

来自分类Dev

从Codepen迁移后,代码停止工作

来自分类Dev

发布后JavaScript停止工作

来自分类Dev

硬盘被击中后停止工作

来自分类Dev

更新后,Pithos停止工作!

来自分类Dev

运行命令后终端停止工作