Здраствуй, Хабраюзер! Возникла у меня на работе ситуация, что нужно было спроектировать устройство для iOS, которое бы посредством bluetooth передавало данные на iPad. Если в кратце- это устройство, которое должно прятаться в обычной пачке сигарет и передавать на ipad данные, на каком ребре она лежит. Я начал штудировать сайт apple на предмет взаимодействия bluetooth- устройств и самого ipad, но предлагались варианты либо использовать GameKit (что нам совсем не подходило), либо вступать в программу Apple MFi ( которая несет кучу ограничений и просто так в нее не вступишь). Начали искать решения, и тут подвернулся мне человек, очень хорошо дружащий с электроникой.
Изначально разработка планировалась на Arduino, но знающий человек отговорил от этой затеи ввиду больших финансовых затрат (нужна была партия около 1000 штук). И мы нашли оптимальное решение- собрать устройство самим. Так как я не силен в электронике, то просто опишу какие компоненты использовались:
В итоге получился вот такой прототип:

Вид снизу:

Устройство отлично передавало свое положение, но встал самый главный вопрос: как эти данные передать на iPad?
Решение пришло весьма неожиданно- есть такой профиль в SSP — «just works», когда обмен кодами происходит,
но без индикации и участия пользователя. И мы решили использовать его, эмулируя обычную bluetooth- клавиатуру. Прикрутили этот профиль к прототипу, и вот что получилось (извиняюсь за качество видео, но суть думаю будет понятна):
Устройство передает 10 раз в секунду определенную букву в зависимости от местоположения, и при каждой смене положения передает цифру от 0 до 9 которая соответствует заряду аккумулятора.
Ну а на iPad уже перехватить данные с клавиатуры не составило труда. Я создал скрытый UITextField, и просто в нем перехватывал «нажатые» клавиши. Вот краткий код, как это все работает:
Надеюсь данная статья кому то облегчит жизнь. Если кому нибудь нужна будет схема, прошивка устройства или подробности как это в итоге работает- с удовольствием поделюсь!
Изначально разработка планировалась на Arduino, но знающий человек отговорил от этой затеи ввиду больших финансовых затрат (нужна была партия около 1000 штук). И мы нашли оптимальное решение- собрать устройство самим. Так как я не силен в электронике, то просто опишу какие компоненты использовались:
- датчик положения MMA7260QT
- контроллер ATmega16U4-AU
- bluetooth BlueGiga
В итоге получился вот такой прототип:

Вид снизу:

Устройство отлично передавало свое положение, но встал самый главный вопрос: как эти данные передать на iPad?
Решение пришло весьма неожиданно- есть такой профиль в SSP — «just works», когда обмен кодами происходит,
но без индикации и участия пользователя. И мы решили использовать его, эмулируя обычную bluetooth- клавиатуру. Прикрутили этот профиль к прототипу, и вот что получилось (извиняюсь за качество видео, но суть думаю будет понятна):
Устройство передает 10 раз в секунду определенную букву в зависимости от местоположения, и при каждой смене положения передает цифру от 0 до 9 которая соответствует заряду аккумулятора.
Ну а на iPad уже перехватить данные с клавиатуры не составило труда. Я создал скрытый UITextField, и просто в нем перехватывал «нажатые» клавиши. Вот краткий код, как это все работает:
@interface ViewController : UIViewController <UITextFieldDelegate> { IBOutlet UITextField *textField; } @property (nonatomic, strong) IBOutlet UILabel *currTestLabel; @property (nonatomic, strong) IBOutlet UILabel *packPositionLabel; @property (nonatomic, strong) IBOutlet UILabel *batteryPercentageLabel; @end
@implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [textField becomeFirstResponder]; } - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if ([string isEqualToString:@"Z"] || [string isEqualToString:@"z"] || [string isEqualToString:@"Я"] || [string isEqualToString:@"я"]) { _packPositionLabel.text = @"Плашмя"; } if ([string isEqualToString:@"9"]) { _batteryPercentageLabel.text = @"100%"; } return NO; } @end
Надеюсь данная статья кому то облегчит жизнь. Если кому нибудь нужна будет схема, прошивка устройства или подробности как это в итоге работает- с удовольствием поделюсь!