1

我一直在使用 sensortag cc2650stk研究 react-native-ble-plx,并且在获取加速度计和陀螺仪数据时遇到问题。

Error: Characteristic "f000aa82-0451-4000-b000-000000000000" write failed for device xxxxxx and service "f000aa80-0451-4000-b000-000000000000"

ticc2650 传感器标签的所有其他传感器工作正常。如湿度、温度、气压计等。

constructor() {
    super();
    this.manager = new BleManager()
    this.state = {info: "", values: {}}
    this.prefixUUID = "f000aa"
    this.suffixUUID = "-0451-4000-b000-000000000000"
    this.sensors = {
     0: "Temperature",
     8: "Accelerometer",
     2: "Humidity",
     7: "Magnetometer",
     4: "Barometer",
    // 5: "Gyroscope"
    }
  }
  serviceUUID(num) {
    return this.prefixUUID + num + "0" + this.suffixUUID
  }

  notifyUUID(num) {
    return this.prefixUUID + num + "1" + this.suffixUUID
  }

  writeUUID(num) {
    return this.prefixUUID + num + "2" + this.suffixUUID
  }

我的 sensortag Movemnet UUIDS 是:

MOVEMENT_SERVICE = 'f000aa80-0451-4000-b000-000000000000';
MOVEMENT_DATA = 'f000aa81-0451-4000-b000-000000000000';
MOVEMENT_CONFIG = 'f000aa82-0451-4000-b000-000000000000';
MOVEMENT_PERIOD = 'f000aa83-0451-4000-b000-000000000000';
MOVEMENT_NOTIFICATION = '00002902-0000-1000-8000-00805f9b34fb';
if (device.name === 'CC2650 SensorTag' || device.name === 'SensorTag') {
        this.info("Connecting to TI Sensor")
        this.manager.stopDeviceScan();
        device.connect()
          .then((device) => {
            this.info("Discovering services and characteristics")
            return device.discoverAllServicesAndCharacteristics()
          })
          .then((device) => {
            this.info("Setting notifications")
            console.log(device);
            return this.setupNotifications(device)
          })
          .then(() => {
            this.info("Listening...")
          }, (error) => {

            this.error(error.message)
          })
      }
async setupNotifications(device) {
    for (const id in this.sensors) {
      //id = 8;
      const service = this.serviceUUID(id);
      const characteristicW = this.writeUUID(id);
      const characteristicN = this.notifyUUID(id);

      const characteristic = await device.writeCharacteristicWithResponseForService(
        service, characteristicW, "AQ==" /* 0x01 in hex */
      )

      device.monitorCharacteristicForService(service, characteristicN, (error, characteristic) => {
        if (error) {

          this.error(error.message)
          return
        }
        console.log(characteristic.uuid+":::"+characteristic.value);
        this.updateValue(characteristic.uuid, characteristic.value)
      })
    }
  }

适用于其他传感器,但不适用于陀螺仪和加速度计。

4

1 回答 1

2

当我们用十六进制写“AQ==”/0x01/时,其他传感器工作正常/但是对于运动传感器,我们需要在通知功能中为 0x01 添加“MDE=”

const characteristic = await device.writeCharacteristicWithResponseForService(
        service, characteristicW, "AQ==" /* 0x01 in hex */
      )

我不知道他们为什么这样做,但这为我解决了这个问题。

于 2019-05-18T08:35:59.467 回答