Я хочу отправить данные из 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) }
}
}
}
}
}
}