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));
}
}

閲覧数: 2311 / はてなブックマークusers

関連商品

amazon.co.jp・詳細ページへ

blog comments powered by Disqus

関連日記

アマゾン広告

この日記ページは閲覧数などの条件に応じて、閲覧制限を行っています。他からリンクしていただいても、そのリンクから辿った閲覧者が当ページの内容をご覧頂けない場合があります。ご了承下さい。

▼日記検索

Mac

Shade

3D

Flash

ゲーム

ウェブ

音楽

映画

デジカメ

Windows

Linux

携帯電話

テレビ

広島

電子工作

iOS

▼ 最近のトラックバック

▼ランキング

▼関連サイト