Bluetooth Terminal
このアプリは、Android端末とBluetoothデバイスの間で、SPP(RFCOMM)を利用してシリアル通信する為のプログラムです。
データをアスキー形式又はバイナリ(16進数)形式で入力して、Bluetoothデバイスと送受信することが出来ます。
Android+Bluetoorh+Arduinoのような環境で、Bluetoothデバイスを自作する時に動作をテストする為に勉強を兼ねて作成してみました。
接続するBluetoothデバイスは、SPP(シリアルポートプロファイル)に対応している必要があります。
Android 端末同士では接続できません。
このアプリは電子工作等でBluetoothデバイスを作成するような方でなければ、利用価値はありません。
主な使い方
- Bluetoothデバイスから接続
アプリを起動すると、Android側は接続待機状態になります。
Bluetoothデバイス側がマスターで有れば、この状態でAndroidへ接続が可能です。
- Bluetoothデバイスに接続
メニューから接続を選択すると、ペアリング済みBluetoothデバイス一覧が表示されます。
この中から接続したいBluetoothデバイスを選択して接続を行います。

- 送受信表示
画面には、送受信のログが表示されます。
受信データは赤色
送信データは青色
で表示されます。
- データ送信
Bluetoothデバイスと接続後、画面下の文字入力欄に文字を入力して送信ボタンを押すと、データが送信されます。
ASCII表示モード時には入力した内容がそのまま送信されます。
HEX(16進数)表示モード時では入力文字を16進変換して送信します。HEX表示モード時に入力出来る文字は0-9A-Fのみです。その他の文字を入力すると送信に失敗します。
- ASCII表示/HEX表示のモード変更
画面上部の左端のボタンでて切り換えます。
ダウンロード & インストール
現在、Google Play(Android Market)にて公開中です。
|
|
更新履歴 & APK-FILE
| Version | Memo |
| Ver 3.1.0 (2012/4/26) | 接続時にSecure / Insecureの選択を追加(Android 2.3.3以降限定) |
| Ver 3.0.0 (2012/4/22) | Ver3 初公開 |
| Ver 2.1.2 (2012/2/17) | 自動スクロールの追加 |
| Ver 2.0.1 (2012/2/6) |
・データ受信時のバグの修正 |
| Ver 2.0.0 (2011/5/8) | Android 2.1以降向け 初公開 |
| Ver 1.01 (2011/5/8) | マニフェストでAndroid1.6専用の指定 |
| Ver 1.00 | Android 1.6用 初公開 |
Ver2でご寄付を頂いた方へ
誠に勝手ながら、Ver3ではアプリ内広告を採用させて頂き、アプリ内課金による寄付の募集は廃止致しました。
Ver2のアプリ内課金によりご寄付を頂いた方々へは、そのお礼としましてVer3の広告解除の手順をメールにて送信させて頂きました。
Google Checkoutに記載されているメールアドレス宛に既に送信済みですが、もしもメールが届いていない方がおられましたらご連絡下さい。
お手数をお掛けして申し訳ございませんが、何卒ご理解の程よろしくお願いいたします。




返信ありがとうございます。
ずっとわからなかったところがわかるようになりました。
送信部分はこのように変更してSJISで送信できました。
try
{
byte[] send = message.getBytes(“SJIS”);
mChatService.write(send);
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
上記変更で送信データはSJISで送れたのですが、あと2点教えてください。
1.Android端末自体に表示される送信文字の対応
2.PCから送られてくるデータの受信
以下の部分だと思うのですが、JAVAを使うのが初めてなので教えたいただいた方法でどのようなコードにすればよいのか教えてください。
何度もすいませんが、よろしくお願いします。
case MESSAGE_WRITE:
byte[] writeBuf = (byte[]) msg.obj;
String writeMessage = new String(writeBuf);
mConversationArrayAdapter.add(“Me: ” + writeMessage);
break;
case MESSAGE_READ:
byte[] readBuf = (byte[]) msg.obj;
String readMessage = new String(readBuf, 0, msg.arg1);
mConversationArrayAdapter.add(mConnectedDeviceName+”: ” + readMessage);
break;
試していませんが、こんな感じで動かないでしょうか?
try { byte[] writeBuf = (byte[]) msg.obj; String writeMessage = new String(writeBuf,"SJIS"); mConversationArrayAdapter.add("Me: " + writeMessage); } catch (UnsupportedEncodingException e) { e.printStackTrace(); }MESSAGE_READの場合はどうでしょう?
基本的に同じですが、Stringのコンストラクタの引数が何やら増えてますよね。
どう言う意味を持つ引数か調べれば、”SJIS”をどこに挿入したら良いか分かると思います。
ヒントは https://www.google.co.jp/search?hl=&q=java+string
頑張ってください。
いつも早い返信ありがとうございます。
アドバイスいただいたおかげでやっとできました。
Stringだけでもいろいろな使われ方があるんですね。
次はグラフ描画に緒戦しようと思います。
まだまだ勉強しないといけないことがたくさんあると思いますが、じっくりやってみます。
ありがとうございました。
Hello, I want to first say your Bluetooth terminal works great!
I actually have a couple of questions.
I am trying to modify the Bluetooth Chat example to work with my Arduino to turn on some LEDs. I can’t seem to get the Bluetooth Chat to connect with my bluetooth module but your terminal connects to it just fine. How different is the connection code between your bluetooth terminal and the bluetooth chat example?
I’m not sure if you know much about this but my bluetooth module is a slave device so I don’t have to worry about discovery or the AcceptThread to connect to it and just use the ConnectThread to connect, is that correct?
I’m not sure if you’d be able to give me a sample of the code would you? It’s just for a personal project to light some LEDs around my house. If not, I understand.
Thanks again for your great app!
Hello, Thank for comment.
I have not changed the code of bluetooth connection from the Bluetooth Chat.
It is only the display portion of transmitted and received data which I changed.
I do not understand the cause. Because, I am not looking at your code.
I’m sorry, I do not have time to make the sample of the code.
I remember now.
If you want to use the BluetoothChat example to a Bluetooth SPP module, You have to change the UUID.
private static final UUID MY_UUID = UUID.fromString(“fa87c0d0-afac-11de-8a39-0800200c9a66″);
to
private static final UUID MY_UUID = UUID.fromString(“00001101-0000-1000-8000-00805F9B34FB”);
こんにちわ。
Bluetooth ModuleをAndroidと接続させようと思っていますが、ほとんどのBluetooth ModuleはどれでもAndroidと対応
しているんでしょうか?
それとも何か特定の機器が搭載されている必要があるんでしょうか?もしそうであれば、見分ける記載を御存知でしょうか?
こんにちは。コメントありがとうございます。
電子工作の用途でしょうか?
そうであれば、SPP(シリアル・ポート・プロファイル)と言うキーワードが重要になってきます。
Android側、モジュール側、双方でBluetooth SPPに対応している必要があります。
ですが、中には相性なのか何なのかSPP対応同士でも接続できない物があるようです。
申し訳ないですが僕には見分け方はわかりません。
実は今、あるメーカーから発売されているSPP対応の製品が、Android端末によって接続出来たり出来なかったりで困ってたりします(´・ω・`)
早速のお返事ありがとうございます。
ZEAL C02は御存知ですか?あれはAndroid端末に対応しているとの事ですが、技的認証を受けているとは言え、値段は三倍程するモジュールなのですよね。
http://www.sparkfun.com/search/results?sort_by=date_desc&per_page=50&term=bluetooth&what=products
非常に小型の物のClass2で探しているんですが、モジュール自体は多く見受けられますが全部購入するのもあれですし、かと言って、一つ一つ購入するのもどうかと思案していました。
http://www.goodluckbuy.com/serial-bluetooth-rf-transceiver-module-rs232.html
お勧めする訳ではありませんが、これなんかは、相当小さくてAndroidで動作可能と聞いています。
値段的に動かなくてもまぁ良いか的なw
技適はゲフンゲフン
http://twitpic.com/12f60p
別の物ですが、大きさはこんな感じかと
お返事ありがとうございます。
かなり小さいですね。早速購入してみたいと思います。
他のBluetooth ModuleもAndroid程度には対応させて
欲しいものですよね。
Androidを実装している本体は持っていないので
PCにBluetoothアダプタを装着して接続を行うつもりですが、
それでも問題ありませんか?
問題の有無については良く分かりませんが、PCだと有線シリアルポートに接続したのと同じようにBluetoothデバイスが扱えるので、Androidよりは楽にプログラムが組めるかと思います。
http://www.junglejapan.com/products/surfgrid/
そう言えば、小さめのモジュールと言えば、こう言う物もありました。
僕が試したわけではありませんが、ページに「AndroidとArduinoをBluetoothでつなごう!」と書かれているので、繋がるのは間違い無いかと思われます。
ちょっとお高いですが、技適の通っているモジュールとしては安い方かと・・・参考までに
お返事ありがとうございます。
とりあえずPC上でBluetooth接続させる為にBluetoothアダプタを購入しようと思います。
モジュールの紹介ありがとうございます。
それで技的も通っていると言うのはとても安いですね。早速検討してみたいと思います。ありがとうございました。