Android端末とmbedをBluetooth SPPで接続する実験をしましたので、その手順をまとめてみました。
ここで使用しているmbedでBluetooth SPP接続がつかえるようにするプログラム”myBlueUSB”は、まだ開発中で時々更新されているようです。
したがって、この通りやってもうまくいかない場合があるかもしれませんのでご承知おきください。
またこの記事は、ある程度Androidやmbedの開発経験がある方を対象にしていますので、ツール類の操作方法の細かい説明は省略しています。
”5.補足1 Window PCと接続したい場合”を追記しました。 2011.11.7
”6.捕足2 btserialクラスを使って通信する場合”を追記しました。2012.3.4
1.必要なもの
・mbed側
(1)mbed NXP LPC1768
mbedを初めて使う方はこちらをどうぞ。
(2)StarBoard Orange または、USBコネクタ(Aタイプ メス )
StarBoard Orangeではなく、USBコネクタ(Aタイプ メス )だけでも良いです。こちらで詳細に解説されていますので参考にしてください。
(3)myBlueUSB
mbedでBluetooth SPP接続がつかえるようにするプログラム。
mbed側の動作確認をするのに便利です。
(5)USB Bluetoothドングル
私が動作確認したのは、次の二つです。
PLANEX Bluetooth ver2.1+EDR BTMICROEDR1XZ
PLANEX Bluetooth Ver3.0+EDR BT-Micro3E1XZ
・Android端末側
(1)Android端末
私が動作確認したのは以下の二つです。
au IS05
acer ICONIA TAB A500
(2)Android開発環境
(3)GetBlue
Android開発環境を作るのが面倒なときは、これの無料版でも実験できます。
2.mbed側の準備
(1)Windows serial port driverをインストールし、シリアル端末が使えるようにしておきます。
(2)myBlueUSBのインポート
myBlueUSBをコンパイラにインポートします。
myBlueUSBは開発中のようなので、色々なバージョンが公開されているようです。
必ずしも最新版でうまくいくとは限りません。自分がちゃんと接続ができることを確認できたのはこれです。
注意:2011.08.10現在確認した範囲では、上記リンクではなく、このバージョンをインポートすればうまくいくようです。(2)のライブラリ更新も不要でした。(3)のコンパイルエラーも出ませんでした。(2011.08.10追記)
注意:2012.12.05現在正常にコンパイルできないようです。"myBlueUSB"ライブラリがインポートされません。(公開を止めてしまった?)
正常にコンパイルできる古いバージョンを使う方法をこちらの方が公開されています。(2012.12.09追記)
(2)ライブラリを更新
次に、以下のライブラリを最新に更新します。myBlueUSB, myUSBHost, rfcomm, sdp
ライブラリの更新は、コンパイラ画面左の対象ライブラリをマウスで選択して画面右側に出てくる"Update to the latest revision"ボタンを押します。
(3)コンパイル&ダウンロード
コンパイルすると、1箇所コンパイルエラーが出るので、"TestShell.cpp"の58行目に"extern"を追加します。
また、"TestShell.cpp"の259行目と283行目のコメントを外して、受信データを送信側にエコーバックするようにします。(2011.08.10追記)
コンパイルが成功したらmbedにダウンロードしておきます。
3.Android端末側の準備
・Android開発環境を使う場合。
Android SDK付属のBluetoothChatを使用します。
ここを参考に"BluetoothChatService.java"のUUIDを書き換えてから端末にダウンロードしておきます。
私が使ったBluetoothChatはAndroid2.2用です。
A500はAndroid3.0ですが、Android3.0用BluetoothChatは、UUIDの定義部分がちょっと異なっているのでAndroid2.2用を使いました。
・GetBlueを使う場合。
GetBlueを端末にダウンロード&インストールしておきます。
4.接続実験
注意:私が実験した範囲ではなかなか一発では繋がりません。何度かmbedのリセットとペアリングをしているうちに繋がるという状態で、今は確実に繋がる手順を模索している所です。
複数のBluetooth機器を使用している環境では、この対策をすると改善するかもしれません。(2011.08.17追記)
ペアリング、SPP接続する前に、Android端末のBluetooth設定で”検出可能”にしておきます。(2011.11.27追記)
・Android開発環境を使う場合。
(1)まずAndroid端末とmbedをペアリングします。
PINコードは”1234”です。
(2)つぎにBluetoothChatを起動します。
(3)メニューボタンを押すと、”connect a device”と表示されるのでこれを選択し、先ほどペアリングしたmbedを指定します。これでmbedと接続できるはずです。
(4)mbedとの接続がうまくいっていれば、Android端末から送信したものがエコーバックされてきます。
・GetBlueを使う場合。
(1)まずAndroid端末とmbedをペアリングします。
PINコードは”1234”です。
(2)つぎにGetBlueを起動します。
(3)メニューボタン->settings->Datasource(Input)->Bluetoothを選択し、先ほどペアリングしたmbedを指定します。メニュー画面を抜けてスタートボタンを押すとmbedに接続できるはずです。
注意:Datasink(Output)には何も設定しません。
(4)mbedとの接続がうまくいっていれば、Android端末から送信したものがエコーバックされてきます。
5.補足1
Window PCと接続したい場合。
mbedとPCをペアリングするとPC側にCOMポートが割り当てられるので、あとはそれを普通にシリアルポートとして”Tera Term”等で開けは良い。
6.捕足2
btserialクラスを使って通信する場合。
TestShell()関数を下図青枠のように修正して使う。
ただし、下図赤枠のように”else if(){.....}”の部分はコメントのままにしておいたほうが良い。
そうしないと、接続が確立する前に終了してしまう可能性があり動作が不安定になる。
(または、接続が確立したのを確認してから終了チェックするように改造する。)
あと、btserialのputc()は、改行コードが来るまではバッファにためるだけで、実際の送信をしないので注意が必要。
― 以上 -
関連する記事
・Android端末とmbedをBluetooth SPPで接続する実験(BTstack編)