OPH-5000 Bluetooth MFiによる通信のiOS側のアプリケーションの開発手順は次のとおりです。
(注意)
  • iOSライブラリ(OPHBluetoothService.framework)/iOSメソッドを使用します。

  1. iOSアプリケーションを開発するためにApple Developerへの登録が必要です。
    詳細は次のリンクをクリックして Apple Developer のウェブサイトをご確認ください。
  2. 登録後にXcodeのダウンロードが可能となります。
    Xcodeのダウンロードは次のリンクをクリックして Xcode のウェブサイトをご確認ください。
  3. 作成したアプリをiOS実機に転送して、動作を確認する場合に iOS Developer Programに登録する必要があります。
    詳細は次のリンクをクリックして iOS Developer Program のウェブサイトをご確認ください。

以下の例では、Xcode上でプロジェクト「FirstApp」が作成されている状態からの手順を解説します。 Xcodeプロジェクトの作成は Apple developer documentation のウェブサイトをご確認ください。

また、本使用手順では、開発言語Objective-C、開発環境Xcode 12.5を使った場合の手順を解説します。

OPHBluetoothService.frameworkのダウンロード


開発環境の使用手順


 開発環境には、以下の2点を対応する必要があります。
  1. プロジェクトのTARGETSの[General]タブにある[Frameworks,Libraries,and Embedded Content]からExternalAccessory.frameworkOPHBluetoothService.frameworkを追加する。
    ExternalAccessory.frameworkは[Frameworks,Libraries,and Embedded Content]の画面で[+]をクリックして、Xcodeのライブラリから追加します。
    ExternalAccessory.frameworkの詳細はExternalAccessory のウェブサイトをご確認ください。

    OPHBluetoothService.frameworkは[Frameworks,Libraries,and Embedded Content]の画面で[+]をクリックして、[Add Other]から追加します。
    のウェブサイトをご確認ください。

  2. Info.plistにSupported external accessory protocolsを追加し、jp.opto.opnprotocolを指定する。

通信APIの利用


 主なAPIの使用方法について、サンプルコードを用いて解説します。
 なお、フレームワークの使用にはimportが必要です。
サンプル
#import <OPHBluetoothService/OPHBluetoothService.h>

  • OPHBluetoothServiceを生成・取得する

    OPH-5000iとのBluetooth通信は、全てOPHBluetoothServiceクラスを介して行います。
    OPHBluetoothServiceのsharedController()メソッドを実行することで、インスタンスを生成、取得できます。
    OPHBluetoothServiceのインスタンスは実行中ただ1つしか存在しないため、まだインスタンスが生成されていなければ生成後返却され、既に生成されていればそのインスタンスが返却されます。
    サンプル
    OPHBluetoothService  *sessionController =[OPHBluetoothService  sharedController];
    

  • OPH-5000iと接続する

    OPHBluetoothServiceのsetupControllerForAccessory ()メソッドを実行することで、OPH-5000iと接続することができます。
    本サンプルでは、setupControllerForAccessory()メソッドの実行に必要な引数であるアクセサリとプロトコル文字列を取得し、接続を行っています。
    サンプル
    NSArray *accessoryList = [[NSMutableArray alloc] initWithArray:[EAAccessoryManager sharedAccessoryManager] connectedAccessories]];
    if(accessoryList == nil || accessoryList.count == 0) return NO;       
    EAAccessory *accessory = [accessoryList lastObject];
    OPHBluetoothService *service =  [OPHBluetoothService sharedController];
    NSArray *protocolStrings = [accessory protocolStrings];
    if(protocolStrings == nil || [protocolStrings count]==0) return NO;
    NSString *protocolString = [protocolStrings objectAtIndex:0];
    [service setupControllerForAccessory:accessory withProtocolString:protocolString];
    


  • セッションをオープンする

    接続済みの場合、OPHBluetoothServiceのopenSession()メソッドを実行することで、OPH-5000iとのセッションをオープンできます。
    サンプル
    OPHBluetoothService *sessionController =  [OPHBluetoothService sharedController];
    [sessionController openSession];
    

  • セッションをクローズする

    OPHBluetoothServiceのcloseSession()メソッドを実行することで、OPH-5000iとのセッションをオープンできます。
    サンプル
    OPHBluetoothService *sessionController =  [OPHBluetoothService sharedController];
    [sessionController closeSession];
    

  • OPH-5000iと接続中か確認する

    OPHBluetoothServiceのaccessoryプロパティであるEAAccessory のisConnectedプロパティで、OPH-5000iと接続中か確認できます。YESなら接続中です。
    サンプル
    isConnected = [[[OPHBluetoothService sharedController] accessory] isConnected];
    

  • OPH-5000iに送信する

    OPH-5000iに送信する場合、OPHBluetoothServiceのwriteData()メソッドを実行することで、OPH-5000iに送信することができます。
    アクセサリインターフェース仕様によりOPH-5000i(MFiアクセサリ)がiOSデバイスから受信可能なExternal Accessory Protocol メッセージの最大サイズは2036 bytesです。
    サンプル
    -(IBAction)sendStringButtonClick:(id)sender
    {
        NSData *writeData = [@"TestSting" dataUsingEncoding:NSUTF8StringEncoding];
        if(_service.isConnected){
            //Send data to OPH-5000i
            [_service writeData: writeData];
        }  
    }
    

  • OPH-5000iから受信する

    OPHBluetoothServiceとOPH-5000iとの通信結果を処理するためには、 まず、通信結果を処理するクラスがOPHBluetoothServiceDelegateプロトコルを採用する必要があります。

    本サンプルでは、ViewControllerクラスが当該プロトコルを採用しています。
    サンプル
    @interface ViewController <OPHBluetoothServiceDelegate> {
    }
    

    次に、そのクラスをOPHBluetoothServiceのインスタンスのデリゲートに指定します。
    サンプル
    OPHBluetoothService *sessionController =  [OPHBluetoothService sharedController];
    [service setDelegate:self];
    

    最後に、そのクラスで以下のメソッドを実行し、OPH-5000iから受信することができます。
    サンプル
    - (void)bluetoothService:(OPHBluetoothService *)service receivedData:(NSData *)data
    {
        NSLog(@"receivedData: %@", data);
    }
    

関連事項

最終更新日:2022/05/09