iOS говорит, что характеристика BLE не уведомляет

Я использую модуль Adafruit Feather BLE, чтобы возиться с ним.

Наряду с этим поставляется набор AT-команд, который я использую для создания пользовательской службы и характеристики с ней. Я использую это опцию уведомления. Боковой код iOS говорит, что характеристика не уведомляет. Я немного погуглил, и некоторые люди сказали, что дескриптор необходим для того, чтобы характеристика уведомляла. Поэтому я добавил один, но все равно безуспешно.

Вот сторона Adafruit кода -

AT+GATTADDSERVICE=UUID128= 3d-e8-3e-34-dc-98-43-d0-87-de-3d-97-73-8b-ba-b6
AT+GATTADDCHAR=UUID=0xABCD, PROPERTIES=0x10, MIN_LEN=2, VALUE='01', DATATYPE=1, DESCRIPTION=TEST, PRESENTATION=17-00-AC-27-01-00-00

Я вижу в последовательном мониторе, что он успешен. После этого я пишу в модуль BLE каждые несколько миллисекунд.

На стороне iOS вот журнал, который я получаю:

Characteristics: [<CBCharacteristic: 0x2817a4180, UUID = ABCD, properties = 0x10, value = (null), notifying = NO>] 

Я использую стандартный код, который идет с примерами. Является ли значение свойства, которое я использую, неправильным? В документации Adafruit говорится, что 0x10 предназначен для уведомления.


person SFlow    schedule 08.10.2020    source источник


Ответы (1)


notification = no в описании отладки указывает, что вы не включили уведомления для этой характеристики (т. е. ее свойство isNotifying равно false). Это не означает, что характеристика не поддерживает уведомления.

Вам нужно вызвать setNotifyValue(true, for: characteristic), чтобы включить уведомления.

Затем вы получите обратный вызов делегата didUpdateNotificationState, чтобы сообщить вам были ли уведомления успешно включены или нет.

person Paulw11    schedule 08.10.2020
comment
Я думал, что когда я создаю характеристику для своей службы, мне нужно указать, будет ли она уведомлять или нет. Не так ли? То, что уведомление = нет, является свойством характеристики, прочитанной из модуля после первого подключения. Я вызываю для него setNotify, но didUpdateNotfucationState никогда не вызывается. Может я не правильно это понимаю. Я хочу отправлять данные, используя эту характеристику, каждые 100 мс. Мне нужно, чтобы для этого вызывалось уведомление и didUpdateNotificationState? - person SFlow; 08.10.2020
comment
Вы делаете, и у вас есть. Именно на это указывают свойства = 0x10. Notification = no означает, что вы не включили уведомление на стороне iOS. Установили ли вы делегат периферийного устройства, чтобы получить обратный вызов состояния didUpdateNotification? Вам нужно показать больше кода iOS - person Paulw11; 08.10.2020
comment
А, спасибо! На самом деле я не знаю, что я сделал. Я перезагрузил Arduino и приложение для iOS, и теперь оно работает. Большое спасибо за твою помощь. К сожалению, я не проверил это в git, чтобы увидеть, какие изменения я сделал непреднамеренно. - person SFlow; 08.10.2020