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

问题描述

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

到目前为止我所做的进展,我可以在服务和特征中连接并向热敏打印机设备发送一个值,让我们说带有 UUID AS 的服务和带有 UUID AC 的特征,在应用程序的帮助下使用我的 Android 手机名为 nRF Connecttargeting Service AS并以特征AC发送十六进制值使我成功地在热敏纸上打印了一些东西。

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

  1. Origin 不允许访问任何服务......它告诉我在 requestiDevice() 时添加 optionalServices
  2. 属性 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 非常适合我的项目。我只需要扩展驱动程序。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...