SBDBT/SBBLEとiPhoneでBLE通信を行う
以前、「iPhoneからmbedをBluetooth LE (BTLE)で制御する」という記事を書いたのですが、今回はその続編です。前回は、RunningElectronicsさんのSBDBTで使われているファームウェア(btstack)をmbedに移植して、iPhoneから、mbedにつないだLEDをBLEで制御できるようにしました。mbedのGPIOへの出力はうまく行ったのですが、GPIOの読み取りをNotificationベースでリアルタイムに飛ばす処理はどうしても動かせませんでした。
最新ファームではNotificationも使えると教えていただき、この際なので、SBDBT本体を購入して試してみました。
出荷時ファームウェアの動作確認
出荷時はBluetooth SPPプロファイルで動くファームウェアが搭載されています。ですので、シリアルデータをBluetoothでPCなどに飛ばすことができます。試験では、RaspBerry Piのシリアル出力をMacに飛ばす実験を行いました。無線による遅延もなく、軽快にコンソール操作ができました。
SBBLEファームの使用
PICkitを使って、ファームをBLE用のSBBLEに書き換えます。版数は、”sbble_131224.hex”を使用しています。
この状態で、SBDBTにLEDとSWをつないで、Micono UtilitiesさんのiOSアプリを入れれば、LEDの制御・SWの読み取り(Notificationベース)が簡単にできてしまいます。ここまで環境が整備されていると、もう、自分でやることもないくらいです。
せっかく、iOS Developperの更新もしたことだし、気を取り直して、自作の簡単なiOSアプリを作ってみました。SBBLEはATT/GATTの割り当てがKonashiと同一にしてあるため、KonashiのSDKが使えます。CoreBluetoothのAPIをゴリゴリたたくより簡単で、Arduinoやmbedライクなスタイルでプログラミングが出来そうなので、Konashi SDKを使いました。iOSは7.1で、XCodeは5.1を使っています。作成したアプリのデモ画像を以下に示します。
2015/1/26更新:Konashi SDKが3.0にバージョンアップしていたので、3.0に対応しました。また、XCodeは6.1.1 iOS 8.1.2を使用しています。
ソースは以下の通りです。
// // ViewController.h // SBBLE // // Created by Todotani on 2014/03/25. // Copyright (c) 2014年 Todotani. All rights reserved. // #import <UIKit/UIKit.h> @interface ViewController : UIViewController @property (weak, nonatomic) IBOutlet UIButton *finedButton; @property (weak, nonatomic) IBOutlet UIButton *disconnectButton; @property (weak, nonatomic) IBOutlet UISwitch *ledSwitch; @property (weak, nonatomic) IBOutlet UILabel *switchLable; @end
// // ViewController.m // SBBLE // // Created by Todotani on 2014/03/25. // Update to Konashi SDK 3.0 on 2015/1/25 // Copyright (c) 2014年 Todotani. All rights reserved. // #import "ViewController.h" #import "Konashi.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [Konashi initialize]; [Konashi addObserver:self selector:@selector(ready) name:KonashiEventConnectedNotification]; [Konashi addObserver:self selector:@selector(input) name:KonashiEventDigitalIODidUpdateNotification]; [Konashi addObserver:self selector:@selector(disconnected) name:KonashiEventDisconnectedNotification]; self.finedButton.backgroundColor = [UIColor grayColor]; self.switchLable.backgroundColor = [UIColor grayColor]; } - (IBAction)find:(id)sender { [Konashi find]; } - (IBAction)disconnect:(id)sender { [Konashi disconnect]; self.finedButton.backgroundColor = [UIColor grayColor]; } - (IBAction)switchChanged:(id)sender { [self ledControl]; } - (void)ready { [Konashi pinMode:KonashiDigitalIO1 mode:KonashiPinModeInput]; [Konashi pinMode:KonashiDigitalIO2 mode:KonashiPinModeOutput]; [Konashi pinPullup:KonashiDigitalIO1 mode:KonashiPinModePullup]; [self ledControl]; self.finedButton.backgroundColor = [UIColor greenColor]; } - (void)input { if ([Konashi digitalRead:KonashiDigitalIO1] == KonashiLevelLow) { self.switchLable.backgroundColor = [UIColor redColor]; } else { self.switchLable.backgroundColor = [UIColor grayColor]; } } - (void)disconnected { self.finedButton.backgroundColor = [UIColor grayColor]; } - (void)ledControl { if (self.ledSwitch.on == YES) { [Konashi digitalWrite:KonashiDigitalIO2 value:KonashiLevelHigh]; } else { [Konashi digitalWrite:KonashiDigitalIO2 value:KonashiLevelLow]; } } - (BOOL)shouldAutorotate { return NO; // YES:自動回転する NO:自動回転しない } @end
Konashi SDKを使ったおかげで、非常に簡潔なプログラムとなりました。Konashiと比べてSBDBTは価格が安くできることはほぼ同じなので大変お得感があります。(PICkitが必要ですが、こちらは他の用途にも使いまわせますし・・)。最新ファームを使うことで、懸案だったNotification送信も簡単にできてしまい(というか、SBDBT/SBBLEのファームは何も触っていない)、非常に充実した環境だと思いました。
« Intel GalileoでCoreMark | トップページ | REBL600FRで自宅iBeacon »
「Bluetooth」カテゴリの記事
- 自宅iBeaconの改良(2014.09.17)
- REBL600FRで自宅iBeacon(2014.05.11)
- SBDBT/SBBLEとiPhoneでBLE通信を行う(2014.03.26)
- Bluetooth LE (BTLE)のAdvertisement packet format(2013.02.12)
- iPhoneからmbedをBluetooth LE (BTLE)で制御する(2013.02.11)
この記事へのコメントは終了しました。
コメント