« Intel GalileoでCoreMark | トップページ | REBL600FRで自宅iBeacon »

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に飛ばす実験を行いました。無線による遅延もなく、軽快にコンソール操作ができました。

 

IMG_0379

 

SBDBT-SPP_Mac

 

SBBLEファームの使用

PICkitを使って、ファームをBLE用のSBBLEに書き換えます。版数は、”sbble_131224.hex”を使用しています。

この状態で、SBDBTにLEDとSWをつないで、Micono UtilitiesさんのiOSアプリを入れれば、LEDの制御・SWの読み取り(Notificationベース)が簡単にできてしまいます。ここまで環境が整備されていると、もう、自分でやることもないくらいです。

 

IMG_0015

 

せっかく、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」カテゴリの記事

コメント

この記事へのコメントは終了しました。

2023年6月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  
無料ブログはココログ