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ファイルを一例として記述します。
{
"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)