Я написал приложение Kotlin Compose Coroutine SharedFlow, которое подключает мой телефон к сенсорному устройству с поддержкой BLE. Приложение демонстрирует странное поведение. Если я просто подключаюсь к устройству, значение напряжения от датчика правильно считывается и отображается на моем одном экране. Однако мое устройство уведомляет две характеристики, а именно ampsValue. Значение ampsValue не читается для каждого логарифма и не отображается на моем экране. Обнаружен UUID характеристики ампера, но не значение характеристики ампера.
Если я поменяю UUID характеристики вольт и ампер соответственно, ampsValue начнет уведомлять в logcat и отображаться на моем экране. Конечно, соответствующие показания датчиков отображаются в неправильных текстовых полях, но если я поменяю UUID обратно, то и вольты, и амперы будут отображаться правильно. Другая проблема возникает, когда я выключаю устройство и снова включаю его. Мое приложение повторно подключится, но снова будет отображать только значение voltsValue. Единственный способ заставить его читать/уведомлять оба значения — это поменять характерные UUID. Такое поведение кажется кому-нибудь знакомым? Обратите внимание, что nRF правильно считывает и отображает оба уведомляющих значения.
Это обратный вызов onServicesDiscovered(), в котором обнаруживаются UUID:
@SuppressLint("MissingPermission")
override fun onServicesDiscovered(gatt: BluetoothGatt?, status: Int) {
when (status) {
BluetoothGatt.GATT_SUCCESS -> {
// Service discovery successful
val service = gatt?.getService(SERVICE_UUID)
if (service != null) {
// Read volts characteristic
val voltsCharacteristic =
service.getCharacteristic(VOLTS_UUID)
voltsCharacteristic?.let {
gatt.readCharacteristic(it)
Log.d("Frank - read voltsCharacteristic", "Volts Characteristic = $it")
} ?: run {
Log.e("Frank", "Volts characteristic not found")
}
// Read amps characteristic
val ampsCharacteristic = service.getCharacteristic(AMPS_UUID)
ampsCharacteristic?.let {
gatt.readCharacteristic(it)
Log.d("Frank - read ampsCharacteristic", "Amps Characteristic = $it")
} ?: run {
Log.e("Frank", "Amps characteristic not found")
}
} else {
Log.e("Frank", "Service not found")
}
}
else -> {
// Service discovery failed
Log.e("Frank", "Service discovery failed with status: $status")
}
}
Подробнее здесь: https://stackoverflow.com/questions/783 ... c-behavior
Bluetooth LE — множественное характерное поведение ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1714341686
Anonymous
Я написал приложение Kotlin Compose Coroutine SharedFlow, которое подключает мой телефон к сенсорному устройству с поддержкой BLE. Приложение демонстрирует странное поведение. Если я просто подключаюсь к устройству, значение напряжения от датчика правильно считывается и отображается на моем одном экране. Однако мое устройство уведомляет две характеристики, а именно ampsValue. Значение ampsValue не читается для каждого логарифма и не отображается на моем экране. Обнаружен UUID характеристики ампера, но не значение характеристики ампера.
Если я поменяю UUID характеристики вольт и ампер соответственно, ampsValue начнет уведомлять в logcat и отображаться на моем экране. Конечно, соответствующие показания датчиков отображаются в неправильных текстовых полях, но если я поменяю UUID обратно, то и вольты, и амперы будут отображаться правильно. Другая проблема возникает, когда я выключаю устройство и снова включаю его. Мое приложение повторно подключится, но снова будет отображать только значение voltsValue. Единственный способ заставить его читать/уведомлять оба значения — это поменять характерные UUID. Такое поведение кажется кому-нибудь знакомым? Обратите внимание, что nRF правильно считывает и отображает оба уведомляющих значения.
Это обратный вызов onServicesDiscovered(), в котором обнаруживаются UUID:
@SuppressLint("MissingPermission")
override fun onServicesDiscovered(gatt: BluetoothGatt?, status: Int) {
when (status) {
BluetoothGatt.GATT_SUCCESS -> {
// Service discovery successful
val service = gatt?.getService(SERVICE_UUID)
if (service != null) {
// Read volts characteristic
val voltsCharacteristic =
service.getCharacteristic(VOLTS_UUID)
voltsCharacteristic?.let {
gatt.readCharacteristic(it)
Log.d("Frank - read voltsCharacteristic", "Volts Characteristic = $it")
} ?: run {
Log.e("Frank", "Volts characteristic not found")
}
// Read amps characteristic
val ampsCharacteristic = service.getCharacteristic(AMPS_UUID)
ampsCharacteristic?.let {
gatt.readCharacteristic(it)
Log.d("Frank - read ampsCharacteristic", "Amps Characteristic = $it")
} ?: run {
Log.e("Frank", "Amps characteristic not found")
}
} else {
Log.e("Frank", "Service not found")
}
}
else -> {
// Service discovery failed
Log.e("Frank", "Service discovery failed with status: $status")
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78399238/bluetooth-le-multiple-characteristic-behavior[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия