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

Node.js向串口发数据报错求助,求可用的简单实现代码

Node.js 串口发送数据到 Arduino 解决方案

错误原因分析

你遇到的 "path is not defined" 错误是因为新版 SerialPort(v10+)的构造函数参数格式变更——不再支持单独传入端口路径作为第一个参数,必须将路径包含在配置对象中。之前的 "serialport is not a constructor" 则大概率是导入方式不匹配版本导致的。

修正后的完整代码

const express = require('express');
const { SerialPort } = require('serialport');

const app = express();
const serverPort = 3000;

app.use(express.json());

// 串口配置:新版 SerialPort 需将路径放入配置对象
const serialConfig = {
  path: 'COM3', // 替换为你的实际串口(Windows 是 COMx,Mac/Linux 是 /dev/tty.usbmodemxxx 之类)
  baudRate: 115200,
  autoOpen: false // 手动控制打开时机,方便处理错误
};

const serialPort = new SerialPort(serialConfig);

// 监听串口连接成功事件
serialPort.open((err) => {
  if (err) {
    return console.error('串口打开失败:', err.message);
  }
  console.log('已连接到串口:', serialConfig.path);
});

// 监听串口错误事件
serialPort.on('error', (err) => {
  console.error('串口错误:', err.message);
});

app.post('/send', (req, res) => {
  const { message } = req.body;
  
  if (!message) {
    return res.status(400).send('请提供要发送的 message 参数');
  }

  // 写入串口数据,处理写入错误(加换行符方便 Arduino 读取,可根据实际代码调整)
  serialPort.write(message + '\n', (err) => {
    if (err) {
      console.error('数据发送失败:', err.message);
      return res.status(500).send('数据发送失败');
    }
    console.log('已发送数据:', message);
    res.send('数据已发送到串口');
  });
});

app.listen(serverPort, () => {
  console.log(`服务器运行在 http://localhost:${serverPort}`);
});

关键改动说明

  • 构造函数参数调整:将端口路径移入配置对象的 path 属性,符合新版 SerialPort 的要求。
  • 添加错误处理:增加 open 回调和 error 事件监听,便于排查连接失败问题。
  • 写入数据优化:添加写入回调处理发送失败的情况,可选添加换行符适配 Arduino 的字符串读取逻辑。
  • 参数校验:在接口中校验 message 参数是否存在,避免空数据发送。

额外注意事项

  • 串口权限:Windows 可能需要管理员权限运行终端;Mac/Linux 需要将用户加入 dialout 或 uucp 组(执行命令:sudo usermod -aG dialout $USER)。
  • Arduino 代码配合:确保 Arduino 端波特率与 Node.js 代码一致,示例 Arduino 代码:
    void setup() {
      Serial.begin(115200);
    }
    
    void loop() {
      if (Serial.available() > 0) {
        String input = Serial.readStringUntil('\n');
        Serial.println("收到指令: " + input);
        // 在这里根据 input 执行对应操作
      }
      delay(100);
    }
    
  • 端口正确性:确认 Arduino 连接的串口编号,Windows 可在设备管理器查看,Mac/Linux 用 ls /dev/tty.* 查看。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 13:16:12