当前位置: 首页 > 知识库问答 >
问题:

当连接并从BLE设备接收数据时,我得到DOM异常:不允许GATT服务器操作

祝叶五
2023-03-14

我使用网络蓝牙api连接BLE 4.0拖拉机拖车测试仪模块使用JavaScript。当连接我得到我的控制台

正在请求任何蓝牙设备。。。正在连接GATT服务器。。。得到服务。。。获取特征。。。然后DOM异常:GATT服务器操作不允许我不知道为什么会出现这个错误。有人能解释为什么会这样吗?

async function onConnect() {

  try {

    console.log('Requesting any Bluetooth Device...');
    const device = await navigator.bluetooth.requestDevice({
      acceptAllDevices: true
    });

    console.log('Connecting to GATT Server...');
    const server = await device.gatt.connect();

    console.log('Getting Service...');
    const service = await server.getPrimaryService('ef160001-ec80-4b4e-b481-b6c995777b5f');

    console.log('Getting Characteristics...');
    const characteristics = await service.getCharacteristics();

    for (const characteristic of characteristics) {
      switch (characteristic.uuid) { // characteristic.uuid

        case 'ef160003-ec80-4b4e-b481-b6c995777b5f': // receive
          await readValue1(characteristic);
          break;

        case 'ef160002-ec80-4b4e-b481-b6c995777b5f': // write
          await readAppearanceValue2(characteristic);
          break;

        case '00002a04-0000-1000-8000-00805f9b34fb': // Manufacturer Name String
          await readValue3(characteristic);
          break;

        case '00002aa6-0000-1000-8000-00805f9b34fb':
          await readValue4(characteristic); // Central Address Resolution
          break;

        default: console.log('Unknown Characteristic: ' + characteristic.uuid);
      }
    }

  } catch (error) {
    console.log(error)
  }

  async function readValue1(characteristic) {

    const value = await characteristic.readValue();
    $('#dataset1').text(new TextDecoder().decode(value));
    console.log(new TextDecoder().decode(value));
  }

  async function readAppearanceValue2(characteristic) {

    const value = await characteristic.readValue();
    $('#dataset2').text(new TextDecoder().decode(value));
    console.log(new TextDecoder().decode(value));
  }

  async function readValue3(characteristic) {

    const value = await characteristic.readValue();
    $('#dataset3').text(new TextDecoder().decode(value));
    console.log(new TextDecoder().decode(value));
  }

  async function readValue4(characteristic) {

    const value = await characteristic.readValue();
    $('#dataset4').text(new TextDecoder().decode(value));
    console.log(new TextDecoder().decode(value));
  }

}

共有1个答案

钱言
2023-03-14

我相信你遇到的不是与网络蓝牙相关的问题,而是蓝牙核心规范(版本5.0第3卷,F部分,3.4.1.1)中描述的GATT协议错误

我认为这些蓝牙特性不能被读取,因此为什么promise拒绝这个映射到世界上“不允许读取”GATT错误。您可能需要将一些字节写入专用特性,以便GATT服务器允许读取。我建议阅读软件留档,如果它存在,否则戳可能会有所帮助。在这种情况下,请查看chrome://蓝牙内部构件,以使用服务/特性。

看见https://web.dev/bluetooth/#tips以及调试Web Bluetooth的提示。

 类似资料:
  • 问题内容: 我想用BLE扫描某些设备。我只想显示我的设备,所以我知道了设备的名称,如果是好的设备,我会将其放在列表中。 我的问题是,如果我更改设备的名称,此检查将为false。因此,我看是否有可能获得一些我添加的用于执行检查的服务的不变的东西。唯一的方法是使用gatt在发现服务后执行此操作,然后再连接到该设备,但是,是否有可能在不连接设备的情况下从该设备发现某些服务? 问题答案: 我不具备andr

  • 问题内容: 我又来了。 所以,长话短说:在我的应用程序中,我试图借助Android Samples(that)从BLE设备(滴答心率监测器:that)接收数据。但是…我没有从我的设备接收数据!我可以得到特征和描述符,但是……仅此而已。我只是.. 错过了重点 。这是我的代码: __ 这是我的日志: 问题答案: 您有一个电话,但没有回调来接收该值。它是BluetoothGattCallback的一部分

  • 问题内容: 我正在尝试创建一个注册页面,它将信息添加到SQL表中。这是我执行此操作的PHP代码…谁能告诉我这是什么错误? 它给出了以下错误: 问题答案: 如果您的mysql数据库不在同一服务器(本地主机)上,则需要为该服务器的mysql用户/数据库从远程服务器授予访问权限。请参阅本文以获取一些可能对您有所帮助的步骤。听起来好像很遥远。 https://support.rackspace.com/h

  • Android问题 一旦我的设备收到数据从GATT服务器,一次收到数据后,它被断开连接。我尝试了许多不同的方法,但都不起作用。我已经阅读了整个网址也...Android4.3蓝牙低能耗不稳定

  • 这听起来很基本,但我是Android BLE开发的初学者。到目前为止,我能够创建我的Nexus9设备作为外围设备和Moto G作为中心设备。而且我正在成功连接设备。但我不知道当我从中央设备发送一个特性时,它将从外设接收到哪里?广告回调仅在广告启动成功而不是(在我的例子中是成功的)时才返回 这是我的外设代码 我正在从中央使用连接的Gatt的writeCharacteristic命令,但不知道如何从外

  • 我在为我的BLE设备开发Android软件时遇到了麻烦。我的软件可以找到我的设备和GATT服务,但在我的服务中找不到任何特征。 我查看了android-sdk-4.4.2源代码,发现了一些代码。https://android.googlesource.com/platform/external/bluetooth/bluedroid//android-sdk-4.4.2\u r1https://a