目录
- [一、 安装 serialport 库](#一、 安装 serialport 库)
- 二.、实现方法
-
- 1.打开串口并配置参数
- [2. 向串口传递信息](#2. 向串口传递信息)
- [3. 接收串口信息](#3. 接收串口信息)
- [4. 处理错误](#4. 处理错误)
- [5. 关闭串口](#5. 关闭串口)
- [6. 使用解析器](#6. 使用解析器)
- [7. 获取串口列表](#7. 获取串口列表)
- [三、 完整示例代码](#三、 完整示例代码)
一、 安装 serialport 库
首先,需要安装 serialport 库。可以通过 npm 安装:
bash
npm install serialport
二.、实现方法
1.打开串口并配置参数
创建一个串口对象并配置串口参数,例如波特率、数据位、停止位和校验位等。
javascript
const SerialPort = require('serialport');
// 创建串口对象
const port = new SerialPort('/dev/tty-usbserial1', {
baudRate: 9600, // 波特率
dataBits: 8, // 数据位
parity: 'none', // 校验位
stopBits: 1, // 停止位
autoOpen: false // 不自动打开串口
});
// 打开串口
port.open((err) => {
if (err) {
console.error('Error opening port:', err.message);
return;
}
console.log('Port opened successfully');
});
2. 向串口传递信息
使用 write 方法向串口发送数据。
javascript
// 向串口发送数据
port.write('Hello Serial Port', (err) => {
if (err) {
console.error('Error on write:', err.message);
return;
}
console.log('Message written');
});
3. 接收串口信息
通过监听 data 事件来接收串口发送的数据。
javascript
// 监听数据事件
port.on('data', (data) => {
console.log('Received data:', data.toString());
});
4. 处理错误
监听 error 事件来处理串口通信中可能出现的错误。
javascript
// 监听错误事件
port.on('error', (err) => {
console.error('Error:', err.message);
});
5. 关闭串口
在完成通信后,可以关闭串口以释放资源。
javascript
// 关闭串口
setTimeout(() => {
port.close((err) => {
if (err) {
console.error('Error closing port:', err.message);
return;
}
console.log('Port closed successfully');
});
}, 10000); // 10秒后关闭串口
6. 使用解析器
为了更好地处理接收到的数据,可以使用解析器。例如,使用 @serialport/parser-inter-byte-timeout 解析器来处理分包问题。
javascript
const { InterByteTimeoutParser } = require('@serialport/parser-inter-byte-timeout');
const parser = port.pipe(new InterByteTimeoutParser({ interval: 300 }));
parser.on('data', (data) => {
console.log('Received data:', data.toString());
});
7. 获取串口列表
可以使用 SerialPort.list() 方法获取当前系统中可用的串口列表。
javascript
SerialPort.list().then((ports) => {
ports.forEach((port) => {
console.log('Available port:', port.path);
});
});
三、 完整示例代码
以下是一个完整的示例代码,展示了如何在 Node.js 中打开串口、发送数据和接收数据:
javascript
const SerialPort = require('serialport');
const { InterByteTimeoutParser } = require('@serialport/parser-inter-byte-timeout');
// 创建串口对象
const port = new SerialPort('/dev/tty-usbserial1', {
baudRate: 9600,
dataBits: 8,
parity: 'none',
stopBits: 1,
autoOpen: false
});
// 打开串口
port.open((err) => {
if (err) {
console.error('Error opening port:', err.message);
return;
}
console.log('Port opened successfully');
// 创建解析器
const parser = port.pipe(new InterByteTimeoutParser({ interval: 300 }));
// 监听数据事件
parser.on('data', (data) => {
console.log('Received data:', data.toString());
});
// 监听错误事件
port.on('error', (err) => {
console.error('Error:', err.message);
});
// 向串口发送数据
port.write('Hello Serial Port', (err) => {
if (err) {
console.error('Error on write:', err.message);
return;
}
console.log('Message written');
});
// 关闭串口
setTimeout(() => {
port.close((err) => {
if (err) {
console.error('Error closing port:', err.message);
return;
}
console.log('Port closed successfully');
});
}, 10000); // 10秒后关闭串口
});