【发布时间】:2020-08-25 06:09:00
【问题描述】:
我是 node-serialport 的新手,在自动检测串口时遇到了一些问题。下面是我的代码,
var serialport = require('serialport');
var portName = " ";
自动检测串口路径的代码:-
(注意:如果我尝试在控制台上打印 portName 会打印确切的端口路径,例如 COM4、COM3 等。但是在打开端口时出错。最后查看错误。如果我将 portName 分配为硬编码,例如 var portName = "COM4"; 然后它运行成功)。
serialport.list().then(
ports => {
ports.forEach(port => {
if(port.manufacturer.includes("Silicon Labs")&&port.pnpId.includes("USB\\VID_10C4&PID_EA60\\0001")){
console.log("Port Set");
portName = port.path;
}
})
},
err => {
console.error('Error listing ports', err)
}
);
从串口读取数据的代码:-
var myPort = new serialport(portName, {baudRate:9600});
var Readline = serialport.parsers.Readline;
var parser = new Readline();
myPort.pipe(parser);
myPort.on('open', showPortOpen);
parser.on('data', readSerialData);
myPort.on('close', showPortClose);
myPort.on('error', showError);
function showPortOpen() {
console.log('port open. Data rate: ' + myPort.baudRate);
}
function readSerialData(data) {
console.log(data);
return;
}
function showPortClose() {
console.log('port closed.');
}
function showError(error) {
console.log('Serial port error: ' + error);
}
打开串口出错:
Serial port error: Error: Opening : Unknown error code 123
电脑配置:-
操作系统:Windows 10
节点版本:v12.18.3
NPM 版本:6.14.6
serialport@9.0.1
【问题讨论】:
-
如果你
console.log(portName);在var myPort = new serialport(portName, {baudRate:9600});之前记录正确的值吗?我问的原因是serialport.list().then(是异步调用,您可能会在将值分配给portName之前尝试打开端口。 -
控制台上没有显示任何值。我该如何解决? @摩尔达
-
问题已解决。谢谢你。 @摩尔达
标签: node.js node-serialport node-usb