NodeJS Serialport npm可用COM端口列表

nfs0ujit  于 2023-06-22  发布在  Node.js
关注(0)|答案(6)|浏览(269)

我有一个问题,我的程序的一部分,我想我知道问题是什么,我找不到办法来解决它,因此需要你的帮助。
我认为问题不在于serialport.list函数,而在于我使用它的方式。
这是我的代码:

var getPortsList= ()=>{
    var portsList = [];
    SerialPort.list((err, ports)=>{
      ports.forEach((ports)=>{
        portsList.push(ports.comName);
        //console.log(portsList);
      });
    });

    return portsList;

  };

所以我把list函数 Package 在我自己的函数中,当我需要检查哪些端口可用时,我会调用它。我遇到的问题是,我总是得到一个空数组返回。如果我从forEach内部console.log,我肯定会得到COM端口名称,如果我在forEach循环后从list函数内部console.log,我会得到数组,并且不是空的。我只能假设这是与JavaScript的一致性有关的一些问题,但我不太确定如何解决这个问题。我可以看到这是一个重要的概念,将出现所有的时间,我想了解它更好一点。任何关于如何处理这种问题或合适的链接的信息将是apreciated。谢谢你。最好的问候路易斯

a6b3iqyw

a6b3iqyw1#

我希望下面的解决方案将为您工作。

var getPortsList = (callback) => {
  var portsList = [];

  SerialPort.list((err, ports) => {
    ports.forEach((port) => {
      portsList.push(port.comName);
    });

    callback(null, portsList);
  });
};

这样做的原因是因为SerialPort.list方法是异步的。这会使portsList为空,因为SerialPort.list还没有机会完成并填充它。添加一个完成回调函数可以让它有时间运行,并为您提供一个已填充的端口数组。

1u4esq0p

1u4esq0p2#

对于windows7节点serialPort 8,内部电子,采用中兴usb gsm调制解调器.

// We are using electron and i am using electronService to check if we are inside electron
 if(this._electronService.isElectronApp) {

    // getting serialPort inside electron   
    const serialPort = window['require']('serialport');

    // the serialPort will return promise so we are using then 
    serialPort.list().then(function (data) {
        console.log(data);  
    });

}

虽然它没有列出中兴USB调制解调器,但它列出了其他端口。我使用小技巧来获取usb调制解调器端口没有(我知道它不正确的方式获取usb调制解调器端口)

if(data[0] != undefined){
    let portNameToDecrease = data[0].path;
    let portNoToDecrease = portNameToDecrease.charAt(3);
    portNoToDecrease  = portNoToDecrease - 1 ;
    portNoToDecrease = "COM"+portNoToDecrease;
    data.push({path: portNoToDecrease});
    //Now the data contain the required port
}
zte4gxcn

zte4gxcn3#

对于那些想知道为什么标记为答案的解决方案不起作用的人,SerialPort.List已从SerialPort中弃用,并作为命令工具移动到SerialPort/List中
来源:https://serialport.io/docs/guide-cli(SerialPort官方文档)
安装SerialPort/List:

npm install @serialport/list

如果安装失败,则使用sudo运行
获取端口列表的方法:

const bindings = require('@serialport/bindings')

var listOfPorts=[];

//called automatically by bindings.list()
function list(ports) {
  listOfPorts=ports;
  // now listOfPorts will be the port Objects
  console.log(listOfPorts);
}

bindings.list().then(list, err => {
  process.exit(1)
})

我找不到太多关于nodejs的serialPort/list的文档,所以我从源代码中取出了一些代码。顺便说一句,我是个新手。所以如果我在取出的代码上犯了愚蠢的错误,请不要来找我。
我从这里获取源代码:https://github.com/serialport/node-serialport/blob/master/packages/list/lib/index.js

gywdnpxw

gywdnpxw4#

为了进一步响应janithcooray,更新为使用async/await,这对我来说很有效。

const bindings = require("@serialport/bindings");

/**
 * Get a list of available serial ports. 
 * @param {boolean} verbose - Log results if true. 
 * @returns {{status: string, data: array|object}} - 'ok' or 'fail' with details to handle elsewhere. 
 */
const listPorts = async (verbose) => {
  let result;
  try {
    const portList = await bindings.list();
    if (verbose) console.table(portList); // Print out the array if desired.
    result = { status: "ok", data: portList };
  } catch (err) {
    if (verbose) console.log(err); // To see what the error is, if desired.
    result = { status: "fail", data: err };
  }
  return result;
};

// Run the command.
const { portStatus, portList } = listPorts(true);
// If portStatus is 'ok' then portsList is ready to use.
gcuhipw9

gcuhipw95#

我得到一个list()不是一个定义的函数错误消息时,使用提供的代码片段。
我能够通过稍微不同的要求serialport来解决这个问题。对我有用的代码如下:

const { SerialPort } = require('serialPort')

SerialPort.list().then(function (data) {
  debugger;
  console.log(data);  
});
9avjhtql

9avjhtql6#

对于Windows 10,serialPort的list方法打印所有可用的Com端口和信息。

const serialPort = require('serialport');

serialPort.list().then(function(ports){
  ports.forEach(function(port){
    console.log("Port: ", port);
  })
});

在终端上:

Port:  { comName: 'COM1',
  manufacturer: '(Standard port types)',
  serialNumber: undefined,
  pnpId: 'ACPI\\PNP0501\\0',
  locationId: undefined,
  vendorId: undefined,
  productId: undefined }
Port:  { comName: 'COM4',
  manufacturer: 'HHD Software Ltd.',
  serialNumber: undefined,
  pnpId: 'ROOT\\PORTS\\0000',
  locationId: undefined,
  vendorId: undefined,
  productId: undefined }
Port:  { comName: 'COM5',
  manufacturer: 'HHD Software Ltd.',
  serialNumber: undefined,
  pnpId: 'ROOT\\PORTS\\0001',
  locationId: undefined,
  vendorId: undefined,
  productId: undefined }

相关问题