Quantcast
Channel: Todotaniのはやり物Log
Viewing all articles
Browse latest Browse all 48

SBDBT/SBBLEとiPhoneでBLE通信を行う

$
0
0

以前、「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を使っています。作成したアプリのデモ画像を以下に示します。

 

ソースは以下の通りです。

//
//  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.
//  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:KONASHI_EVENT_READY];
    [Konashi addObserver:self selector:@selector(input) name:KONASHI_EVENT_UPDATE_PIO_INPUT];
    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:PIO1 mode:INPUT];
    [Konashi pinMode:PIO2 mode:OUTPUT];
    [Konashi pinPullup:PIO1 mode:PULLUP];
    [self ledControl];
    self.finedButton.backgroundColor = [UIColor greenColor];
}


- (void)input
{
    if ([Konashi digitalRead:PIO1] == LOW) {
        self.switchLable.backgroundColor = [UIColor redColor];
    } else {
        self.switchLable.backgroundColor = [UIColor grayColor];
    }
}


- (void)ledControl
{
    if (self.ledSwitch.on == YES) {
        [Konashi digitalWrite:PIO2 value:HIGH];
    } else {
        [Konashi digitalWrite:PIO2 value:LOW];
    }
}


- (BOOL)shouldAutorotate
{
    return NO; // YES:自動回転する NO:自動回転しない
}

@end

 

終わりに

Konashi SDKを使ったおかげで、非常に簡潔なプログラムとなりました。Konashiと比べてSBDBTは価格が安くできることはほぼ同じなので大変お得感があります。(PICkitが必要ですが、こちらは他の用途にも使いまわせますし・・)。最新ファームを使うことで、懸案だったNotification送信も簡単にできてしまい(というか、SBDBT/SBBLEのファームは何も触っていない)、非常に充実した環境だと思いました。


Viewing all articles
Browse latest Browse all 48

Trending Articles