Nodejs - 从串口读取数据

13

我一直在寻找这个问题的答案...

基本上,我想从串口(例如通过USB)读取数据。我已经研究了node-serialport模块,但它在接收到来自串口的第一个结果后就会停止。我原以为它只是在接收到数据时将其输出。好像缓冲区正在填充并且需要以某种方式刷新?

我稍微修改了我在这里找到的演示代码- https://github.com/voodootikigod/node-serialport/tree/master/tests

这是我的代码:

    var sys = require("sys"),
    repl = require("repl"),
    serialPort = require("serialport").SerialPort;

    // Create new serialport pointer
    var serial = new serialPort("/dev/tty.usbmodem1d11" , { baudrate : 9600 });

    // Add data read event listener
    serial.on( "data", function( chunk ) {
        sys.puts(chunk);
    });


    serial.on( "error", function( msg ) {
        sys.puts("error: " + msg );
    });

    repl.start( "=>" );
我正在使用Arduino,因此波特率为9600。任何帮助都将不胜感激,谢谢,James。

你忘记在 serial 前面加上 var 了!你尝试添加其中一个解析器了吗? - Raynos
谢谢,我刚刚添加了那个。我尝试了另一个解析器(用于换行符),但似乎也没有起作用。 - James
@James 在构造函数中还有一个缓冲区大小选项。尝试将其增加!(默认为255)。 - Raynos
@Raynos,我也试过了:(,不过还是谢谢你! - James
@James 使用 --debug 编译该模块,然后尝试调试或在 GitHub 上提交一个 bug。 - Raynos
@Raynos,太酷了,我也会试一试。 - James
2个回答

26

Node-serialport的作者。我已经找到了问题所在,这是由于node.js中IOWatcher的编译问题引起的。我已经修改了从串口读取数据的策略,现在它应该在所有情况下都能正常工作。请确保您使用的是node-serialport 0.2.6及以上版本。

现在去构建JS控制的机器人吧!


此外,您不需要 repl - 串行端口将保持事件循环处于打开状态,直到您关闭它。 - voodootikigod

9

我也遇到了串口读取的问题。这是由于node.js v4.7中的一个错误导致的(请参见此问题)。

但是,切换到较旧版本的Node.js(v4.0)后它可以正常工作。

它可能也适用于v4.6及更高版本,但我还没有验证过。


1
好的,我通过将我的FTDI USB串行驱动程序更新到2.2.16并将节点更新到0.5.0-pre来解决了这个问题 :) - James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接