2013年11月17日
Zeemote JS1 HのBluetooth SPP @ Mac
Zeemote JS1 HをMacで使うにあたり、搭載されているモードを選択しても、扱い難い部分が有ったので、Bluetoothのシリアルポートプロファイル(SPP)を使う場合の準備としてデータ構造を調べてみた。既に、rubyで接続する仕組みを作られていた方が有ったのですが、私があまりrubyに詳しく無い事も有り、そのままではよく分からなかったので、そのソースと見比べながら構造を紐解いてみました。
詳細は下のデータをみて頂くとして、大まかなデータの構造としては、0x08と0x07がヘッダーとなり、この後にジョイスティックのデータが後に続くか、ボタンのデータが後に続くかのステータスの切り替えに成っている様です。データ長はジョイスティックはヘッダーが1バイト、データが3バイト。ボタンがヘッダーが1バイト、データが6バイト。なのでは無いかと思います。不明の部分もあるので、これをもとに実装してみないと何とも言えないかな。もしかすると想定外の部分もあるかも。
以下、調べたデータの詳細
・ジョイスティックデータ
データ構造
ヘッダー 1バイト
データ 3バイト
0x08 ジョイスティックヘッダー
0x00 ダミー?
0xXX 左 0080-00FF センター 0000-007F 右
0xXX 上 0080-00FF センター 0000-007F 下
・ボタンデータ
データ構造
ヘッダー 1バイト
データ 6バイト
0x07 ボタンヘッダー
[0000|0001|0002|0003|00FE] x 6バイト
データ詳細
0x00 Aボタン
0x01 Bボタン
0x02 Cボタン
0x03 Dボタン(電源ボタン)
0xFE ダミー
6バイトのデータ領域は先頭から押されているボタンのデータが入り、余りのバイトにはダミーのデータで埋められている。
・その他
0x04 不明
0x05 不明 ジョイスティックヘッダーの2バイト前に登場
0xA1 不明(データの区切り?)
データ構想解析用に使ったProcessingのコードも書いておきます。
import processing.serial.*;
Serial myPort;
void setup() {
myPort = new Serial(this, "/dev/tty.ZeemoteJS1H-ZeemoteSPP", 9600);
}
void draw() {
while (myPort.available() > 0) {
char inByte = myPort.readChar();
println(int(inByte) + " : " + hex(inByte) + " : " + char(inByte));
}
}
関連日記
- 2013年11月24日 iBeaconを試す(1) 対応ビーコンとアプリ (7106)@ iOS
- 2013年11月15日 ゲームコントローラー「Zeemote JS1 H」 (2995)@ Mac
- 2013年11月16日 [Unity] ゲームコントローラー「Zeemote JS1 H」 (2037)@ Mac
アマゾン広告
この日記ページは閲覧数などの条件に応じて、閲覧制限を行っています。他からリンクしていただいても、そのリンクから辿った閲覧者が当ページの内容をご覧頂けない場合があります。ご了承下さい。