难以通过网络蓝牙连接热敏打印机

Difficult To Connect Thermal Printer via Web Bluetooth

现在我正在开发能够连接热敏打印机的网络。我正在使用 angular 框架,并且我使用库 ng-thermal-printer 成功地将热敏打印机连接到 USB。但我希望我的网络也能够通过 BLE(低功耗蓝牙)的网络蓝牙连接热敏打印机。据我所知,BLE有GATT的规范,里面有服务和特性。

到目前为止我取得的进展,我可以使用我的 android 连接服务和特征中的热敏打印机设备并向其发送值,假设服务具有 UUID AS,特征具有 UUID AC phone 在名为 nRF Connect 的应用程序的帮助下。定位服务 AS 并在特征 AC 发送十六进制值使我成功地在热敏纸上打印了一些东西。

但是有个问题。了解正确的服务和特点后。我在我的项目中实现了它。但是,我的 chrome 浏览器控制台显示错误:

  1. Origin 不允许访问任何服务...它告诉我在 requestiDevice() 时添加 optionalServices
  2. 我在属性optionalServices中添加Service AS后,控制台显示错误DOMException: Connection failed for unknown reason。 chrome PC 和 chrome android.
  3. 中均显示错误

注意:

补充问题。应用程序 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 台设备,我的电脑和我的 android phone。 实际上,我的电脑的蓝牙不支持BLE。这就是为什么我一直在努力调试,因为我的 chrome 桌面版在尝试连接我的热敏打印机后一直没有响应。

基本上,出现错误号 2 是因为我发送了一个编码字符串值,而不是 UInt8Array 值。

最终,我使用了 2 个网络 API。网络蓝牙 API 用于将我的 PWA 从移动设备连接到我的热敏打印机,网络串行 API 用于将我的 PWA 从桌面连接到我的热敏打印机。库 ng-thermal-printer 非常适合我的项目。我只需要扩展驱动程序。