如何使用NodeJ将命令写入串口?

时间:2016-11-22 00:36:25

标签: python node.js serial-port electron

大家好日子,

我遇到了将命令写入连接到USB控制器的锁的问题,该控制器使用NodeJ连接到笔记本电脑端口。我已经在python中成功实现了这一点,但在nodejs中遇到了问题。

我转换为nodejs的原因是因为整个应用程序是用nodejs编写的,并且运行有一个桌面应用程序通过电子,而打开/关闭端口只是它的一小部分。

python等价物并且工作正常

ser = serial.Serial()
        ser.baudrate = 38400 #Suggested rate in Southco documentation, both locks and program MUST be at same rate
        // COMPORT  is a variable that stores an integer such as 6
        ser.port = "COM{}".format(COMPORT) 
        ser.timeout = 10
        ser.open()
        command = "open1"
        #call the serial_connection() function
        ser.write(("%s\r\n"%command).encode('ascii')) #Southco locks receives and sends commands in ASCII

现在在NodeJs中,我正在使用库serialport,我试图通过在电子应用程序下运行的nodej来实现这一目的。

var SerialPort = require('serialport');

   var port = new SerialPort("COM6", {
        baudRate: 38400
    });

    port.on('open', function() {
        port.write(Buffer.from('open1', 'ascii'), function(err) {
            if (err) 
                return sendData(500, err.message);

            console.log('message written');
        });
    });

我知道nodejs能够与端口进行交互,因为我在命令提示符下运行serialport-list或者在代码中运行它时

SerialPort.list(function (err, ports) {
    ports.forEach(function(port) {
        console.log(port.comName, port.pnpId, port.manufacturer); // or console.log(port)
    });
});

显示端口信息。因此,nodejs能够读取端口,并发出有关特定端口的信息,但我似乎无法成功发出命令。它似乎得到执行,因为没有抛出错误消息,它确实显示在控制台中写入的消息,但锁没有反应,而使用python代码,锁通过打开或关闭对写入的命令的要求做出反应。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果您查看 SerialPort 文档,您会看到在实例化新实例时会立即打开端口,除非您传递选项 AutoOn=false。 因此,在您的情况下,在您设置侦听器 .on('open') 时端口已经打开,因此它永远不会收到事件。移除监听器并立即调用 .write() 。

相关问题