robo8080のブログ

ロボット製作や電子工作など。

mbedとZeemoteをBluetooth接続してみた。

2012年06月19日 | mbed LPC1768

 Zeemoteは本来Androidスマートフォン用だが、Bluetooth HIDやSPPに対応しているからmbedでも使えそうなので試してみた。 

・iBUFFALO Bluetooth2.1対応スマートフォン用ゲームコントローラー「ZeemoteJS1」 BSGPJS1

Androidスマートフォン用SDKも有るみたいだ。 面白そう。

で、さっそくAmazonに発注。

 

Zeemote来た。箱の割には中身が小さい。

  

 

まず、ZeemoteのBluetoothキーボードやマウスのフリをするモード(HID)でmbedとつないでみる。

実験に用意したものはこれ。

・mbed NXP LPC1768 と StarBoard Orange

 

・USB Bluetoothドングル

 私が動作確認したのは、次の二つ。

  PLANEX Bluetooth Ver3.0+EDR BT-Micro3E1XZ

    iBUFFALO Bluetooth4.0+EDR/LE対応 USBアダプタ ブラック BSHSBD08BK

 

・mbed用Bluetoothライブラリ

 BlueUSB(HID用)

 myBlueUSB(SPP用)

 

まず、mbed + BlueUSBでZeemoteのHID接続実験をしてみた。

残念ながら、ポインタモードもキーパッドモードもうまくいかなかった。すこしソースを追いかけてみるか... 

 

次に、mbed + myBlueUSBでZeemoteのジョイスティックモード(SPP)も試してみたが、こちらもダメだった。

試しに、Win7 PCとZeemoteのSPPでペアリングをしてみたらすんなりうまくいってしまった。

ペアリングするとZeemoteに対してPCのCOMポートが割り当てられるので、あとは普通のシリアルとして通信できる。

 

これで、とりあえずPCとZeemoteをBluetooth SPP接続して、ボタンデータとジョイスティックデータを取れるようにはなった。

いろいろ応用できそうだ。 

使用したProcessingのプログラムはこれ。

注意:COMポートは各自の環境に合わせて変更する必要がある。

Zeemoteのジョイスティックモード(SPP)で接続したとき、送られてくるデータの先頭はデータ長。

5バイト長のデータはジョイスティック。

8バイト長のデータはボタン。ボタンの複数同時押しも対応している。

あと、4バイト長のデータが時々送られてくるがこれが何のデータかは不明(バッテリーのステータス?)。

 

SPPでPCとの接続がうまく行ったので、もしやと思ってmbed側からMACアドレスを指定してZeemote側へ接続したらうまくいった。 

mbed + myBlueUSBで、Zeemoteのジョイスティックモード(Bluetooth SPP)接続、myBlueUSBの改造箇所はこれ。

事前にZeemoteのMACアドレスを調べておく必要がある。(PCとペアリングするとわかる)

 

 

これに改造を加えて、試しにRCサーボモータを動かしてみた。 

動画はこちら。 

mbedとZeemoteをBluetooth接続して、RCサーボモータを動かしてみた。

 

 

― 以上 -

 


最新の画像もっと見る

5 コメント

コメント日が  古い順  |   新しい順
動作について (ぱる)
2013-01-24 19:12:55
はじめまして

パソコンにそのまま利用できるものでしょうか?
re:動作について (robo8080)
2013-01-27 12:44:40
Zeemoteのポインタモードを使うと、パソコンからはマウスとして認識できるようです。
mbed-processingのシリアル通信について (chiffon)
2013-03-15 17:04:42
こんにちは。
最近mbedとprocessingで何かしたいと思いブログを参考にさせてもらっています。

processingとmbedでのシリアル通信をやってみた所、PC上ではしっかりmbedから
データの取得が出来たのですが、processingでSerialクラスを使いmbedからデータを
取得しようと試みたらうまく行きませんでした。
mbedがある事は認識しているらしいのですが、値がおかしいのです。
どうすればうまく行くでしょうか。

お忙しい所すみません。よろしくお願いします。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12103800132
re : mbed-processingのシリアル通信について (robo8080)
2013-03-16 10:22:18
ブログ見てだたいてありがとうございます。
この場合だとmbedから送られてくるのは文字列ですので、
draw関数の部分はこんな感じでどうでしょうか。

int i = 0;
char [] buff = new char[30];
void draw() {
while (myPort.available ()>0) {
char c = (char)myPort.read();
buff[i++] = c;
if(c == '\n') {
String st = String.valueOf(buff);
print("Strirng = " + st);
data = parseFloat(st);
println("float = " + data);
i = 0;
}
}
}
ありがとうございます。 (chiffon)
2013-03-16 11:58:59
早々のお返事有り難うございます。
無事解決いたしました。
これからもrobo8080さんのブログで勉強させていただきます。
本当に有り難うございました。

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。