Как читать данные BLE из Arduino? - PullRequest
0 голосов
/ 03 мая 2020

Я хочу отправить данные из Arduino через контроллер BLE обратно в мое приложение Android, но у меня проблема с чтением данных.

Я думаю, что это будет возвращено в onCharacteristicRead(), но я читаю странно значения там. Иногда возвращаются странные символы. Может быть проблема в том, что Kotlin не может правильно воссоздать значение String из ByteArray.

Код Arduino:

mySerial.print("102");

Код Android: я вызываю эту функцию сразу после инициализации соединения с устройством BLE. Тогда он должен вернуть значение в BluetoothGattCallback()

private fun readInitDeviceStatus(){
        bleCustomService?.let { customService ->
            val characteristics = customService.getCharacteristic(BLE_HM10_DATA_READWRITE_CHAR_UUID)
            bleGatt?.let {gatt->
                if (gatt.readCharacteristic(characteristics)){
                    App.log("Process: readData - data read success")
                } else {
                    App.log("Process: readData - data read failed")
                    App.showToast(this@MainActivity, getString(R.string.err_bluetooth_data_err))
                }
            }?:kotlin.run {
                App.log("GATT is null")
            }
        }?:kotlin.run {
            App.log("GATT service is null")
        }
    }





override fun onCharacteristicRead(
            gatt: BluetoothGatt?,
            characteristic: BluetoothGattCharacteristic?,
            status: Int
        ) {
            super.onCharacteristicRead(gatt, characteristic, status)
            characteristic?.let { readChar->
                when (status) {
                    BluetoothGatt.GATT_SUCCESS -> {
                        if (readChar.uuid == BLE_HM10_DATA_READWRITE_CHAR_UUID){
                            val bleResp = readChar.getStringValue(0)
                            App.log("Process: onCharacteristicsRead: $bleResp")
                            if (bleResp == "101" || bleResp == "102"){
                                App.log("Process: onCharacteristicsRead - change state")
                                changeButtonState(bleResp == "102")
                                post(300){ sendMessageToBlDevice(INIT_DONE) }
                            }
                        }
                    }
                }
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...