【问题标题】:Difficult To Connect Thermal Printer via Web Bluetooth难以通过网络蓝牙连接热敏打印机
【发布时间】:2021-08-29 00:48:57
【问题描述】:

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

到目前为止,我可以在服务和特性中连接热敏打印机设备并将值发送到热敏打印机设备,假设使用 UUID AS 的服务和使用 UUID AC 的特性,在应用程序的帮助下使用我的 Android 手机命名为 nRF 连接。以服务 AS 为目标并以特征 AC 发送十六进制值使我成功地在热敏纸上打印了一些东西。

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

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

注意:

  • 我已在 chrome 上启用了实验性 Web 平台功能
  • 我已启用在 chrome 上为 Web 蓝牙使用新权限后端
  • 我已经为从本地主机加载的资源启用了允许无效证书。在铬上
  • 我已启用在 chrome 上启用新的 USB 后端
  • 我用过https。

附加问题。应用程序 nRF Connect 使用的蓝牙连接与 BLE 不同吗?如果是,为什么它会显示服务和特征?

【问题讨论】:

    标签: javascript angular progressive-web-apps web-bluetooth


    【解决方案1】:

    我已经解决了这个问题。

    我使用了 2 台设备,我的电脑和我的安卓手机。 实际上,我的 PC 的蓝牙不支持 BLE。这就是为什么我一直在努力调试,因为我的桌面版 chrome 在尝试连接我的热敏打印机后一直没有响应。

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

    最终,我使用了 2 个 Web API。用于将我的 PWA 从移动设备连接到我的热敏打印机的网络蓝牙 API 和用于从桌面将我的 PWA 连接到我的热敏打印机的网络串行 API。图书馆ng-thermal-printer 对我的项目有好处。我只需要扩展驱动程序。

    【讨论】:

    • 不知道你是怎么做到的
    • @Markus 我只使用那个库。非 ble 设备的串行和 ble 设备的 ble。因为在我的情况下,如果我将 ble 用于非 ble 设备,edge 和 chrome 就会冻结
    【解决方案2】:

    我建议您尝试直接从about:bluetooth-internals 页面发送这些十六进制值,看看您是否也可以从那里重现连接错误。见https://web.dev/bluetooth/#tips

    如果是这样,请查看 https://www.chromium.org/developers/how-tos/file-web-bluetooth-bugs 了解如何正确提交 Chromium 错误,以便团队解决根本问题。

    如果没有,您能否分享您的 JS 代码,以便我们帮助您诊断代码中可能出现的问题?

    【讨论】:

    • 已修复。感谢您抽出宝贵时间回答我的问题。
    猜你喜欢
    • 1970-01-01
    • 2011-08-22
    • 2018-04-28
    • 2019-11-23
    • 2019-01-27
    • 2019-08-27
    • 2022-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多