feat: 添加Windows COM口支持和跨平台说明
- 支持Windows COM1/COM2/COM3等串口格式 - 支持数字串口号自动转换(如: 3 -> COM3) - 新增PLATFORM.md跨平台使用说明文档 - 更新配置示例为Windows友好的COM3 - 包含Windows和Linux的串口查看、权限配置等详细说明
This commit is contained in:
+222
@@ -0,0 +1,222 @@
|
||||
# 跨平台支持说明
|
||||
|
||||
本项目支持在 **Windows** 和 **Linux** 上运行。
|
||||
|
||||
## 串口配置
|
||||
|
||||
### Windows
|
||||
|
||||
Windows 使用 `COMx` 格式:
|
||||
|
||||
```json
|
||||
{
|
||||
"serial": {
|
||||
"path": "COM3",
|
||||
"baudRate": 115200
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
也可以直接写数字,程序会自动添加 `COM` 前缀:
|
||||
|
||||
```json
|
||||
{
|
||||
"serial": {
|
||||
"path": "3",
|
||||
"baudRate": 115200
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**查看可用串口**:
|
||||
```powershell
|
||||
# 方法1: 设备管理器
|
||||
devmgmt.msc
|
||||
|
||||
# 方法2: PowerShell
|
||||
Get-WmiObject Win32_SerialPort | Select-Object Name, DeviceID
|
||||
|
||||
# 方法3: 使用 mode 命令
|
||||
mode
|
||||
```
|
||||
|
||||
### Linux
|
||||
|
||||
Linux 使用 `/dev/ttyUSBx` 或 `/dev/ttyACMx` 格式:
|
||||
|
||||
```json
|
||||
{
|
||||
"serial": {
|
||||
"path": "/dev/ttyUSB0",
|
||||
"baudRate": 115200
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**查看可用串口**:
|
||||
```bash
|
||||
# 查看所有USB串口设备
|
||||
ls -l /dev/ttyUSB*
|
||||
ls -l /dev/ttyACM*
|
||||
|
||||
# 查看详细信息
|
||||
dmesg | grep tty
|
||||
|
||||
# 使用 lsusb 查看USB设备
|
||||
lsusb
|
||||
```
|
||||
|
||||
**权限配置**(Linux必需):
|
||||
```bash
|
||||
# 将当前用户添加到 dialout 组
|
||||
sudo usermod -a -G dialout $USER
|
||||
|
||||
# 注销并重新登录后生效,或临时授权
|
||||
sudo chmod 666 /dev/ttyUSB0
|
||||
```
|
||||
|
||||
## 平台差异
|
||||
|
||||
### 文件路径
|
||||
- Windows: 使用反斜杠 `\` 或正斜杠 `/` (Node.js会自动处理)
|
||||
- Linux: 使用正斜杠 `/`
|
||||
|
||||
本项目使用 Node.js 的 `path` 模块,会自动处理平台差异。
|
||||
|
||||
### PM2 守护进程
|
||||
|
||||
Windows 和 Linux 都支持 PM2,但启动脚本略有不同:
|
||||
|
||||
**Windows**:
|
||||
```powershell
|
||||
pm2 start ecosystem.config.js
|
||||
pm2 save
|
||||
pm2 startup
|
||||
# 按提示执行生成的命令(需要管理员权限)
|
||||
```
|
||||
|
||||
**Linux**:
|
||||
```bash
|
||||
pm2 start ecosystem.config.js
|
||||
pm2 save
|
||||
pm2 startup
|
||||
# 按提示执行生成的命令(使用 sudo)
|
||||
```
|
||||
|
||||
### 日志目录
|
||||
|
||||
两个平台都会在项目根目录下创建 `logs/` 目录:
|
||||
- Windows: `.\logs\`
|
||||
- Linux: `./logs/`
|
||||
|
||||
## 测试串口连接
|
||||
|
||||
可以使用以下工具测试串口是否正常:
|
||||
|
||||
### Windows
|
||||
- **PuTTY**: https://www.putty.org/
|
||||
- **Tera Term**: https://ttssh2.osdn.jp/
|
||||
- **串口调试助手**
|
||||
|
||||
### Linux
|
||||
- **minicom**: `sudo apt install minicom && sudo minicom -D /dev/ttyUSB0 -b 115200`
|
||||
- **screen**: `sudo screen /dev/ttyUSB0 115200`
|
||||
- **picocom**: `sudo apt install picocom && sudo picocom /dev/ttyUSB0 -b 115200`
|
||||
|
||||
测试方法:
|
||||
1. 打开串口工具,连接到对应COM口
|
||||
2. 发送 `AT` 命令
|
||||
3. 应该收到 `OK` 响应
|
||||
|
||||
## 常见问题
|
||||
|
||||
### Windows
|
||||
|
||||
**Q: 提示串口被占用**
|
||||
```
|
||||
Error: Port is already open
|
||||
```
|
||||
A: 检查是否有其他程序(如Arduino IDE、串口调试助手)占用了该端口
|
||||
|
||||
**Q: 找不到COM口**
|
||||
A:
|
||||
1. 检查设备管理器中4G模块是否正确识别
|
||||
2. 确认驱动是否已安装
|
||||
3. 尝试拔插USB重新识别
|
||||
|
||||
**Q: 权限不足**
|
||||
A: Windows通常不需要特殊权限,如果遇到问题,尝试以管理员身份运行
|
||||
|
||||
### Linux
|
||||
|
||||
**Q: 权限不足**
|
||||
```
|
||||
Error: Opening COM1: Permission denied
|
||||
```
|
||||
A:
|
||||
```bash
|
||||
sudo usermod -a -G dialout $USER
|
||||
# 注销重新登录
|
||||
```
|
||||
|
||||
**Q: 串口不存在**
|
||||
```
|
||||
Error: No such file or directory, cannot open /dev/ttyUSB0
|
||||
```
|
||||
A:
|
||||
```bash
|
||||
# 检查设备是否识别
|
||||
dmesg | tail -20
|
||||
lsusb
|
||||
# 可能是 ttyACM0 而不是 ttyUSB0
|
||||
ls /dev/tty*
|
||||
```
|
||||
|
||||
**Q: ModemManager占用串口**
|
||||
A: 某些Linux发行版的ModemManager会自动占用4G模块
|
||||
```bash
|
||||
# 临时停用
|
||||
sudo systemctl stop ModemManager
|
||||
|
||||
# 永久禁用(不推荐,可能影响系统网络功能)
|
||||
sudo systemctl disable ModemManager
|
||||
```
|
||||
|
||||
## 开发环境
|
||||
|
||||
### Node.js 版本
|
||||
- 推荐: Node.js 18.x LTS 或更高
|
||||
- 最低: Node.js 16.x
|
||||
|
||||
### 依赖库
|
||||
所有依赖都是跨平台的:
|
||||
- `serialport` - 底层使用 C++ 绑定,支持 Windows/Linux/macOS
|
||||
- `express` - Web框架
|
||||
- `nodemailer` - 邮件发送
|
||||
- `axios` - HTTP客户端
|
||||
- `winston` - 日志库
|
||||
|
||||
## 性能建议
|
||||
|
||||
### Windows
|
||||
- 关闭Windows Defender实时扫描对 `node_modules/` 的监控
|
||||
- 使用SSD存储项目文件
|
||||
|
||||
### Linux
|
||||
- 使用 `noatime` 挂载选项减少磁盘IO
|
||||
- 调整串口缓冲区大小(如有需要):
|
||||
```bash
|
||||
setserial /dev/ttyUSB0 low_latency
|
||||
```
|
||||
|
||||
## 部署建议
|
||||
|
||||
### Windows Server
|
||||
- 使用 PM2 作为守护进程
|
||||
- 配置 Windows 防火墙允许 API 端口(默认3000)
|
||||
- 设置 PM2 开机自启动
|
||||
|
||||
### Linux Server
|
||||
- 使用 PM2 + systemd
|
||||
- 配置 UFW/iptables 防火墙
|
||||
- 考虑使用 Nginx 反向代理
|
||||
@@ -38,8 +38,9 @@ cp config.example.json config.json
|
||||
```json
|
||||
{
|
||||
"serial": {
|
||||
"path": "/dev/ttyUSB0",
|
||||
"baudRate": 115200
|
||||
"path": "COM3",
|
||||
"baudRate": 115200,
|
||||
"_comment": "Windows使用COM1/COM2/COM3等; Linux使用/dev/ttyUSB0"
|
||||
},
|
||||
"smtp": {
|
||||
"server": "smtp.qq.com",
|
||||
|
||||
+3
-2
@@ -1,7 +1,8 @@
|
||||
{
|
||||
"serial": {
|
||||
"path": "/dev/ttyUSB0",
|
||||
"baudRate": 115200
|
||||
"path": "COM3",
|
||||
"baudRate": 115200,
|
||||
"_comment": "Windows使用COM1/COM2/COM3等,也可以直接写数字如3; Linux使用/dev/ttyUSB0"
|
||||
},
|
||||
"smtp": {
|
||||
"server": "smtp.qq.com",
|
||||
|
||||
+11
-1
@@ -22,9 +22,19 @@ class ModemManager extends EventEmitter {
|
||||
*/
|
||||
async open() {
|
||||
try {
|
||||
// 处理串口路径:Windows支持COMx格式
|
||||
let portPath = this.config.path;
|
||||
|
||||
// 如果是Windows且指定了COM端口号(数字),自动添加COM前缀
|
||||
if (process.platform === 'win32' && /^\d+$/.test(portPath)) {
|
||||
portPath = `COM${portPath}`;
|
||||
}
|
||||
|
||||
logger.info(`准备打开串口: ${portPath} (${this.config.baudRate})`);
|
||||
|
||||
// 打开串口
|
||||
this.port = new SerialPort({
|
||||
path: this.config.path,
|
||||
path: portPath,
|
||||
baudRate: this.config.baudRate,
|
||||
dataBits: 8,
|
||||
stopBits: 1,
|
||||
|
||||
Reference in New Issue
Block a user