微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

React Native 和 react-native-ble-plx

如何解决React Native 和 react-native-ble-plx

首先我想说我刚开始连接蓝牙和 BLE,所以我的问题是为了了解它是如何工作的。

我正在开发一个 React Native APP,我必须在其中连接到 BLE 设备。

我使用 react-native-ble-plx 来管理连接。

现在,我可以连接到我的设备、读取服务并获取特征和描述符。

我需要从 BLE 控制器接收 JSON 字符串(我认为这些特性应该可以完成这项工作,但我不确定)并且我还需要发送 JSON 以与 BLE 对话。

所以,我以这种方式连接我的设备:

this.manager.stopDeviceScan();
mDevice = await device.connect();

然后,我获得所有服务:

mDevice = await mDevice.discoverAllServicesAndcharacteristics();
const discoveredServices = await mDevice.services();

我可以找到我需要实现的服务及其特点:

const mainService = discoveredServices.filter(service => service.uuid === MY_SERVICE)[0];
const characteristics = await mDevice.characteristicsForService(mainService.uuid);

从这一点来看,一切都是黑色的......我的意思是,我可以读取字符描述符,其中一些有一个值,例如,AAA= 或 AQA=,假设它是 base64,但解码什么也没给我。

我想做的是从某个地方读取一个 JSON 字符串,但我找不到它。

我尝试了很多东西,最后一个

 // FOREACH CHaraCTERISTIC
 for (let i = 0; i < characteristics.length; i++) {
    const char = characteristics[i];
    let value = '';
    // GET DESCRIPTORS
    const descriptors = await char.descriptors();
    for (let e = 0; e < descriptors.length; e++) {
      const descriptor = descriptors[e];
      // READING THE DESCRIPTOR
      const descRead = await descriptor.read();
      if (descRead) {
        // GET VALUE
        value += 'ORIGINAL: ' + descRead.value + '; DECODED: ' + base64.decode(descRead.value);
      }
    }
    
    // VALUES ARE ALWAYS: AAA= OR AQA=
    Alert.alert('Valor',value);
    ...
}

所以在描述符中我找不到我需要的信息,所以我尝试使用监视和写入特性以使用 BLE 登录

  // TRYING TO GET NOTIFICATIONS OR I DONT KNow...
  const monitor = char.monitor((error,characteristic) => {
      if (error) {
        console.warn(error);
        monitor.remove();
        return;
      }
      // THERES NO VALUES...
      console.log('MONITOR: ' + characteristic?.value);
    });

    // TRYING TO WRITE JSON LOGIN STRING TO CHAR
    const status = await this.manager
      .writeCharacteristicWithResponseForDevice(
        mDevice.id,char.serviceUUID,char.uuid,JSON.stringify(MY_LOGIN_DATA),)
      .catch(err => console.log(err));
    // norMALLY EMPTY BUT SOMETIMES HAS A CHAR OBJECT AS A VALUE 
    if (status) {
      const read = await char.read().catch(err => console.log(err));
    }
  }

我认为我真正的问题是我不明白它是如何工作的,我认为这就像将数据发送到 REST 服务或类似的东西,但我很迷茫......

我查看了 GATT 文档,那里很清楚,但实践让我很痛苦。

有什么好的教程吗?有什么推荐吗?

提前致谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?