SmartTrigger 開発者情報

SmartTriggerはBluetooth Smartなデバイスであり、各プラットフォームで提供されるBluetooth4.0のAPIを利用して、独自アプリケーションを開発できます。
SmartTriggerではカスタムプロファイルを使用しており、開発に必要なServiceUUIDやCharacteristicsUUIDの紹介、SmartTriggerを操作するAPI、SmartTrigger側の機能も併せて、最後には簡単なサンプルアプリケーションの紹介します。
また本APIで開発されたアプリケーションのサポートは開発者に直接お問い合わせください。 加えて、本ページによって開発されたアプリや、開発によって生じたSmartTriggerの故障、トラブルは一切の保証を致しかねます。
なおサンプルアプリケーションはこちらです。 SmartTrigger-Sample.zip
*便宜上、以下からはiPhoneやiPodなどSmartTriggerの接続対象はセントラルと呼びます。
Service UUID
233E81000B701BD49B2F000C291ED083
SmartTrigger用カスタムプロファイルのServiceUUID
Characteristics UUID
233E81020B701BD49B2F000C291ED083
SmartTrigger情報通知 用CharacteristicsUUID
このUUIDにNotify許可をした時点で接続完了となるので、使用は必須となります。
233E81030B701BD49B2F000C291ED083
リモート撮影 用CharacteristicsUUID
233E81040B701BD49B2F000C291ED083
タイマー撮影 用CharacteristicsUUID
233E81050B701BD49B2F000C291ED083
タイムラプス 用CharacteristicsUUID
233E81060B701BD49B2F000C291ED083
ファームウェア更新用CharacteristicsUUID
このUUIDに対する操作で起きた問題は一切保証しません
233E81070B701BD49B2F000C291ED083
SmartTrigger情報更新 用CharacteristicsUUID
利用可能なAPIs
上記で紹介したUUIDを利用して、SmartTriggerが提供するAPIを紹介します。
またBluetoothで送信するデータはビッグエンディアンに変換して送る必要があります。 同様にSmartTrigger情報通知で取得したデータはビックエンディアンから戻す必要があります。
// CFSwapInt32HostToBigを使って送信する例
- (void)timer:(unsigned short)delay shutter:(unsigned int)aShutter {
    if (_timerReleaseCharacteristic) {
        unsigned short swapedDelay = CFSwapInt16HostToBig(delay);
        unsigned int swapedShutter = CFSwapInt32HostToBig(aShutter);
        *_bleTransferData = 0x01;
        *(_bleTransferData + 1) = swapedDelay & 0xFF;
        *(_bleTransferData + 2) = swapedDelay >> 8 & 0xFF;
        *(_bleTransferData + 3) = swapedShutter & 0xFF;
        *(_bleTransferData + 4) = swapedShutter >> 8 & 0xFF;
        *(_bleTransferData + 5) = swapedShutter >> 16 & 0xFF;
        *(_bleTransferData + 6) = swapedShutter >> 24 & 0xFF;
        [_peripheral writeValue:[NSData dataWithBytes:_bleTransferData length:7]
            forCharacteristic:_timerReleaseCharacteristic type:CBCharacteristicWriteWithoutResponse];
    }
}
SmartTrigger情報通知
SmartTriggerが持つ情報をセントラルに通知します。電源をOFFにしない限り撮影枚数は保持されます。
通知するタイミングは以下の通り:
  • SmartTriggerがSmartTrigger情報通知できるようになったとき*
  • リモート撮影、タイマー撮影、タイムラプス、SmartTrigger情報更新のAPIを実行したとき
  • SmartTriggerのレリーズボタン押したり離したりしたとき
  • SmartTriggerにレリーズケーブルを挿抜したとき
  • 最後の通知から1分経過したとき
*SmartTrigger情報通知CharacteristicsUUIDをDiscoverし、Notify許可をSmartTriggerに設定したということを意味する
Characteristics UUID
233E81020B701BD49B2F000C291ED083
セントラルのロール
Notifyの読み込み
パラメータバイト長
15Bytes(Firmware Versionが3以下の場合は14Bytes)
パラメータ
  1. unsigned char
    SmartTriggerのファームウェアのバージョン
  2. unsigned char
    SmartTriggerの電池残量。例えば電池の電圧が1.4Vであれば100倍した140を送信します。
  3. char
    SmartTriggerから見たセントラルとの電波強度。dBmとして返します。
  4. unsigned char
    SmartTriggerにレリーズケーブルが挿入されているか
    0: 何も挿入されていない
    1: 有線
    2: IR
  5. unsigned char
    SmartTriggerのレリーズボタンが押されているか
    0: 押されていない
    1: 押している
  6. unsigned char
    SmartTriggerが処理していること
    0: 何もしていない
    1: リモート撮影
    2: タイマー撮影
    3: タイムラプス
    4: ファームウェア更新
  7. unsigned long
    撮影枚数
  8. unsigned char
    赤外線撮影で必要なカメラメーカー
    0: キヤノン
    1: ニコン
    2: ソニー
    3: オリンパス
    4: ペンタックス
  9. unsigned char
    エラーコード
    0: 特になし
    2: パラメータ不正(開発時にデバッグ用として利用)
    5: ファームウェア更新失敗
    6: 電池残量不足(SmartTriggerが電源OFFになる数秒前に通知される)
  10. unsigned short
    Timelapseの実行中を知らせるLED通知の間隔
  11. unsigned char (Firmware Version 5以上)
    IR撮影時にBulbかどうか
    0: BULBではない
    1: BULBとして撮影する(開始と終了時にIRを発行、またオリンパスはこれを選択しないとBULBできない)
    2: BULBとして撮影する(ボタン押している間、シャッター時間分IRを発行し続ける)
リモート撮影
セントラルからSmartTriggerを操作してカメラのシャッターを切ります。 フォーカスだけも出来ますが、カメラ側はAFにしておく必要があります。 また1(レリーズ)を書き込んだあと、しばらく時間を空けて0(キャンセル)を書き込むことで長時間露光の撮影も出来ます。
Characteristics UUID
233E81030B701BD49B2F000C291ED083
セントラルのロール
Write
パラメータバイト長
1Byte
パラメータ
  1. unsigned char
    0: リモート撮影をキャンセルする
    1: フォーカス(半押し)
    2: レリーズ(全押し)
タイマー撮影
タイマーとシャッター時間を指定して、1枚撮影します。
Characteristics UUID
233E81040B701BD49B2F000C291ED083
セントラルのロール
Write
パラメータバイト長
7Bytes
パラメータ
  1. unsigned char
    0: タイマー撮影をキャンセルする
    1: タイマー撮影をする
  2. unsigned short
    タイマー時間(単位は秒)
  3. unsigned long
    シャッター時間。露光する時間を指定します(単位はミリ秒)
タイムラプス
一枚目撮影開始までのタイマー、一枚一枚撮影のインターバル、撮影枚数とシャッター時間を指定してタイムラプスを行います。
Characteristics UUID
233E81050B701BD49B2F000C291ED083
セントラルのロール
Write
パラメータバイト長
15Bytes
パラメータ
  1. unsigned char
    0: タイムラプスをキャンセルする
    1: タイムラプスをする
  2. unsigned short
    タイマー時間(単位は秒)
  3. unsigned long
    インターバル時間。シャッター時間より長い時間である必要があります(単位は秒)
  4. unsigned long
    シャッター時間。露光する時間を指定します(単位はミリ秒)
  5. unsigned long
    撮影枚数。0を指定するとキャンセルするまで続きます。
SmartTrigger情報更新
SmartTriggerが使用する情報を更新できます。 最初のバイトに1を与えると最新の状態を通知するよう指示でき、2を与えるとSmartTriggerから接続を切断することを指示できます。また、それらは1バイトのみで書き込みができます。
Characteristics UUID
233E81070B701BD49B2F000C291ED083
セントラルのロール
Write
パラメータバイト長
1または5Bytes(Firmware Versionが3以下は1または4Bytes)
パラメータ
  1. unsigned char
    0: 特になし
    1: 最新の状態を通知するよう指示
    2: 接続を切断するよう指示(ファームウェアがVersion2以降)
  2. unsigned char
    赤外線撮影で使用するカメラメーカー。 値はSmartTrigger情報を参照のこと。
  3. unsigned short
    タイムラプス中に実行中であることをLED点滅で通知する間隔。0を指定するとLEDを点滅しない(単位は秒)
  4. unsigned char (Firmware Version 5以上)
    赤外線撮影時にバルブ撮影として行うか。
    0: BULBではない
    1: BULBとして撮影する(開始と終了時にIRを発行、またオリンパスはこれを選択しないとBULBできない)
    2: BULBとして撮影する(ボタン押している間、シャッター時間分IRを発行し続ける)
SmartTrigger側機能
APIでは操作できないSmartTriggerが持つ機能を紹介します。
自動電源OFF
セントラルと接続していない状態で10分経過したら自動で電源OFFにします。 またレリーズボタンの押下があった場合は、その時点から10分後になります。
接続拒否
SmartTriggerを複数のセントラルでペアリングし、再度ペアリング済みのセントラルで接続を試みると、 SmartTriggerが持つそのセントラルのペアリング情報が古いため接続状態にも関わらず各APIが利用できない状態になります。 その場合は、SmartTriggerから接続を切断します。セントラル側ではペアリングを解除するように促す必要があります。
自動SmartTrigger情報通知
SmartTriggerは自動で最長1分間隔で自身の情報を能動的に通知します。 電源をOFFにしない限りSmartTriggerは撮影枚数を保持し続けます。 詳しくは、SmartTrigger情報通知を参照してください。
独立した撮影処理
撮影処理はセントラルとの接続と関係ないので、撮影に入った後は接続を切断しても問題ないです。 また、撮影がタイムラプスなのかタイマー撮影なのかや撮影枚数は何枚かは電源をOFFにしない限り保持するので、 再度セントラルはSmartTriggerと接続した後にSmartTrigger情報通知で知ることができます。 ただしAPIで送ったパラメータ(タイマーやインターバル時間など)は保持していないので、セントラル側が保持する必要があります。
レリーズボタン
SmartTriggerにあるレリーズボタンを押すことで写真が撮れます。 赤外線ケーブルによる撮影も事前にカメラメーカを正しくSmartTriggerに設定してあればセントラルがなくても可能です。 また押したときに1度押している状態をSmartTirgger情報通知によって通知され、離したときに再度同APIによって通知されます。
撮影実行とキャンセル
撮影のキャンセル処理は各APIのキャンセルパラメータを設定すれば可能ですが、 例えばタイマー撮影中にタイムラプスのAPIを呼ぶことでタイマー撮影はキャンセルされ直後にタイムラプスを実行することができます。
LED点灯・点滅
リモート撮影、タイマー撮影、タイムラプスのAPI(キャンセルは除く)を受け取ったSmartTriggerはLEDを点滅して知らせます。 また、タイマーが設定されている場合、撮影まで10秒以内で点滅、3秒以内であれば撮影開始まで点灯します。
ファームウェア更新に失敗している状態
バージョンが0xFFの場合は、ファームウェア更新が失敗してる状態で、更新が正しく完了するまで一切の撮影機能が使えません。 そのため、開発者はSmartTrigger Appでファームウェア更新を完了させるよう促した方が良いでしょう。
APIで許可されていないこと
電源操作
APIでは電源をオンやオフにしたり、ペアリングモードに入ったりといった操作を行うAPIは提供していません。
デバイス名の変更
工場出荷時に定められたSmartTrigger内部に保存されているデバイス名を変更するAPIは提供されていません。
ファームウェア更新
UUID、エラーコード、処理モードなどは紹介していますが、 あくまで開発の手助けとして情報を提供しているため、ファームウェア更新に関する操作で起きた問題は一切保証しません。
サンプルアプリケーションのダウンロード
上記APIを使って簡単なアプリケーションを ダウンロードください。
SmartTrigger-Sample.zip