Edited at

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

More than 1 year has passed since last update.


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)