Node.js中如何区分两台ER80二维码扫描器以控制对应门禁
区分两台虚拟键盘式ER80二维码扫描器的Node.js实现方案
核心思路
ER80默认模拟USB HID键盘,无法通过串口/图像扫描仪工具识别,需通过HID设备标识+输入事件监听实现设备区分。以下是具体实现步骤:
1. 依赖准备
使用node-hid库直接与HID设备交互,安装命令:
npm install node-hid
Linux环境需先安装系统依赖:
sudo apt-get install libudev-dev
2. 识别设备标识
先编写脚本枚举所有HID设备,找到两台ER80的vendorId和productId:
const HID = require('node-hid'); console.log(HID.devices());
运行后在输出中找到ER80对应的设备条目,记录下vendorId(十六进制)和productId(十六进制)。
3. 监听设备输入并区分
通过设备标识分别监听两台扫描器的输入,将HID扫描码转换为字符,完成识别后触发对应门禁逻辑:
const HID = require('node-hid'); // 替换为你的两台设备实际标识 const entranceScanner = { vendorId: 0xXXXX, productId: 0xYYYY }; const exitScanner = { vendorId: 0xXXXX, productId: 0xZZZZ }; // HID键盘扫描码到字符的基础映射(需根据需求补充完整) const scanCodeMap = { 0x04: 'a', 0x05: 'b', 0x06: 'c', 0x07: 'd', 0x08: 'e', 0x09: 'f', 0x0A: 'g', 0x0B: 'h', 0x0C: 'i', 0x0D: 'j', 0x0E: 'k', 0x0F: 'l', 0x10: 'm', 0x11: 'n', 0x12: 'o', 0x13: 'p', 0x14: 'q', 0x15: 'r', 0x16: 's', 0x17: 't', 0x18: 'u', 0x19: 'v', 0x1A: 'w', 0x1B: 'x', 0x1C: 'y', 0x1D: 'z', 0x1E: '1', 0x1F: '2', 0x20: '3', 0x21: '4', 0x22: '5', 0x23: '6', 0x24: '7', 0x25: '8', 0x26: '9', 0x27: '0', 0x28: '\n' // 扫描结束的回车符 }; function setupScanner(config, doorType) { try { const scanner = new HID.HID(config.vendorId, config.productId); console.log(`已连接${doorType}扫描器`); let scannedContent = ''; scanner.on('data', (data) => { // HID键盘数据格式:第2字节为修饰键,第3-8字节为扫描码 for (let i = 2; i < 8; i++) { const code = data[i]; if (code === 0) continue; const char = scanCodeMap[code]; if (!char) continue; if (char === '\n') { // 扫描完成,执行门禁逻辑 console.log(`${doorType}扫描到二维码:${scannedContent}`); doorType === '入口' ? openEntranceDoor() : openExitDoor(); scannedContent = ''; } else { scannedContent += char; } } }); scanner.on('error', (err) => { console.error(`${doorType}扫描器异常:`, err); }); } catch (err) { console.error(`${doorType}扫描器连接失败:`, err); } } // 门禁控制示例函数(根据实际硬件替换) function openEntranceDoor() { console.log('触发入口门禁开启'); // 此处添加门禁控制代码,如串口控制继电器、调用API等 } function openExitDoor() { console.log('触发出口门禁开启'); // 同理添加出口门禁控制逻辑 } // 初始化两台扫描器 setupScanner(entranceScanner, '入口'); setupScanner(exitScanner, '出口');
4. Linux权限配置
普通用户默认无HID设备访问权限,需添加udev规则:
- 创建规则文件:
sudo nano /etc/udev/rules.d/99-scanner.rules - 添加内容(替换为实际的vendorId和productId):
SUBSYSTEM=="usb", ATTRS{idVendor}=="XXXX", ATTRS{idProduct}=="YYYY", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="XXXX", ATTRS{idProduct}=="ZZZZ", MODE="0666" - 重新加载规则:
sudo udevadm control --reload-rules && sudo udevadm trigger
补充说明
- 若ER80支持自定义前缀输出(需查看设备手册),可给每台扫描器配置唯一前缀(如入口加
IN-、出口加OUT-),简化后续识别逻辑。 - 扫描码映射需根据HID标准补充完整,覆盖二维码可能包含的所有字符。
内容的提问来源于stack exchange,提问作者Sergi
相关产品推荐
相关产品推荐

