Прочитайте сервис от умного браслета Bluetooth с помощью родного плагина ionic - PullRequest
0 голосов
/ 28 сентября 2018

Я работаю над ионным приложением, которое считывает сердечный пульс и артериальное давление с умного браслета Bluetooth.Я использовал родной плагин ionic для доступа к функциям Bluetooth.В моем случае обнаружение и подключение к устройству работает нормально.Но когда я пытаюсь прочитать какой-либо сервис, он говорит: «Не удалось получить конкретный сервис».В моем коде testService() - это просто функция, которую я создал для чтения указанной службы с устройства.

testService () function

testService(deviceId, service, charac) {
    // Subscribe for notifications
   this.ble.startNotification(deviceId, service, charac).subscribe(
     data => this.onValueChange(data, service+"|"+charac),
     () => this.alertMsg('Unexpected Error', 'Failed to subscribe for ' + service + " | " + charac)
   );

  // Read the current value
  this.ble.read(deviceId, service, charac).then(
    data => {
      this.onValueChange(data, service+"|"+charac);
    },
    () => this.alertMsg('Unexpected Error', 'Failed to get ' + service + " | " + charac)
  );
}

Это весь мой код JavaScript.

import { Component, ViewChild, NgZone } from '@angular/core';
import { IonicPage, NavController, NavParams, AlertController, ToastController } from 'ionic-angular';
import { BLE } from '@ionic-native/ble';
import { Storage } from '@ionic/storage';


@IonicPage()
@Component({
  selector: 'page-heart-rate',
  templateUrl: 'heart-rate.html',
})


export class HeartRatePage {

  private isConnected: boolean;

  conDevice: any;        //connected device

  constructor(public navCtrl: NavController, 
    public navParams: NavParams,
    private ble: BLE,
    private storage: Storage,
    private alertCtrl: AlertController,
    private toastCtrl: ToastController,
    private ngZone: NgZone
  ) {
  }

  ionViewDidEnter() {
    this.isConnected = false;

    this.storage.get('last-connected-device').then((val) => {           //check if a device is connected
      this.ble.isConnected(String(val.id)).then(
        () => {
          this.conDevice = val;
          this.isConnected = true;
          this.testService(this.conDevice.id, "180D", "2A37");          //reading the service (heart rate)
        }, 
        () => {
        }
      );
    }).catch( err => {

    });
  }


//this method will read device for a specified service
testService(deviceId, service, charac) {
    // Subscribe for notifications
   this.ble.startNotification(deviceId, service, charac).subscribe(
     data => this.onValueChange(data, service+"|"+charac),
     () => this.alertMsg('Unexpected Error', 'Failed to subscribe for ' + service + " | " + charac)
   );

  // Read the current value
  this.ble.read(deviceId, service, charac).then(
    data => {
      this.onValueChange(data, service+"|"+charac);
    },
    () => this.alertMsg('Unexpected Error', 'Failed to get ' + service + " | " + charac)
  );
}


onValueChange(buffer:ArrayBuffer, text:string) {
  var data = new Float32Array(buffer);
  var dataString = String.fromCharCode.apply(null, data);
  this.ngZone.run( () => {
     let toast = this.toastCtrl.create({
       message: 'value change: ' + text +'::'+ data[0],
       duration: 2000
     });
     toast.present();
  } );
}


//this method will popup an alert
alertMsg(title, message) {
  let alert = this.alertCtrl.create({
    title: title,
    message: message,
    buttons: [
      {
        text: 'Ok'
      }
    ]
  });
  alert.present();
}

}

Может ли кто-нибудь помочь мне определить, что я здесь сделал не так?

1 Ответ

0 голосов
/ 03 февраля 2019

Изучив немного больше об этом вопросе, я наконец нашел ответ.Я публикую его здесь для всех, кто интересуется будущим.

Оказывается, многие из устройств Bluetooth не используют службу по умолчанию и характерные UUID.В приведенном выше коде я использую UUIDs службы по умолчанию и характерные UUID («180D», «2A37»).Устройство, которое я использовал для тестирования своего кода, даже не имеет такого сервиса.Вот почему я получил Failed to get the particular service.

Так что решение состоит в том, чтобы как-то выяснить UUID службы и характеристику устройства и написать код для этих конкретных значений.

...