Как определить нажатие клавиши по метке Bluetooth с низким энергопотреблением на iPhone?

В настоящее время я работаю над проектом, связанным с взаимодействием с Bluetooth Low Energy tag и iPhone. Я хочу знать, как я могу зарегистрировать нажатие клавиши на теге Bluetooth на iPhone. т. е. когда пользователь нажимает клавишу на метке, приложение на iPhone должно распознавать и выполнять определенную функцию (например, издавать звук).

Я использую тег Texas Instruments 2540 и ссылаюсь на их пример кода. В их коде

Уведомление о нажатии клавиши должно быть включено. Когда на теге нажимается клавиша, соответствующее значение UUID службы и характеристик обновляется. В приложении вызывается метод делегата didUpdateValueForCharacteristic, и могут быть вызваны соответствующие функции.

Однако компания, разрабатывающая тег bluetooth, настаивает на том, чтобы сервис был создан в приложении iPhone (iPhone действует как сервер Bluetooth), а тег bluetooth будет предупреждать iPhone, выступающий в роли клиента.

Мой фрагмент кода

определить Key_Press_Notification_Service 0xFFE0
определить Key_Press_Notification_Characterisitc 0xFFEA

-(void) enableButtons:(CBPeripheral *)p
{
[самоуведомление: Key_Press_Notification_Service characterUUID:Key_Press_Notification_CharacterisitcUUID p:p on:YES];
}

// -(void)notification... Метод

// -(void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic.. Метод


Можете ли вы помочь мне, возможно ли это? И как я мог зарегистрировать нажатие клавиши из тега BlueTooth для идентификации на iPhone?


person Manju Kiran    schedule 16.05.2012    source источник


Ответы (2)


Манджуа,

Когда у вас есть периферийное устройство и forCharacteristic:characteristic, вам просто нужно включить уведомления:

// begin notification for the characteristic.
[peripheral setNotifyValue:YES forCharacteristic:characteristic];

Затем вы используете CBPeripheralDelegate для получения обновлений:

- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
person Murray Hughes    schedule 22.05.2012
comment
Огромное спасибо Мюррей! Я получил правильный charUUID от производителя и вуаля, все заработало.. Еще раз спасибо... Еще одно дополнение к вашему решению заключается в том, что нам также нужно запустить - [самоуведомление:Service_UUID characterUUID:Characteristic_UUID p:peripheral on:YES ] также на устройстве. Тогда это работает как шарм !! - person Manju Kiran; 28.05.2012
comment
Как правило, это неправильно. Немедленное оповещение — это характеристика, не предназначенная только для записи. - person AlexeyVMP; 10.02.2013

Это похоже на сценарий «Профиль FindMe», описанный в http://developer.bluetooth.org/gatt/profiles/Pages/ProfileViewer.aspx?u=org.bluetooth.profile.find_me.xml. «Найти меня» (тег bluetooth) и «Найти цель» (iPhone) должны иметь службу «Немедленное оповещение». Поведение службы Immediate Alert описано в http://developer.bluetooth.org/gatt/services/Pages/ServiceViewer.aspx?u=org.bluetooth.service.immediate_alert.xml.

Когда на вашем теге нажата клавиша, он должен выполнить запись в характеристике уровня предупреждения, находящейся на iPhone.

Кроме того, вы можете создать свой собственный профиль. т.е. некоторая характеристика тега выполняет уведомление при нажатии клавиши. Затем ваше приложение для iPhone подпишется на эту характеристику и будет получать уведомления о любых нажатиях клавиш. Пользовательские профили, конечно, означают, что ваша метка не будет совместима с устройствами Bluetooth Smart Ready.

person fiddlebit    schedule 16.05.2012
comment
Спасибо, Фиддлбит. Означает ли это, что мне придется создать службу (CBService) на iPhone? Можете ли вы помочь мне, как я могу реализовать это? - person Manju Kiran; 17.05.2012
comment
Да, вам нужно будет реализовать сервис на iPhone для профиля FindMe. Боюсь, у меня нет никакого опыта разработки под iOS :( Так что я не могу помочь вам с особенностями - person fiddlebit; 21.05.2012
comment
Еще раз спасибо, FiddleBit. Я заметил, что iPhone не может выступать в качестве сервера на Bluetooth 4. Поэтому я реализовал решение, указанное Мюрреем (и, следовательно, пометил его ответ правильно). Это просто, чтобы помочь другим разработчикам. Еще раз спасибо за ваш совет. - person Manju Kiran; 28.05.2012
comment
@Manju, вы можете реализовать CBService на iPhone? если да, то помогите и мне. - person nilam_mande; 11.12.2015
comment
@nilam_mande: Если вы можете задать вопрос на StackOverflow с подробностями вашей проблемы, возможно, мы сможем рассмотреть его и лучше прокомментировать? - person Manju Kiran; 14.12.2015