You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arduino串口读写问题:Node.js中SerialPort不是构造函数报错

Node.js中使用SerialPort报错:TypeError: SerialPort is not a constructor

问题描述

我想开发一个程序,读取Arduino通过USB串口发送的数据并显示,但运行Node.js代码时遇到以下错误:

const port = new SerialPort('COM6', { baudRate: 9600 });
^
TypeError: SerialPort is not a constructor

Node.js代码

import Readline from '@serialport/parser-readline';
const port = new SerialPort('COM6', { baudRate: 9600 });
const parser = port.pipe(new Readline({ delimiter: '' }));
// Read the port data
port.on("open", () => {
  console.log('serial port open');
});
port.write("1", (err) => {
    if (err) {
      return console.log('Error on write: ', err.message);
    }
    console.log('message written');
  });
parser.on('data', data =>{
  console.log('State of light:', data);
});

Arduino代码

void setup() {
  Serial.begin(9600);
}

void loop() {
  if (Serial.available() > 0) {
        char command = Serial.read();
        if (command == "1") {
            Serial.println("1");
        } else if (command == '0') {
            Serial.println("0");
        }
    }
  delay(5000);
}

解决方案

1. 修复SerialPort的导入问题

报错的直接原因是未导入SerialPort类,按照ESM规范补充导入:

import { SerialPort } from 'serialport';
import Readline from '@serialport/parser-readline';

同时确保已安装所需依赖:

npm install serialport @serialport/parser-readline

2. 修正Arduino的字符比较逻辑

Arduino代码中command == "1"是错误的——command是char类型,必须用单引号匹配单个字符:

if (command == '1') {
    Serial.println("1");
} else if (command == '0') {
    Serial.println("0");
}

双引号用于字符串,单引号用于单个字符,类型不匹配会导致逻辑无法触发。

3. 优化Readline的分隔符设置

Arduino用Serial.println发送的数据会带\r\n换行符,当前空分隔符无法正确分割数据,建议修改为:

const parser = port.pipe(new Readline({ delimiter: '\r\n' }));

这样才能准确读取每一行完整的串口数据。


内容的提问来源于stack exchange,提问作者TheCreativeMaker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 00:20:10