post Image
ZIG SIMが送信するセンサの種類とデータ構造について

ZIG SIMとは?

ZIG SIMは1-10driveで開発した『プロトタイピングをプロトタイピングする』ためのアプリケーションです。
iOSデバイスを『Arduino + Wifi shield + LiPo + 沢山のセンサ』と見立てることで、簡単にセンサをPCに送信する仕組みを構築できます。
同様にリリースしているZIG INDICATORを利用するとPC側でアプリケーションを開発することなく、センサの値をチェックできます。

ZIG SIMのデータ構造

Settingsを編集することでJSON形式とOSC形式が選択可能です。
ただしZIG INDICATORは現時点でJSON形式にのみの対応。
ZIG SIMはWifiを利用するため、パケットロストの可能性があります。
そのため、TCP(Client)のOSCにも対応してます。
vvvvやProcessingなどではTCPのOSCも利用可能なようです。

ZIG SIMのTCP通信時のデリミタについて

ZIG SIMでTCP通信を設定した場合、”\n”をデリミタとして利用しています。
Windowsの場合は”¥n”になります。
JSON、OSCどちらもこのデリミタを採用しています。

ZIG SIMで送れるデータ形式(iOS版)

ACCEL

重力加速度を除いた加速度です。x,y,zの3つのパラメータで構成されています。単位はGです。
iOSでは±8Gの範囲を計測可能です。

GRAVITY

重力加速度です。x,y,zの3つのパラメータで構成されています。単位はGです。

GYRO

角速度です。x,y,zの3つのパラメータで構成されています。単位は°です。

QUATERNION

クォータニオン(デバイスの姿勢)です。x,y,z,wの4つパラメータで構成されています。

COMPASS

コンパスです。コンパスの角度とFaceUp(画面を上にした場合)か否(スマホを立てた場合)か、の2つのパラメータで構成されています。コンパスの角度の単位は°です。

PRESSURE

気圧です。気圧、相対高度の2つのパラメータで構成されています。
気圧の単位はhPa、相対高度はmeterです。

GPS

GPSです。緯度、経度の2つパラメータで構成されています。
単位は°です。

2D TOUCH

タッチ座標です。x,yの2つのパラメータで構成されています。配列として複数のセットが飛んでくる可能性があります。
最大数はiOSによって決定されています。
単位はpixelです。

TOUCH RADIUS

タッチの範囲です。1つのパラメータで構成されています。
単位はpixelです。

3D TOUCH

タッチの強さ(force)です。1つのパラメータで構成されています。

BEACON

iBeaconです。UUID、RSSI、Major、Minorの4つで構成されています。配列として複数のセットが飛んでくる可能性があります。

PROXIMITY MONITOR

近接センサです。検知しているか否か、の1つのパラメータで構成されています。

MIC LEVEL

マイクレベルです。最大値(max)と平均値(average)の2つのパラメータで構成されています。
単位はdBです。

REMOTE CONTROL

リモコンです。playが押されたか否か、volume upが押されたか否か、volume downが押されたか否かの3つのパラメータで構成されています。

ZIG SIMのデータ構造(JSON)

実際のJSONファイルを一例として記述します。

ZigSimSample.js
{
    "device":{ // 絶対に飛ぶ基本情報
        "name" : "iPhone 6s Plus",
        "uuid":"0123456789abcdef",
        "os":"ios",
        "osversion":"10.0.2",
        "displaywidth":1920,
        "displayheight":1080
    },
    "timestamp" : "2016/04/06 15:36", // 絶対に飛ぶ基本情報
    "sensordata":{
        "accel" : { // "ACCEL"選択時に出力される
            "x" : 1.00,
            "y" : 1.00,
            "z" : 1.00
            },
        "gravity" : { // "GRAVITY"選択時に出力される
            "x" : 1.00,
            "y" : 1.00,
            "z" : 1.00
            },
        "gyro" : { // "GYRO"選択時に出力される
            "x" : 1.00,
            "y" : 1.00,
            "z" : 1.00
            },

        "quaternion": { // "QUATERNION"選択時に出力される
            "x" : 1.00,
            "y" : 1.00,
            "z" : 1.00,
            "w" : 1.00
        }, 
        "compass": { // "COMPASS"選択時に出力される
            "faceup": false,
            "compass": 180.0
        }, 
        "pressure": { // "PRESSURE"選択時に出力される
            "pressure" : 1.000,
            "altitude" : 1.000
        }, 
        "gps": { // "GPS"選択時に出力される
            "latitude" : 180.0,
            "longitude" : 180.0
        }, 
        "miclevel":{
            "average":-33.25574493408203,
            "max":-26.98263359069824
        },
        "proximitymonitor":{
            "proximitymonitor":false
        },
        "remotecontrol":{
            "volumeup":false,
            "playpause":false,
            "volumedown":false
            },

        "touch" : [  // "2D Touch"、"TOUCH RADIUS"、"3D TOUCH"のどれかが選択されていると出力される 
                       {    
                            "x" : 0.5, // "2D Touch"選択時に出力される
                            "y" : 0.3, // "2D Touch"選択時に出力される
                            "radius" : 1.0, // "Touch RADIUS"選択時に出力される
                            "force" : 1.0  // "3D Touch"選択時に出力される
                      },
                      {  // 複数のタッチポイントがあれば出力される。iOSの場合最大5点
                            "x" : 0.1, 
                            "y" : 0.1,
                            "radius" : 2.0,
                            "force" : 0.5
                      },
        ]
        "beacon" : [ // "BEACON"選択時に出力される
                       {    
                            "uuid" : XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX,
                            "rssi" : -100,
                            "major" : 100,
                            "minor" : 1,
                      },
                     {    // 複数のBeaconが検出されてれば出力される。
                            "uuid" : XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX,
                            "rssi" : -50,
                            "major" : 101,
                            "minor" : 1,
                      }
        ]
    }
}

ZIG SIMのデータ構造(OSC)

OSCを選択した場合、OSC Bundleを利用して複数のOSC Messageをまとめて送信します。
アドレスは”/ZIGSIM/UUIDの名称/センサの名称”と言う感じです。
最初の『スラッシュ2つ』と言うのがややこしいというフィードバックをいただいたので、『スラッシュ1つ』に変更予定です。

DEVICE

アドレス:”/ZIGSIM/UUIDの名称/DEVICE”
パラメータ:String(デバイス名), String(OS), String(OSバージョン), Int(ディスプレイ幅), Int(ディスプレイ高さ)

ACCEL

アドレス:”/ZIGSIM/UUIDの名称/accel”
パラメータ:Float(x), Float(y), Float(z)

GRAVITY

アドレス:”//UUIDの名称/gravity”
パラメータ:Float(x), Float(y), Float(z)

GYRO

アドレス:”/ZIGSIM/UUIDの名称/gyro”
パラメータ:Float(x), Float(y), Float(z)

QUATERNION

アドレス:”/ZIGSIM/UUIDの名称/quaternion”
パラメータ:Float(x), Float(y), Float(z), Float(w)

COMPASS

アドレス:”/ZIGSIM/UUIDの名称/compass”
パラメータ:Float(角度), Int(faceUpか否か)

PRESSURE

アドレス:”/ZIGSIM/UUIDの名称/pressure”
パラメータ:Float(気圧), Float(相対高度)

GPS

アドレス:”/ZIGSIM/UUIDの名称/gps”
パラメータ:Float(緯度), Float(経度)

2D TOUCH

アドレス:”/ZIGSIM/UUIDの名称/touch検出数”
パラメータ:Float(x), Float(y)
備考:次のアドレスで配列数も同時に飛ばします。
  アドレス:”/ZIGSIM/UUIDの名称/touchcount”
  パラメータ:Int(x)

TOUCH RADIUS

アドレス:”/ZIGSIM/UUIDの名称/touchradius検出数”
*ver1.3.1までは2D TOUCHに含まれます
パラメータ:Float(x), Float(y), Float(radius)
備考:次のアドレスで配列数も同時に飛ばします。
  アドレス:”/ZIGSIM/UUIDの名称/touchcount”
  パラメータ:Int(x)

3D TOUCH

アドレス:”//UUIDの名称/touchforce検出数”
*ver1.3.1までは2D TOUCHに含まれます
パラメータ:Float(x), Float(y), Float(force)
備考:次のアドレスで配列数も同時に飛ばします。
  アドレス:”/ZIGSIM/UUIDの名称/touchcount”
  パラメータ:Int(x)

BEACON

アドレス:”/ZIGSIM/UUIDの名称/beacon検出数”
パラメータ:String(BeaconのUUID), Float(Major) , Float(Minor), Float(RSSI)
備考:次のアドレスで配列数も同時に飛ばします。
  アドレス:”/ZIGSIM/UUIDの名称/beaconcount”
  パラメータ:Int(x)

PROXIMITY MONITOR

アドレス:”/ZIGSIM/UUIDの名称/proximitymonitor”
パラメータ:Int(0/1)

REMOTE CONTROL

アドレス:”/ZIGSIM/UUIDの名称/remotecontrol”
パラメータ:Int(play0/1), Int(volume up 0/1), Int(volume down 0/1)

MIC LEVEL

アドレス:”/ZIGSIM/UUIDの名称/miclevel”
パラメータ:Float(max), Float(average)


『 Swift 』Article List