PixiModule サンプル ターミナルアプリ (ios 版 ) ソース説明書 発行 2016 年 6 月 1 日 1.0 株式会社ヌマタ R&D 1/9
1. 目次 PixiModule ターミナルアプリ (ios 版 ) ソース説明 2. ios 版ご利用の前に... 3 3. ソースファイル内の用語の説明... 4 サンプル 4. ソースファイルの構成... 7 5. Main.storyboard の説明... 6. ViewController.h の説明... 7. ViewController.m の説明... 8. その他... 2/9
2. ios 版ご利用の前に 開発環境について PixiModule ターミナルアプリ (ios 版 ) のソースファイルの編集は Apple 社が無償で配布している Mac OS X 向けの統合開発環境 Xcode をご利用ください サンプル Xcode ( 最新 ver7.3.1) Xcode は Mac OS X 向けの App Store からインストールできます Mac の App Store を開いて Xcode で検索 もしくは Xcode の公式ページ (https://developer.apple.com/xcode/download/) から App Store へのリンクをクリックしてください 3/9
3. ソースファイル内の用語の説明 タブレット ( スマホ ) で作動する PixiModule ターミナルアプリは Bluetooth Low Energy とい う無線通信規格を用いて PixiModule UART と通信しデータの送受信を行います Bluetooth Low Energy (Bluetooth LE) Bluetooth4.0 で追加された省電力性を重視した通信規格です iphone ipad Android 一部 PC 端末で利用できます Bluetooth デバイス Bluetooth LE に対応した機器という意で記述しています ソースではアプリの通信対象 (PixiModule UART) を指します デバイス名 ( デバイスネーム ) Bluetooth デバイス自身が持っている名前です (PixiModule は NMTRD_080-1- ) アプリは 周囲のデバイスを検索し 見つかったデバイス名を見て接続するか判定しています サンプル ただし そのこれはデバイス固有というわけではなく 同一の物も製造時に作ることができます サービス Bluetooth LE の通信規定 GATT(Generic Attribute) で定められている Bluetooth デバイスの機能の総称です 例えば心拍計データを提供するサービス Heart Rate や バッテリー残量を知らせるサービス Battery Service は標準のサービスとして定義されています PixiModule はデータの送受信をするための独自のサービスを定義しています サービスは UUID と呼ばれる16 進数で表現する数字が割り当てられます ( 一種の名前 ) PixiMoule UART には 送受信するサービス があり その送受信サービスの UUID として FF00 を割り当てています 4/9
キャラクタリスティック サービスに紐づけされている属性 ( 値や手段 ) で 複数以上のこともあります キャラクタリスティックは 値 と 値の操作方法の プロパティ で構成されます * 高級言語などでは 操作方法をメソッドともいいますが BluetoothLE ではプロパティといいます PixiModule UART はデータの送受信をするサービスの中に データの読み込み用のキャラクタリ スティック (Read) 書き込み用のキャラクタリスティック (Write) を持っています また サービスと同じくキャラクタリスティックにも各々固有の UUID( 番号で書かれた名前 ) が 割り付けられており PixiModule UART の場合 データの読込 Read は FF01 データの送信サンプル Write は FF02 です ( サービスとキャラクタリスティックの関係 ) データの送受信用サービス (UUID : FF00) キャラクタリスティック (Read)(UUID:FF01) 読み込みデータを取得することができる キャラクタリスティック (Write)(UUID:FF02) 送信するデータを書き込むと送信される キャラクタリスティック (Notify)(UUID:FF01) Read 値が更新された時に タブレットに通知するかどうかの設定 初期は Notify Off( 通知しない ) 5/9
以上の PixiModule にあるサービス キャラクタリスティックに BluetoothLE を通してアクセス することで アプリは PixiModule UART とデータの送受をします CoreBluetooth Framework ios で Bluetooth 通信をするアプリを作成するために Apple 社が提供しているフレームワークで す 本ターミナルアプリも このフレームワークを利用して PixiModule と通信します Central( セントラル ) Peripheral ( ペリフェラル ) CoreBluetooth Framework に出てくる Bluetooth 通信の役割の名称です Central は接続する側 (iphone/ipad) Peripheral は接続される側 (PixiModule) のことです サンプル アドバタイズデータ (advertisement data) 接続前の Peripheral が発信する Peripheral 自身の情報です CoreBluetooth Framework ではアドバタイズデータから 接続前の Peripheral のデバイス名やサービスの UUID 等を取得することができます RSSI (Received Signal Strength Indication) Bluetooth デバイスから受信した電波の強度 ( 単位 :dbm) のことです 値が大きい ( プラスに近い ) 程 受信した電波が強い= 近くにあることが分かります なお CoreBluetooth Framework の仕様で有効な RSSI を取得できない時は値が 127 で通知されます 6/9
4. ソースファイルの構成 PixiModule ターミナルアプリ (ios 版 ) のソースファイルは 以下のように構成されています 本書はアプリ画面のレイアウトを定義するファイル (Main.storyboard) と 機能を定義するクラ スファイル (ViewController.h ViewController.m) について説明します PixiModule_iOSApp ( ソース全体のフォルダ ) PixiModuleTerminal.xcodeproj (Xcode のプロジェクトファイル ) PixiModuleTerminal ( メインクラスのフォルダ ) 1Main.storyboard サンプル 2ViewController.h 3ViewController.m その他ファイル 1 Main.storyboard アプリ画面のレイアウトを定義するファイルです IBOutlet と呼ばれるボタンやラベル等の UI を配置します 2 ViewController.h メイン処理のクラス (3ViewController.m) のヘッダーファイルです フレームワークやソースの変数を宣言します 3 ViewController.m 本ターミナルアプリのメイン処理のクラスファイルです Bluetooth の通信を含む ターミナル操作の全ての処理を定義しています 7/9
ViewController.m は本ターミナルアプリのメイン処理のクラスファイルです Bluetooth の通信を含む ターミナル操作の全ての処理を定義しています カスタム化することでさらに種々の作動 表現が可能です ここではアプリ起動からの処理フローと該当するソース部分について説明します フロー 1 アプリ起動 ~PixiModule の検索開始 アプリ起動 CBCentralManager の起動 CBCentralManager を起動して Bluetooth 通信を実行する準備をします 027 行 manager = [[CBCentralManager alloc] initwithdelegate:self queue:nil]; NO CentralManager の状態判定 サンプル CBCentralManager の状態通知関数 centralmanagerdidupdatestate が 呼ばれるので状態が有効か判定します ( 状態が無効の時は有効になるまで 待機します ) 097 行 -(void)centralmanagerdidupdatestate: (CBCentralManager *)central { YES central.state が CBCentralManager StatePoweredOn になれば有効状態 100 行 switch (central.state) { case CBCentralManagerStatePoweredOn: 次ページへ Bluetooth デバイスの検索開始 ( 次ページ ) break 8/9
* 続きは DVD に収められている正式版をご覧く ださい 9/9