问题描述
我是node-serialport的新手,在自动检测串行端口时遇到一些问题。下面是我的代码,
var serialport = require('serialport');
var portName = " ";
用于自动检测串行端口路径的代码:- (注意:如果我尝试在控制台上打印portName,则会打印确切的端口路径,例如COM4,COM3等。但是在打开端口时出错。请参阅结尾处的错误。并且如果我将portName指定为硬编码,例如{{1} },那么它将成功运行。)
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);
}
计算机配置:-
操作系统:Windows 10
节点版本:v12.18.3
NPM版本:6.14.6
serialport@9.0.1
解决方法
问题已解决。我对代码做了一些更改。
用于自动检测串行端口路径的代码:-
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;
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);
}
})
},err => {
console.error('Error listing ports',err)
}
);
从串行端口读取数据的代码:-
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);
}