Невозможно прочитать из BLE с реагировать-родной-ble-plx - PullRequest
0 голосов
/ 05 февраля 2020

На моем компьютере с Ubuntu я использую React Native и пакет BLE реактивный-native-ble-plx.

Согласно документам, я сделал следующее:

  1. Сканировано для устройств
  2. Подключено к устройству
  3. device.discoverAllServicesAndCharacteristics
  4. writeCharacteristicWithResponseForDevice

Моя проблема заключается в чтении ответа, полученного от отправки моя команда.

RX характеристика c доступна для записи, но TX только для уведомления и не для чтения. Поэтому мне нужно отслеживать характеристики c с помощью monitorCharacteristicForDevice, однако я не могу заставить это работать.

Я никогда не получаю ни «Монитор успеха», «Ошибка при получении данных с устройства», ни «Ошибка монитора» 'в коде ниже.

Как мне прочитать возврат?

monitorDevice = () => {
    this.setState({monitoring: true})
    console.log(this.state.servicesDiscovered)
    if(this.state.servicesDiscovered){
        {this.manager.monitorCharacteristicForDevice(this.state.connectedTo,
            SERVICE_UUID,
            TX_CHARACTERISTIC,
            (error, characteristic) => {
                if (error) {
                    console.error("Error at receiving data from device", error);
                    return     
                }
                else {
                    this.setState({monitoring: true})
                    console.log('monitor success')
                    console.log('monitor success' + characteristic.value);
                    this.state.messagesRecieved.push(characteristic.value)
                }
            })
        }
      }
      else{
          console.log("Monitor failure")
    }
}

checkBattery = () => {
    if(this.state.monitoring){
        this.manager.writeCharacteristicWithResponseForDevice(this.state.connectedTo,
            SERVICE_UUID,
            RX_CHARACTERISTIC,
            "YmF0dGVyeQ==")
        .then(characteristic => {
            console.log("Successfully sent: " + characteristic.value)
            return
        })
        .catch(err => {
            console.log(err)
        })
    }
    else{
        alert("Not monitoring")
    }
}
...