Skip to content
6月 7 11

フォローメモAndroidとArduinoをUSBホストシールドでつなぐ(非ADK編)

by dietposter
以下のサイトの接続確認を自分の使っているAndroidでも試してみました!
いわたんlab 日記: AndroidとArduinoをUSBホストシールドでつなぐ(非ADK編): “AndroidとArduinoをUSBホストシールドでつなぐ(非ADK編)”

adbライブラリLogcatサンプル
動作確認した端末の結果ですー。
IS/01(1.6)…正常に動作
IDEOS(2.2)…正常に動作
Galaxy Tab(2.2)…うんともすんともいわない

Galaxy Tabはコネクタが独自形状、IS/01,IDEOSはmicroUSBタイプB(Androidケータイに多い普通のコネクタタイプ)。

5月 23 11

WebブラウザからのAndyの遠隔操作

by dietposter

週末まとまってコーディングにとりかかれる状況になったので、やりたいと思っていたWebサーバからの遠隔操作をやってみることにしました。

Andy初号機をAndroid搭載式にして、ブラウザから遠隔操作します。 read more…

5月 18 11

$6 Bluetoothモジュール on 自作変換基板を使ってみる

by dietposter

@yishiiさんが作成した変換基板が郵送されてきました。さっそく、Andyタンク初号機に取り付けてみました。

BT 002 read more…

3月 6 11

SparkFunのBluetoothモジュールのコマンドモードへの接続手順です。

by dietposter

SparkFunのBluetoothモジュールは、電源投入時にデフォルトで60秒間赤色LEDが高速点滅する状態になります。これはコマンドモードへ移行する待ち時間で、この高速点滅する間に接続すると、コマンドモードに入ります。

赤色LEDが点滅する

接続されると、緑色LEDが点灯します。この間コマンドモードで通信が可能になります。

緑色LEDが点灯しコマンドモードに入っている

電源投入後60秒待って接続するとデータ転送モードに入ります。Blurtooth経由でSerial.read()やSerial.print()を使ってプログラムから操作しようと思ったら60秒待たないとダメです。

これに気付くのに1ヶ月近くかかりました。60秒経つと、赤色LEDがゆっくりと点滅します。このタイミングでAndroid端末からBluetooth接続するとちゃんとAndyを操縦できます。

コマンドモードの待ち時間を15秒程度に設定するとデバッグ・テストが素早くできるようになります。またSPP(シリアル接続プロファイル)による通信の通信速度を9600bpsに設定してArduino側とやりとりできるようにする必要もあります。というわけで、接続をやってみましょう。

  1. BTモジュールの電源を投入します。
  2. TeraTermを起動して下さい。
  3. ペアリング設定したCOMポートを指定して接続します
  4. 赤いLEDが高速点滅している間に「$$$」とキーインします(※)。
  5. すると、「CMD」という表示が返ってきます。これでATコマンドモードになりました。
  6. 赤いLEDは消灯し、緑のLEDが点灯します。

※キーインした文字が表示されず不安な人は「ローカルエコー」をオンにしておくといいでしょう。

デフォルトではコマンドモードの待ち時間は60秒ありますので余裕がありますが、待ち時間を15秒などにすると、タイミングが短くなってデータ転送モードに移行してしまいます。あせらずに設定してください。

$$$と打ってCMDと表示されたら、もうドキュメントにあるコマンドを打てます。終了したければ「—」と打って改行するとコマンドモードから抜けます。

まずは、設定を表示する「D」コマンドを打ちます。以下にTeraTermの表示を示します。

$$$CMD
D
***Settings***
BTA=00066604D6B0
BTName=FireFly-D6B0
Baudrt(SW4)=115K
Parity=None
Mode  =Slav
Authen=0
Encryp=0
PinCod=1234
Bonded=0
Rem=NONE SET
---END

上記は「$$$」「d[Enter]」「—」とキー入力した状態です。GETコマンドであるdによって基本設定が表示されました。ボーレートが115kbpsであるのがわかります。これを9,600bpsに変更し、コマンドモードの待機時間(Config Timer)も15秒に変更します。

もう一度、接続して以下のコマンドを投入してください。

$$$CMD
SU,96
ST,15
D
***Settings***
BTA=00066604D6B0
BTName=FireFly-D6B0
Baudrt=9600
Parity=None
Mode  =Slav
Authen=0
Encryp=0
PinCod=1234
Bonded=0
Rem=NONE SET
---END

うまくいけば、ボーレート(Baudrt)が9600になっているはずです。

これで、BluetoothモジュールはArduinoと接続できるようになりました!

3月 6 11

SparkFunのBluetoothモジュールのPCとのペアリング設定

by dietposter

SparkFun社のBluutoothモジュール2種についてのATコマンドモードと最低限使用するATコマンドについて書きたいと思います。まず先に、PCとBluetoothモジュールのペアリング設定について書きます。

その前に、Bluetoothモジュールを装着したAndyタンク初号機を見てください。

Andyタンク実行モード

うまくおさまっている感じです。で、このままだとテストしようとすると走り出してしまうので、通常は以下の様にキャタピラーを取り外してテストしています。個人的に「デバッグモード」と呼んでいます。

AndyTank02

Andyタンクデバッグモードw

タイヤがついてるものですと、タイヤを空回りさせるために適当に上げ底になるようにモノを下に入れたりする必要がありますが、タンクたとキャタピラを外すだけですぐに空回り状態にすることができます。そーいう意味でもタンクは便利だったりします。

……Bluetoothモジュールの話に戻りましょう。

SparkFun社にはBluetoothシリアルモジュール製品のコマンドセットの英文ドキュメントがあって、これを読むとだいたい何をすればいいのかわかってきます。

2007年11月のドキュメントは、ストロベリーリナックスさんにあります(1番のもの)。本家SparkFunのサイトには2009年11月のドキュメントがあります(2番のもの)。

  1. ストロベリーリナックスさんチップセットデータシート
  2. 本家SparkFun RN-41 AT Command Set

ストロベリーリナックスさんのBluetoothモデム BlueSMiRF は割高ですが、上記チップセットデータシートが付いていて、これが非常に役に立ちました。

チップセットデータシート=ATコマンド・マニュアル

ただし、千石電商のより1,500円ほど高い金額の埋め合わせになるかといえば、、、そこまではいかないと思います。

で、ペアリング設定手順です。

まずはじめにPCのBluetoothモジュールからペアリングを取ります。コントロールパネルや専用ユーティリテイでBluetoothモジュールとペアリング設定を作成してください。

今回は東芝のBluetoothスタックを使ったPrinceton社製Bluetooth USBドングルを使っています。「Bluetooth設定」(ECCenter1.exe)というのを起動します。

FireFlyがBTモジュールの名称

元々、ストロベリーリナックスさんのBTモジュールが設定されていますが、新たに千石電商さんのBTモジュールを設定します。「新しい接続」ボタンをクリックします。

BTモジュールの検索

FireFlyから始まる名称のBluetooth機器が検出されたら、それを選んで「次へ(N)」ボタンをクリックします。

接続完了しCOMポートが表示される

しばらく待つとペアリングが完了し、COMポートの設定完了の表示が出ます。この際にCOMポートの番号を覚えておいてください。ここではCOM41になります。「次へ(N)」ボタンをクリックします。

アイコンをダブルクリックすると接続される

新しいペアリング設定アイコンが表示されますので、それをダブルクリックすると接続が始まります。上図はうまく接続された状態を示すアイコンで、この表示が出れば、TeraTermなどのターミナルソフトと接続が可能です。

ちょっと画像が多くなりましたので、次のブログで、ATコマンドモードに入るやり方を書きます。

ひっぱってすみませんー。

 

 

 

 

 

3月 1 11

SparkFunのBluetoothモジュールについて

by dietposter

Andyタンクも3月には増産の足がかりをつけたいと考え、割高なんですがBluetoothモジュールで実績のあるSparkFunのBluetooth Mateを手に入れました。SparkFunのBluetoothモジュールはストロベリー・リナックスさんと千石電商さんと2種類あります。

千石電商のBluetooth Mate

千石電商のBluetooth Mate 左にはUSB Bタイプコネクタ

  1.  千石電商さん SparkFun WRL-09358 Bluetooth Mate  税込 6,495円
  2. ストロベリー・リナックスさん Bluetoothモデム BlueSMiRF 税込7,980円

個人で買うなら、千石電商さんのほうが1,500円ほど安くなります。データシートなど同じようだし、大阪日本橋に千石電商さんのショップがあるので、安いほうのSparkFun WRL-09358 Bluetooth Mateを購入しました。

去年職場で購入した Bluetoothモデム BlueSMiRFを並べてみます。ピンソケットがついている左奥のやつです。

SparkFun Bluetoothモジュール2種

手前が千石電商、奥がストロベリー・リナックスのBTモジュール

右手前のが今回購入のものですが、端子の部分をピンヘッダにしました。シールドへの取り付けを考慮したためです(久しぶりに半田付けした…)。

ピンソケットとピンヘッダの違いをのぞくと、赤い本体は全然変わらないように見えませんか?たしかにレイアウトもBluetooth部分も全く同じです。しかし、裏返すと端子の並びが違いました。

SparkFun BT 2種

左がストロベリー・リナックス、右が千石電商のBTモジュール

 プリント基板が少し違う程度で、これくらいなら機能は同じだろうと思い、Andyタンクに取りつけました。結果はうまくいったんですが、ちょっと手間がかかりました。

次に、SparkFunのBluetoothモジュールのATコマンドモードについて書きます。

ATコマンドモードでボーレートを9,600bpsにしないとArduinoとは通信できません!半日はまりました。去年やってたはずなのに、うっかりしてました。

はじめて購入する人は必見です。大丈夫、お値段が少しはりますが、ちゃんと使えまーす。

2月 19 11

Arduino UnoでBluetoothする

by dietposter

さてようやくAndroidアプリとBluetoothモジュールとの接続です。前提として以下のブログの準備が済んでいることとします。

  1. APIサンプルBluetooth Chat(UUID変更済のもの)がAndroid側に入っている。
  2. Arduino側にはシリアルポートテスト用スケッチが入っている。

以下の様に接続しました。

ArduinoとBTモジュールの接続

もっときれいにとりたいなぁ…。iPhone 3GSで撮っているのと自分のテクもないから、イマイチですがご勘弁ください。

Blutoothモジュールは、ストロベリーリナックスさんの「BlueSMiRF WRL-00582」です。7,980円とちょっとお高いですね。向かって左から接続を説明します。

  • 赤ケーブルVCCピン→Arduinoの5Vのピンから給電を受けてます。
  • 黒ケーブルGNDピン→ArduinoのGNDピンです。
  • オレンジケーブルTX-0ピン→Arduinoの0番ピン(シリアルポートRXピン)
  • イエローケーブルRX-1ピン→Arduinoの1番ピン(シリアルポートTXピン)

BlutoothモジュールのTX(送信)をArduino側のRX(受信)、それからBlutoothモジュールのTX(送信)をArduino側のRX(受信)に対応させれば(クロス接続!)、OKです。

上記の物理的な接続を行えば、Serial.read()関数でBluetoothからデータ読み込み、それからSerial.print()関数でBluetoothへのデータ出力が可能となります(何てシンプル!)。

Bluetooth通信でうまく文字を送信してLEDが点灯した状態の画像を以下に示します。

「3」という文字を送って、LEDが点灯!

ちなみに、ロボットカーでの動作も考えてUSBケーブルは外して006P電池を装着してみました。シリアルテストのArduinoスケッチがArduino側にすでにロードされていますので、電池さえつないでおけばケーブルは取り外してしまっても正しく動作します。

USBケーブルを接続したままでテストしてもおんなじなんですが、006P電池(安くて2~300円程度)と「2.1φDCコネクタつき電池スナップ」(共立電子で200円)はロボットカーが自走する際に必要となります。

このテストが完了すれば、廉価なBluetoothモジュールのテストに取り組んでいただきたーい。>yishii様&お読みの皆さま。

19.5$の「Bluetooth module serial port Slave KIT-0041」でも、6.56$の「Serial Bluetooth RF Transceiver Module RS232」でも、安くて動作するBluetoothモジュールがあれば、それを採用してAndyタンクの量産化に拍車をかけたいと思ってます。

そうだ、忘れてました。この7,980円のBluetoothモジュール「BlueSMiRF WRL-00582」は、初期出荷状態だと電源投入時データ通信できないATコマンドモードが1分間続きます。赤い点滅がゆっくりになった後で、Android側のBluetoothChatからconnectするようにしてください。

起動時のATコマンドモード期間を短くする方法など、次に書きたいと思います。

2月 19 11

Arduino UnoでBluetoothする(その前に普通のシリアルテスト)

by dietposter

Arduino Unoが到着してまして、Bluetoothモジュール接続テストを行いたいと思います。とりえずArduino IDEの最新版をダウンロードします。⇒http://arduino.cc/en/Main/Software

Windows上でやってるのでWindows版で話をさせていただきます。現時点では0022というバージョンが最新でした。Unoには0021以降を使ってねというスイッチサイエンスさんの案内があります。

解凍すると「arduino-0022」フォルダができあがります。

Arduino IDEのフォルダの中身

左上の「drivers」フォルダにArduinoのUSBドライバがあります。これを覚えておいてください。この状態で、以下の図のようにArduino UnoとPCを接続します。

arduino.exeがIDEアプリですが今は起動させないでください(ちなみにarduino.exeのショートカットをデスクトップなどに置いておくと便利です)。

以下の画像ではデジタルピン13番とGND(グランド)ピンにLEDを差し込みました。LEDの脚の短い方(K:カソード=陰極)をGNDに差し込みもう一方を13番ピンに差し込みます。

Arduino Uno接続図

タイプBのUSBケーブルでPCと接続

(机が片付いてないっス…)

PCとの接続はプリンタ用によく使われるタイプBケーブルというやつです。自宅ではプリンタから引っこ抜いて使っています。このUSBを接続すると、ドライバのインストールに入りますので、その際に先ほどの「drivers」フォルダを選択します。結果、デバイスマネージャで以下の様に表示されればOKです。

Aruino Unoデバイスマネージャ図

COM8ポートに割り当てられています!

私のPCではArduino UnoがCOM8ポートに割り当てられています。この「UnoはCOM8」というのを覚えておいてください。次に、先ほどショートカットを作っておいたarduino.exeを起動させます。

「Tools」-「SerialPort」を選び、自分のPCで割り当てられたCOMポート(私はCOM8)を選んでおいてください。

シリアルポート選択

Arduino Unoが接続されているCOMポートを選択

ようやく、プログラム(Arduinoではスケッチと呼ぶそうです)を打ちます。以下に「シリアルポートからの入力があればLEDが0.5秒点灯するArduinoスケッチ」を示します。

#define LED 13 //デジタルピン13番をLEDという名前にする
//初期化メソッド
void setup(){
    Serial.begin(9600);//シリアルポートは9600bpsに
    pinMode(LED,OUTPUT);//LEDピンを出力モードに
}

//繰返し処理されるメインのメソッド
void loop(){
    int length  = Serial.available(); //シリアル入力受信文字数

    //シリアルポートにデータがあれば処理する
    if(length>0){//データがない時は-1で素通り
        char c=Serial.read();//1文字読み込み
        digitalWrite(LED,HIGH);//LED点灯
        delay(500);          //0.5秒待つ
        digitalWrite(LED,LOW);//LED消灯
        delay(500);          //0.5秒待つ
        //受け取った文字をシリアルポートに出力(表示)
        Serial.println(c,BYTE);
   }
}

上記部分はコピ&ペーストしてください。早速コンパイル&実行してみましょう。

1にコンパイル、2にUnoにアップロード、3にシリアル画面

以下の手順で実行させてみます。

  1. まず「1」の文字の再生ボタン(Verify)をクリックして、スケッチを確認します。文法的な間違いがあればここで赤字でエラーが表示されます。
  2. 次に「2」の文字の横矢印ボタン(Upload)をクリックして、スケッチをArduino Unoにアップロードします。
  3. アップロードが完了したら、「3」の文字の四角い箱のボタン(SerialMonitor)をクリックして、COMポートのモニター画面を表示させます。

こんな画面が出てきます。

Serial Monitor

COM8シリアルポートモニター画面

上記画像は、入力フィールドに「123」というを文字列を入れた状態です。ここで「Send」ボタンを押すしますと、以下のような表示になります。

Serial Monitor result

文字列「123」が一文字づつ受信され表示された!

Arduino Uno側のLEDも3回点滅していたら、スケッチは正常に動作しています!!

このプログラムをそのままBluetoothモジュールに使うことができます。COM8はデジタルピン0番と1番のエミュレートなのです。次の記事で接続とテスト方法について書きたいと思います。

2月 17 11

BluetoothChatとPCのターミナルソフトでテスト通信

by dietposter

AndroidアプリとArduinoのBluetoothモジュールの通信に先立って、Androidアプリ「BluetoothChat」とBluetoothつきのパソコンとのテスト通信をしてみます。    

何を手間のかかることをとかいわれそうですが、ネットワーク関係の仕事をしてきたので、問題切り分けのために、まずBluetooth接続自体の確実性を担保にすることを考えます。トラブル対応も新しい技術のテストも同じ。PCとちゃんとつながるならArduinoともつながると言える訳です。    

AndroidとPCのBluetooth通信

Bluetooth USBドングルとIDEOS

   今回は、ToshibaのBluetoothスタックの入ったBluetoothドングルを使っています(Princeton社製)。特に無理して購入する必要はありませんが、いろんなサイトのBluetooth通信の記事を見ていると初期のころからToshibaのが評判がいいようです。    

まず、デバイスマネージャでBluetoothのCOMポートを調べて下さい。うちの場合ですと、多くのCOMポートがBluetooth用に割り当てられています。    

Toshiba BT

Toshiba BTのポートがうじゃうじゃ

 

ToshibaのBTドライバを入れるたパソコンは、コントロールパネルに、「Bluetooth Local COM」が出てきますので、これを開いてCOMポートを特定してみます。COM7がSerialPortであると表示されていますので、COM7を使ってシリアルポート通信することにします。    

Bluetooth Local COM

COM7がシリアルポートに使われてる!

 

  つぎに、ターミナルソフト「Tera Term」を起動して、シリアルポート接続を選択し、COM7を選んで接続します(ハイパーターミナルは使わないほうがいいです)。    

「設定」メニュー-「シリアルポート」を選んで、以下のように設定してください。    

ターミナルの設定

9600bps 8bitパリティ無しストップビット1 フロー制御なし

 

   これで、PC側の準備は済みました。    

次にAndroidでBluetoothChatを起動して、メニューボタンを押してPreferenceを出します。  

Menu

メニューボタンで設定を出す

 

 左側の「Connect a device」をタップし、接続したいデバイスを選んでタップします。   

BTデバイス選択画面

Buetoothデバイス選択画面

 

  上の「FireFly…」というのが、Arduinoで使うBluetoothモジュールの名前です(もしお目当てのデバイスがでてこないときは、「Scan for devices」をタップしてしばらく待ちます)。今回は、下の「KYOSHIDA」というPC名のついたBluetooth USBドングルのほうをタップします。   

接続完了画面

「connected」で接続された!

 

  接続中のダイアログがでたあと、右上に「connected:デバイス名」がでれば接続が完了しました!   

これで、Tera Termなどのターミナルソフトとチャットが可能になります。 下図の例では、Androidから「abcd」という文字を送って、TeraTermから「123」という文字を送っています。  

Android Screen MonitorでTeraTermと同時キャプチャ表示!

Tera Termからの文字「123」が、Android側でひとつづつ3行に渡って受け取られているのがわかります。    

このテストができるようになれば、次はPCのBluetoothドングルとArduinoのBluetoothモジュールとの接続です!!   

2月 17 11

BluetoothChatでシリアル接続(SPP)を行う

by dietposter

AndroidとArduinoとをBluetooth接続するためには、まずAndroidにサンプルソース「BluetoothChat」を入れることからはじめます。

Eclipseから「ファイル(F)」メニュー-「新規(N)」-「Androidプロジェクト」を選んで、以下のようにDemoサンプルのプロジェクトを作成してください。

新規Androidプロジェクト画面

手持ちのAndroidのバージョン(ここでは2.2)のデモを選ぶ

また、BluetoothChatについての解説は、以下のmhidakaさんのサイトに良い説明があります。

AndroidでBluetoothを使うには

(mhidakaさんですが、去年大阪の産業創造館で日高兄妹+cattakaさんのプレゼンをみて、うーん勉強になるなあ、すごいなあと感じた方です。)

通信プログラムは、以下の2点

  • byte[]配列を使うこと(ネットワークバイトオーダー)
  • ソケットを使って接続インスタンスを利用すること

とゆーことさえわかっていれば、ファイルの読み書きの様に使える、そう難しいプログラムではないハズなんです。が、Javaですので、手続きがちとめんどうです。

そのJavaらしい手続きを手際良く説明されていて、あーこれいいーと感心します(あとで自分でゆっくりソースを見るときの助けになります)。

ただ、上記の説明には無い部分がAndyにはあります。

Android同士ですと、サンプルソースそのままで接続可能⇒チャット開始となるんでしょうが、Arduinoはシリアル接続のため、SPPというプロファイルを利用して接続する必要があります。

そのために、BluetoothChatServiceクラス内のUUIDをSPP用の”00001101-0000-1000-8000-00805F9B34FB”という文字列に指定する必要があります。以後作成するAndy用のアプリはすべてこのUUIDに変更する必要があります。

このUUID文字列の経緯については、以下のAndroid-SDKグループにてディスカッションされています。このなかのN君はじつはAndyButtonなどを書いたウチの学生です。

BluetoothChatプロジェクトのsrcフォルダを開いて、BluetoothChatService.javaの中でのUUIDのstatic finalなUUIDの定数を探して下さい。
// Unique UUID for this application
private static final UUID MY_UUID = UUID.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66");

これを以下のように書き換えます。

//SPP向け Unique UUID for  SPP application
private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

このあと、プロジェクトのフォルダを右クリックして「実行」メニューから実機にインストールしてください。以下の様な画面が出ます。

BluetoothChat起動画面

BluetoothChatの起動画面

ArduinoとBluetoothモジュールがなくても、パソコンのBluetoothドングルなどで接続確認が可能です。つぎのブログでそのテスト方法をお伝えします。