LoginSignup
6
9

More than 5 years have passed since last update.

RxBluetoothKitとRxAndroidBleでreadしてみる

Posted at

はじめに

以前から気になっていたRxを使用したBLEライブラリを試してみました。

RxBluetoothKitでreadしてみる

RxBluetoothKitを使用しました。
導入や使い方はREADMEでなんとなくわかると思います。

環境

XCode: 9.2
Swift: 4.0

Serviceの定義


enum SampleService: String, ServiceIdentifier {
    case Sensor = "SensorServiceUUIDを書く"
    case Device = "DeviceServiceUUIDを書く"
    case Battery = "BatteryServiceUUIDを書く"

    var uuid: CBUUID {
        return CBUUID(string: self.rawValue)
    }
}

Characteristicの定義


enum SampleSensorCharacteristic: String, CharacteristicIdentifier {
    case HeartRate = "HeartRateCharacteristicUUIDを書く"
    case Temperature = "TemperatureCharacteristicUUIDを書く"

    var uuid: CBUUID {
        return CBUUID(string: self.rawValue)
    }

    var service: ServiceIdentifier {
        return SampleService.Sensor
    }
}

Readしてみる

        let manager = BluetoothManager(queue: queue)
        manager
            .rx_state
            .filter { $0 == .poweredOn }
            .take(1)
            .flatMap { _ in manager.scanForPeripherals(withServices: nil).take(1) }
            .flatMap { $0.peripheral.connect() }
            .flatMap { $0.readValue(for: SampleSensorCharacteristic.Temperature) }
            .subscribe(onNext: { print("value:\([UInt8]($0.value!))")})
            .disposed(by: disposeBag)

RxAndroidBleでreadしてみる

RxAndroidBleを使用しました。
導入や使い方はREADMEでなんとなくわかると思います。

環境

AndroidStudio: 3.0
kotlin: 1.1.51

Readしてみる

        val TEMPERATURE_UUID = UUID.fromString("TemperatureCharacteristicUUIDを書く")
        val rxBleClient = RxBleClient.create(context)
        val setting = ScanSettings.Builder().build()
        rxBleClient.observeStateChanges()
                .startWith(rxBleClient.state)
                .filter { it == RxBleClient.State.READY }
                .flatMap { rxBleClient.scanBleDevices(setting).take(1) }
                .flatMap { it.bleDevice.establishConnection(false) }
                .flatMap { it.readCharacteristic(TEMPERATURE_UUID) }
                .subscribe({ value ->
                    Log.i("BLE sample", Arrays.toString(value))
                }, { error ->
                    Log.e("BLE sample", error.toString())
                })

終わりに

  • Ble実装はcallbackやdelegate地獄になりやすいですが、簡潔にかけるのではないでしょうか。
  • Rxで統一することでiOS、Androidの処理の流れに統一感が出るのではないでしょうか。
  • 今回は時間がなくてreadを試しただけですが、writeやnotify、その他細かい実装もやってみたいと思います。
6
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
9