问题描述
现在我正在开发能够连接热敏打印机的网络。我正在使用 angular 框架,并且使用库 ng-thermal-printer
成功地将热敏打印机与 USB 连接。但我希望我的网络也能够通过网络蓝牙连接热敏打印机,即 BLE(低功耗蓝牙)。据我所知,BLE 有 GATT 方面的规范,里面有服务和特性。
到目前为止我所做的进展,我可以在服务和特征中连接并向热敏打印机设备发送一个值,让我们说带有 UUID AS 的服务和带有 UUID AC 的特征,在应用程序的帮助下使用我的 Android 手机名为 nRF Connect。 targeting Service AS并以特征AC发送十六进制值使我成功地在热敏纸上打印了一些东西。
但是有一个问题。在了解正确的服务和特点后。我在我的项目中实现了它。但是,我的 chrome 浏览器控制台显示错误:
- Origin 不允许访问任何服务......它告诉我在 requestiDevice() 时添加 optionalServices
- 在属性 optionalServices 中添加 Service AS 后,控制台显示错误 DOMException: Connection Failed for unkNown reason。 chrome PC 和 chrome android 中均显示错误。
注意:
- 我在 chrome 上启用了实验性网络平台功能
- 我已在 chrome 上为 Web 蓝牙启用了使用新的权限后端
- 我已为从本地主机加载的资源启用允许无效证书。铬
- 我已启用在 chrome 上启用新的 USB 后端
- 我使用过 https。
补充问题。应用程序 nRF Connect 使用的蓝牙连接与 BLE 不同吗?如果是,为什么显示服务和特征?
解决方法
我建议您尝试直接从 about:bluetooth-internals
页面发送这些十六进制值,看看是否也可以从那里重现连接错误。见https://web.dev/bluetooth/#tips
如果是这样,请查看 https://www.chromium.org/developers/how-tos/file-web-bluetooth-bugs 以了解如何正确提交 Chromium 错误,以便团队可以修复潜在问题。
如果没有,您能否分享您的 JS 代码,以便我们帮助您诊断代码中可能出现的问题?
,我已经解决了这个问题。
我使用了 2 台设备,我的电脑和我的安卓手机。 实际上,我电脑的蓝牙不支持 BLE。这就是为什么我一直在努力调试的原因,因为我的桌面版 chrome 在尝试连接我的热敏打印机后一直没有响应。
基本上,出现错误号 2 是因为我发送了一个编码字符串值,而不是 UInt8Array 值。
最终,我使用了 2 个 Web API。 web 蓝牙 API 用于将我的 PWA 从移动设备连接到我的热敏打印机,而 web 串行 API 用于将我的 PWA 从桌面连接到我的热敏打印机。库 ng-thermal-printer
非常适合我的项目。我只需要扩展驱动程序。