问题标签 [web-bluetooth]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 如何创建到 Telit BLE 模块的终端 I/O 连接?
我正在为安卓平板电脑编写一个渐进式网络应用程序,它应该能够通过 BLE 连接读取和写入具有嵌入式 Telit BLE 模块的设备。
我能够打开 BLE 连接并发现服务和特征。我无法使用 Telit 的终端 I/O (TIO) 协议通过 BLE 建立连接。
我的远程(服务器)设备是 Falcom Fox3 跟踪器单元。建立连接时,可以从 Fox3 串行端口读取通知事件。这已通过使用 Telit 的 android 终端应用程序连接到 Fox3 成功测试:https: //play.google.com/store/apps/details? id=com.telit.tiosample
我已经整理了一个简短的功能,它应该通过 BLE 连接,建立 TIO 连接并在侦听来自服务器的传入数据之前请求 UART 信用。
我的代码基于 Smashing Magazine 的一个简单脚本: https ://www.smashingmagazine.com/2019/02/introduction-to-webbluetooth/
Telit 的终端 I/O 配置文件客户端实施指南中给出了启动 TIO 连接的过程。
终端 I/O 连接设置包括以下步骤:
- 终端 I/O 客户端扫描广告终端 I/O 服务的蓝牙低功耗设备。
- 终端 I/O 客户端与检测到的终端 I/O 服务器建立低功耗蓝牙 GATT 连接。
- 终端 I/O 客户端在终端 I/O 服务器上执行服务发现。
- 对于检索到的终端 I/O 服务,终端 I/O 客户端执行特征发现。
- 终端 I/O 客户端订阅 UART credits TX 特性的指示(见 7.4)。
- 终端 I/O 客户端订阅 UART 数据 TX 特性的通知(见 7.2)。
- 终端 I/O 客户端将初始 UART 信用发送到服务器(见 7.5)。
- 一旦终端 I/O 客户端收到对发送的 UART 信用的响应,则认为终端 I/O 连接已建立,并且应随时期待 UART 信用 TX 特性的指示和 UART 数据特性的通知。
连接建立顺序的顺序是强制性的。
我的代码如下,其中 log 是一个输出到屏幕的函数。
这运行没有错误,似乎在我的客户端 android 设备上建立了蓝牙连接。我希望服务器响应连接,触发事件并报告回来。不会发生此类连接事件。
我是网络蓝牙新手,对 JavaScript 有点生疏,所以不确定我是否使用了正确的调用 - 特别是对于“订阅”。如果有人能澄清在这种情况下订阅涉及什么,那肯定会帮助我理解。
编辑:一旦我弄清楚终端 I/O 连接指令如何转换为 JS,我就能够让连接运行。
我像这样执行了这些步骤:“对于检索到的终端 I/O 服务,终端 I/O 客户端执行特征发现。”
“终端 I/O 客户端订阅 UART 信用 TX 特性的指示(参见 7.4)。”
“终端 I/O 客户端订阅 UART 数据 TX 特性的通知(参见 7.2)。”
“终端 I/O 客户端将初始 UART 信用传输到服务器(参见 7.5)。”
javascript - web-bluetooth 从设备 GATT 获取存储的数据
我的目标是获取存储在设备中的数据。
就像正在测量温度或其他任何东西并将其存储到内存中的设备。我需要通过记录访问控制点 (RACP) 查询所有这些数据设备。
实现它的第一个想法是
获得特征
开始通知
将代码写入描述符
通过 eventListener 获取所有数据
结果:在启动通知时抛出错误使用的示例:
https://googlechrome.github.io/samples/web-bluetooth/notifications-async-await.html https://bugs.chromium.org/p/chromium/issues/detail?id=664863
- 下一个想法是不启动通知,因为特征是 INDICATE,WRITE 类型。因此正在考虑添加侦听器并写入设备文档中的描述符代码,其中指出:
OP Code: 1 – 报告存储的记录
即使删除了 startNotifications 行也会引发错误,所以我的代码示例是:
通知错误是(使用实验性 chrome 功能不会引发错误):
错误:GATT 操作因未知原因而失败。
描述符的错误是:
writeValue() 在标记为排除写入的黑名单对象上调用。
我的设备也要求输入密码,但网络正在连接而没有任何提示。所以也许它说写入描述符被阻止了。
如何处理 pin 输入 - 没有线索(一旦我在启用 chrome 实验功能后提示输入 pin 并不确定它是否相关)。
我的逻辑正确吗?- 不这么认为。
有什么建议么?
到目前为止我调查了什么?
- https://googlechrome.github.io/samples/web-bluetooth/
- https://www.oreilly.com/library/view/getting-started-with/9781491900550/ch04.html
- https://webbluetoothcg.github.io/web-bluetooth/
编辑:阅读本文后 - https://medium.com/@devdevcharlie/experimenting-with-web-bluetooth-1f1176047ddd
我认为正确的逻辑应该是,写入您需要的命令特征命令(例如获取所有数据)。之后从设备文档中找到负责此数据的正确特征,并启动通知并添加 eventListener 并接收数据。
android - Web蓝牙:将连接网站的域名安全发送到Android App
Android BLE Peripheral Simulator应用程序与Web 蓝牙示例相结合,为开发人员提供了巨大的资源。在示例网页中,一旦用户单击提交按钮,就会显示蓝牙配对屏幕。
一旦用户从配对屏幕中选择了一个设备,就会自动建立与 Android 应用程序的连接。
是否有可能对 Android 应用程序进行安全检查,只允许来自特定域的连接?最重要的是,Web 蓝牙 API 是否可以安全地将域发送到 Android 应用程序(它显示在配对屏幕的顶部,因此可用)?
这需要某种元数据过程调用;简单地从网页调用 JavaScript 方法到 sendDomain("Domain Name") 当然是不安全的。
在将问题发布到 StackOverflow 之前,我通常会尝试花一个小时左右的时间研究问题。我在这个概念上找不到任何东西。网络蓝牙草案中没有出现“域”一词。Web Bluetooth 和 Web NFC早期有一些关于域的讨论;但是,我找不到任何当前的参考资料或示例。
谢谢!
javascript - Web-Bluetooth:导航器的自定义类型
我正在为我的设备编写一个浏览器应用程序,它将通过蓝牙进行通信。
有人可以帮我打字吗?
我正在尝试访问navigator
对象中的蓝牙属性:
但我有:error TS2339: Property 'bluetooth' does not exist on type 'Navigator'.
即使在安装 @type/web-bluetooth 之后
有2种来源node_modules/typescript/lib/lib.dom.d.ts
和node_modules/@types/web-bluetooth/index.d.ts
tsConfig:
如何选择正确的?
javascript - “GATT 错误:未配对。” 当设备显示为已连接时使用网络蓝牙
我正在尝试使用带有网络蓝牙 api 的 BLE 从我的 Windows 10 机器连接到 Microchip“RN4678”双模蓝牙设备。我可以找到设备 -> 服务 -> 我需要的特性,但我不断收到“GATT 错误:未配对”。尝试启动有关特征的通知时。
我的 JavaScript 经验很少,所以我认为我可能一直在错误地链接我的承诺,但是在尝试添加特征之前直接打印出设备信息显示“已连接”的值为 true。
我还验证了设备、服务和特性是否可以与我的 android 设备上的“nRF Connect”应用程序一起正常工作。
这是我的代码:
这是我得到的控制台消息:
这是网络蓝牙 startNotifications() 函数的文档(https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattcharacteristic-startnotifications):
当调用 startNotifications() 方法时,必须返回一个新的 Promise Promise 并并行运行以下步骤。有关接收通知的详细信息,请参阅 §5.6.4 响应通知和指示。
- 如果 this.uuid 被列入读取阻止名单,则使用 SecurityError 拒绝承诺并中止这些步骤。
- 如果 this.service.device.gatt.connected 为 false,则使用 NetworkError 拒绝承诺并中止这些步骤。
- 让特征是this.[[representedCharacteristic]]。
- 如果特征为空,则返回一个被 InvalidStateError 拒绝的承诺并中止这些步骤。
- 如果 Notify 或 Indicate 位都没有在特性的属性中设置,则使用 NotSupportedError 拒绝承诺并中止这些步骤。
- 如果特征的活动通知上下文集包含 navigator.bluetooth,则使用此解决承诺并中止这些步骤。
如果 UA 当前正在使用蓝牙系统,它可能会使用 NetworkError 拒绝承诺并中止这些步骤。ISSUE 9:实现可能能够避免此 NetworkError,但目前站点需要序列化他们对该 API 的使用和/或为用户提供重试失败操作的方法。 https://github.com/WebBluetoothCG/web-bluetooth/issues/188
如果特征具有客户端特征配置描述符,则使用任何特征描述符过程来确保设置特征的客户端特征配置描述符中的通知或指示位之一,匹配特征属性中的约束。UA 应该避免设置这两个位,并且如果两个位都设置了,则必须对值更改事件进行重复数据删除。按照 §5.7 错误处理中的描述处理错误。注意:某些设备的特性包括通知或指示位,但没有客户端特性配置描述符。这些不符合标准的特性倾向于无条件地发送通知或指示,因此该规范允许应用程序简单地订阅它们的消息。
如果上一步返回错误,则拒绝带有该错误的承诺并中止这些步骤。
- 将 navigator.bluetooth 添加到特征的活动通知上下文集中。
- 以此来兑现诺言。启用通知后,直到当前微任务检查点之后才会传递生成的值更改事件。这允许开发人员在结果承诺的 .then 处理程序中设置处理程序。
编辑:我使用的是 Chrome 版本 74,Windows 10.0.17134
bluetooth-lowenergy - 网络蓝牙可以在 BLE-mesh 中提供节点吗?
我有一个网络应用程序需要与 BLE-mesh 中的大约 48 个 BLE 设备进行通信。
我发现 Web-bluetooth 可以与一个蓝牙设备一起使用,但找不到是否有办法提供 BLE-mesh,然后使用 Web-bluetooth 将消息发送到网格中的节点。
如果重要的话,我把它放在这里作为信息,网络应用程序是一个用 Typescript 编写的 Angular 应用程序。对于网络蓝牙,我正在使用这个库https://github.com/manekinekko/angular-web-bluetooth。
javascript - 您可以使用服务工作者在网络蓝牙中运行后台 iBeacon/Eddystone 扫描吗?
随着新的网络蓝牙功能的发布,我相信 iBeacon/Eddystone 信标扫描在使用网络蓝牙的 PWA 中是可能的。我正在运行一个用例,我想要一些帮助来实现后台服务工作者,它使用 chrome 服务工作者或智能手机中的类似工具在后台扫描信标?
这可能吗?如果可以,怎么办?
javascript - 使用 Web 蓝牙 API 获取广告数据
我一直在尝试使用 Web 蓝牙 API 获取附近的 BLE 广告。我一直在遵循此链接中的步骤。
链接中已经提到,为了扫描附近的 BLE 广告,navigator.bluetooth.requestLEScan()可以在不久的将来使用。
我能够使用此 API 发现附近的设备列表并单独与设备配对。
有没有办法在不单独配对设备的情况下获取附近的 BLE 广告?requestLEScan()是否已实现或仍在开发中?