iOSでBluetooth経由で「自家製」デバイスを接続する

こんにちは、Habrauser! 私の仕事には、iOS向けのデバイスを設計する必要があり、Bluetooth経由でiPadにデータを送信するという状況がありました。 要するに、これは通常のタバコの箱に隠れてデータをiPadに転送するデバイスであり、そのエッジ上にあります。 BluetoothデバイスとiPad自体の相互作用についてアップルのWebサイトを調査し始めましたが、GameKitを使用するオプション(これは私たちにはまったく適していませんでした)またはApple MFiプログラムに参加するオプションが提供されました(これには多くの制限があり、入力しません)。 彼らは解決策を模索し始めました。そして、ある男が私に向かいました。



当初、開発はArduinoで計画されていましたが、知識が豊富な人が、高い金銭的費用のためにこのベンチャーを思いとどまらせました(約1000個が必要でした)。 そして、デバイスを自分で組み立てるための最良のソリューションを見つけました。 私は電子機器が苦手なので、使用したコンポーネントについて説明します。







その結果、次のようなプロトタイプが得られました。





底面図:





デバイスはその位置を完全に伝えましたが、最も重要な疑問が生じました:このデータをiPadに転送する方法は?



解決策は非常に予期せぬものでした-SSPにはそのようなプロファイルがあります-コードの交換が行われたときに「機能する」、

しかし、兆候とユーザーの関与はありません。 そして、通常のBluetoothキーボードをエミュレートして使用することにしました。 このプロファイルをプロトタイプにねじ込んだところ、次のようになりました(ビデオの品質については謝罪しますが、その本質は明らかだと思います)。







デバイスは、場所に応じて特定の文字を1秒間に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
      
      







この記事が誰かの生活を楽にすることを願っています。 回路、デバイスファームウェア、またはこれが最終的にどのように機能するかの詳細が必要な場合は、喜んで共有します!






All Articles