#delphi #bluetooth-lowenergy #firemonkey
#delphi #bluetooth-низкое энергопотребление #firemonkey
Вопрос:
Я разрабатываю приложение на Delphi, связывающееся со смарт-устройством с помощью Bluetooth LE. Это устройство имеет около 11 служб и иногда до 19 характеристик для одной службы. Я могу обнаружить все службы и характеристики.
Но я застрял при чтении нескольких значений характеристик в цикле. Существует небольшая задержка между:
BluetoothLE.readCharacteristic(подключенное устройство, GattCharacteristic);
и
Событие BluetoothLECharacteristicRead.
Как я могу убедиться, что я правильно получил предыдущее значение, прежде чем запрашивать следующее? Есть ли где-нибудь пример безопасного выполнения этого с помощью Delphi?
Заранее благодарю вас за вашу помощь
Комментарии:
1. Передается
BluetoothLECharacteristicRead
событиеACharacteristic: TBluetoothGattCharacteristic
, которое включает в себя не только значение.2. Я действительно могу успешно прочитать значение для первой характеристики при запуске события. Когда я пытаюсь прочитать следующую характеристику для той же службы, я получаю сообщение об ошибке, потому что BLE не готов обработать следующий запрос.
Ответ №1:
При запуске OnServicesDiscovered
события необходимо сохранить индекс этой службы (индекс в списке доступных служб на текущем устройстве). После этого вы должны получить доступ к списку доступных характеристик для текущей службы (в событии onServicesDiscovered есть список характеристик: AServiceList[CurrentServiceIndex].Characteristics
) и выполнить чтение значений с помощью OnCharacteristicRead
события, которое запускается индивидуально по одной характеристике, значение которой вы хотите прочитать. В OnCharacteristicRead
случае существует ACharacteristic
параметр, который содержит текущую информацию о характеристиках.
Использование Bluetooth с низким энергопотреблением:http://docwiki.embarcadero.com/RADStudio/Rio/en/Using_Bluetooth_Low_Energy
Комментарии:
1. Спасибо, извините, если я неправильно объяснил свою проблему, у меня нет проблем с чтением отдельной характеристики. Моя проблема заключается в чтении одной за другой до 70 характеристик в цикле. Я прошу прочитать следующее, прежде чем запускать событие onCharacteristicRead для предыдущего запроса. До сих пор я решал свою проблему, используя режим ожидания (50) между каждым запросом, чтобы позволить BLE обрабатывать запрос на чтение. Но, конечно, это не элегантно. У меня также возникает та же проблема при подписке примерно на 10 характеристик. Для обработки также требуется время. Я ожидал, что BLE будет быстрее, чем это