1

我有一个系统,该系统由一个通过串行端口连接到树莓派的微处理器组成。树莓派正在运行带有 node-serialport 的 node.js,以提供基于 Web 的用户界面。

当我尝试通过 Web 界面写入串行端口时,在收到微控制器的回复(10 秒到几分钟)之前,我经常会遇到很长的延迟,这意味着 serialport.write 以某种方式延迟。(我没有看到错误,端口也没有关闭..)在第 6 次串行端口写入之后,这种情况一直发生。如果我重新加载浏览器,它会再次正常工作,直到第 7 次请求。

这是在 node.js 中打开和推送数据到串口的例程:

var myPort = new SerialPort("/dev/ttyAMA0", { 
  baudrate: 38400,
  parser: serialport.parsers.readline("\n")
});

app.post('/sendtoavr', function(req, res) {
  myPort.write(req.body.cmd);
});

myPort.on('close', function(err) {
  console.log('node-serialport closed!!!');
});

myPort.on('error', function(err) {
  console.log('node-serialport error!!!');
});

而这个用于向 rpi 发送 http post 请求的 jquery 例程:

$("#btnSearchTempSensors").click(function() {
  var strCMD = String.fromCharCode(84) + String.fromCharCode(83) + String.fromCharCode(13);
  $.post('/sendtoavr', {cmd: strCMD});
});

在 chrome 中查看网络控制台时,看起来 http post 请求会立即发送,并且当通过 minicom 通过 ssh 将命令发送到微控制器时,根本没有问题。

因此我怀疑 node-serialport 或 node.js,但如何进一步挖掘?

有人有什么想法吗?

4

1 回答 1

0

找到了解决方法。我没有通过 http post 请求发送命令,而是使用了 socket.io/websockets。

节点.js:

socket.on('sendcmd', function(data) {
  myPort.write(data);
});

索引.html:

$("#btnListTempSensors").click(function() {
  var strCMD = String.fromCharCode(84) + String.fromCharCode(76) + String.fromCharCode(13);
  socket.emit('sendcmd', strCMD);
});
于 2014-03-08T09:53:45.450 回答