iOSアプリと連携させて使えるデバイスたち

第2回 3次元コントローラにもなるボール型ラジコン「Sphero」対応 iOSアプリの実装方法

この記事を読むのに必要な時間:およそ 1 分

購入方法

Amazonなどの各種ネットショップで購入できる(2013年12月7日現在,13,453円)ほか,AppleStoreでは限定の透明バージョンを購入することができます。

定価は14,800円です。

対応アプリの実装:基礎編

①Sphero iOS SDKを取得する

下記GitHubリポジトリからcloneするか,zipでダウンロードします。

最新リリースバージョンは2013年12月7日現在,v1.6-b1146となっています。

②SDKをプロジェクトに追加する

下記3つのフレームワーク, リソースバンドルをプロジェクトに追加し,

  • RobotKit.framework
  • RobotUIKit.framework
  • RobotUIKit.Bundle

依存フレームワークである次の2つもプロジェクトにリンクするよう設定しておきます。

  • ExternalAccessory.framework
  • CoreMotion.framework

③リンカフラグをセットする

Build Settingsの"Other Linker Flags"に,下記フラグをセットします。

-lstdc++
-all_load
-ObjC
-lsqlite3

この時点でビルドしてみると,プロジェクトのビルド設定によっては,下記のようなエラーが出る場合があります。

symbol(s) not found for architecture arm64

この場合は,Build Settingsの"Valid Architectures"からarm64を外し,"Architectures"を"$(ARCHS_STANDARD)"にするか,"Build Active Architecture Only"を"NO"にしてください。

また,iOSバージョンを6.x以下にしてください。

④Info.plistの編集

Info.plistに"Supported external accessory protocols"キーを追加し,値の配列内の要素の1つを,"com.orbotix.robotprotocol"とします。

Info.plistの編集

Info.plistの編集

⑤Spheroと接続し,点灯させる

ヘッダをインポートし,

#import <RobotKit/RobotKit.h>

Spheroとの接続完了時に発行される通知 RKDeviceConnectionOnlineNotification の監視開始と終了処理を実装します。

- (void)viewDidAppear:(BOOL)animated {

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(handleOnline)
                                                 name:RKDeviceConnectionOnlineNotification
                                               object:nil];
}

- (void)viewDidDisappear:(BOOL)animated {

    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:RKDeviceConnectionOnlineNotification
                                                  object:nil];
}

接続完了通知 RKDeviceConnectionOnlineNotification のハンドラメソッドを実装します。

- (void)handleOnline {
    
    [RKRGBLEDOutputCommand sendCommandWithRed:1.0 green:0.0 blue:0.0];
}

ここでは接続が成功したら赤く点灯するよう命令しています。

Spheroとの接続開始メソッド,接続完了メソッドを実装し,適当なボタンを作成してアクションとして割り当てます。

// 接続開始
- (IBAction)connect {
    
    if ([[RKRobotProvider sharedRobotProvider] isRobotUnderControl]) {
        [[RKRobotProvider sharedRobotProvider] openRobotConnection];
    }
    else {
        NSLog(@"Sphero is not under control!");
    }
}

// 接続終了
- (IBAction)disconnect {
    
    [RKRGBLEDOutputCommand sendCommandWithRed:0.0 green:0.0 blue:0.0];
    [[RKRobotProvider sharedRobotProvider] closeRobotConnection];
}

接続終了時にLEDの色をデフォルトに戻すようにしています。

これで,⁠Spheroを2度叩いて起こし,設定からペアリングした状態で)サンプルアプリを起動し,connectメソッドを呼ぶボタンを押すと,Spheroが赤く点灯し,

赤く点灯

赤く点灯

disconnectメソッドを呼ぶボタンを押すと,Spheroが元の色に戻るようになります。

青に戻る

青に戻る

著者プロフィール

堤修一(つつみしゅういち)

1978年生まれ。京都大学工学部を卒業後,同大学院修了。その後,NTTデータにて音声認識技術の研究開発,キヤノンにて画像処理機能の設計に携わる。

2010年より面白法人カヤックに入社。3年間ほぼiOSアプリ開発に専念し,フルスクラッチで開発しリリースしたアプリは30本以上。代表作は150万ユーザを突破した「バウンドモンスターズ」,AppStore Best of 2012を獲得した「タップ忍者」,カンヌ国際広告祭でブロンズを獲得した「Domino's App」など。

現在は,米国シリコンバレーのマウンテンビューにあるAppSocially社の一員として活躍中。

著書=『iOSアプリ開発 達人のレシピ100―開発現場で実証された実用コード集』

ブログ=Over&Outその後

Github=shu223

Twitter=shu223