JavaScript向蓝牙打印机发字符串所需GATT服务/特征UUID
Web Bluetooth 蓝牙打印机通用发送UUID说明
蓝牙打印机没有蓝牙SIG统一发布的专属标准化打印服务UUID,市面流通设备普遍使用串口透传类GATT服务完成文本/指令发送,通用可用的服务与特征UUID如下:
- 最广泛兼容的通用透传服务UUID:
0000ffe0-0000-1000-8000-00805f9b34fb,对应可写入字符串的特征UUID为0000ffe1-0000-1000-8000-00805f9b34fb,覆盖市面上90%以上的消费级蓝牙热敏打印机,支持普通写入、无响应写入两种模式,可直接传入文本字符串或ESC/POS打印指令。 - SIG标准串口服务UUID:
000018f0-0000-1000-8000-00805f9b34fb,对应写入特征UUID为00002af1-0000-1000-8000-00805f9b34fb,部分合规性较强的品牌打印设备会使用该标准服务。
注意:上述UUID无法保证适配所有设备,如果调用时提示服务不存在,可不带参数调用
getPrimaryServices()拉取设备公开的所有服务,遍历每个服务下的特征,找到具备write或writeWithoutResponse权限的特征即为数据写入通道。
核心调用参考代码:
// 以兼容性最高的FFE0/FFE1组合为例 async function sendTextToPrinter(selectedDevice, printContent) { // 建立GATT连接 const gattServer = await selectedDevice.gatt.connect(); // 获取打印主服务,替换whatUUID为对应服务UUID即可 const printService = await gattServer.getPrimaryService('0000ffe0-0000-1000-8000-00805f9b34fb'); // 获取可写入特征 const writeChar = await printService.getCharacteristic('0000ffe1-0000-1000-8000-00805f9b34fb'); // 字符串转二进制数据,中文场景建议使用GBK编码避免乱码 const dataBuffer = new TextEncoder('gbk').encode(printContent); // 发送数据 await writeChar.writeValue(dataBuffer); }
开发注意事项:
- 调用
navigator.bluetooth.requestDevice()时,需要将用到的服务UUID加入optionalServices配置项,否则会因权限限制无法获取对应服务。 - 多数热敏打印机需要先发送初始化指令
\x1B\x40再传入文本内容,否则设备不会响应打印动作。
内容的提问来源于stack exchange,提问作者Alvin Stefanus
相关产品推荐
相关产品推荐

