NodeJS 和 Arduino 通过串口进行通信

问题描述 投票:0回答:2

我正在尝试使用串行端口从 Arduino 向 NodeJS 获取消息。这是我的 NodeJS 代码:

var SerialPort = require('serialport');
var port = new SerialPort('/dev/tty.usbmodem1421',{
  baudRate: 9600
});

port.on('data',(data) => {
  console.log(data);
});

这是我的 Arduino 代码:

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

void loop() {
    Serial.println("Message");
    delay( 1000 );
}

它正在工作。然而,我收到的消息是这样的:

<Buffer 4d 65 73>
<Buffer 73 61 67 65>
<Buffer 0d 0a>

我尝试了很多不同的方法来尝试正确阅读该消息。如果它有影响的话,我最终希望我的消息是 JSON 的。以下是我尝试过的一些事情:

我添加了这个:

parser: SerialPort.parsers.readline('\r\n')

我认为这可能已经过时了,因为我得到

readline
不是函数错误消息。

我尝试过使用 Readline 对象:

var parser = new Readline();
parser.on('data', function(data){console.log( data );});

任何帮助将非常感激!

node.js arduino serial-port
2个回答
1
投票

最终我查看了错误的文档。我使用的 SerialPort 版本是 6.x,大多数帮助都是针对更旧的版本。解决方案在 GitHub 最新示例中:

const SerialPort = require('serialport');
const parsers = SerialPort.parsers;

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

const port = new SerialPort('/dev/tty-usbserial1', {
  baudRate: 9600
});

port.pipe(parser);

parser.on('data', console.log);

解析的过程发生了巨大的变化。

https://github.com/node-serialport/node-serialport/blob/master/examples/readline.js


0
投票

对于版本 12,新文档说:

const { SerialPort } = require('serialport')
const { ReadlineParser } = require('@serialport/parser-readline')
const port = new SerialPort({ path: '/dev/ROBOT', baudRate: 14400 })

const parser = port.pipe(new ReadlineParser({ delimiter: '\r\n' }))
parser.on('data', console.log)

https://serialport.io/docs/api-parser-readline

© www.soinside.com 2019 - 2024. All rights reserved.