Bluetooth Device「Parani-ESD 100/200」を利用したシリアル通信
20090901
coskx
ロボコンゼミ井上,岡崎
1.はじめに
この文書は,H8/3048-H8/3664マイコン間のシリアル通信を行うが,シリアルケーブルの代わりにBluetooth Deviceを2つ使って無線通信を行おうとするものである。
2.Bluetooth Device
SENA社のParani-ESD100/200を用いる。このデバイスは,見かけ上,RS232C機器である。ブルーツース無線通信デバイスを用いると,マイコンからRS232Cシリアル通信を行えば,そのまま無線通信が行われる。ユーザはブルーツースの通信のことは考えなくてもよいようになっている。 マニュアル・データシート
注意
このブルーツース無線通信デバイスはブルーツースの認定,および日本の電波法のTELEC認定も受けているので,通常の実験室で実験可能。
ブルーツース無線通信デバイス
Parani-ESD100ブルーツース無線通信デバイス
Parani-ESD200
SENA社はスタータキットを販売しており,最初にテストするには,これが使いやすい
評価ボード ストレートシルアルケーブル ACアダプタスタータキット
3.WindowsPCと「評価ボード + Parani-ESD100」との接続(準備作業)
3.1 目的
WindowsPCとブルーツース無線通信デバイス「評価ボード +
Parani-ESD100」を接続し,初期通信を行う。
この作業ではまだ無線通信は行わない。
この準備作業の目的はParani-ESD100のBluetooth
Device Addressを調べ,Parani-ESD100に貼っておくことである。
後で通信確立のために必要になる。
WindowsPCとブルーツース無線通信デバイスの接続
3.2 作業
作業手順は次の通り
(1)PCと「評価ボード +
Parani-ESD100」を,付属の両端DSUB-9シリアルストレートケーブル(メス−メス)でつなぐ。
Parani-ESD100はデフォルトでハードウェアフロー制御が行われるので,CTS/RTSも必要である
(2)PCでハイパーターミナルを立ち上げ,通信を切断し,Parani-ESD100のデフォルト設定に合わせてファイルメニューのプロパティを設定する。
(ハイパーターミナルでは通信メニューで通信を切断しないと設定ができない)
ビット/秒:9600
データビット:8
パリティ:なし
ストップビット:1
フロー制御:ハードウエア
ローカルエコー:ON
送信時改行コード:付ける
(3)ハイパーターミナルを接続状態にする
(4)「評価ボード + Parani-ESD100」に付属のACアダプタで3.3V電源を与える
(5)評価ボードの電源SWをONにする
(6)ハイパーターミナルに次のように表示されたら動作していることがわかる
なお,評価ボードの電源投入後,約0.5秒ほどで,最初のメッセージがハイパーターミナルに表示される。
(このことは後でマイコンに組み込んだ時に,マイコンと同時に電源投入しても,マイコンの初期設定時間
があるということを示している)
OK (注) ハイパーターミナルでは見えないが,この「OK」は
「[CR][LF]OK[CR][LF] {\r\nOK\r\n}」が送られてきている。
(6)自分のブルーツースアドレスを知る。
OK
AT+BTINFO?
000195087A0C,ESD100v1.1.5-087A0C,MODE0,STANDBY,0,0,HWFC
OK
←ここを入力
000195087A0Cが自分のブルーツースアドレス(注) ハイパーターミナルでは見えないが,この
「000195087A0C,ESD100v1.1.5-087A0C,MODE0,STANDBY,0,0,HWFC」は
「[CR][LF]000195087A0C,ESD100v1.1.5-087A0C,MODE0,STANDBY,0,0,HWFC[CR][LF]
{\r\n000195087A0C,ESD100v1.1.5-087A0C,MODE0,STANDBY,0,0,HWFC\r\n}」が送られてきている。
そしてその後の「OK」も「[CR][LF]OK[CR][LF] {\r\nOK\r\n}」が送られてきている。(7もう1つのParani-ESD100について,(1)から(6)を行う。
4.WindowsPC間のRS232C通信をブルーツースデバイスを用いて無線化する
4.1 目的
2台のWindowsPC間でRS232C通信を行う。ブルーツースデバイスを用いて,ケーブル接続を無線通信に置き換える。
先の「PC−ブルーツースデバイス」接続準備にてブルーツースデバイスのアドレスが確認されているものとする。
この作業の目的は,2つのブルーツースデバイス間にて通信の確立を確認し,その際必要な初期設定を確かめることである。
2台のWindowsPCをブルーツース無線通信デバイスで接続
「WindowsPC A」を「マスタ」,「WindowsPC B」を「スレイブ」とする
4.2 通常接続
前提1 マスタとスレイブのブルーツースアドレスの設定が終わっている
マスタ 000195087A0C
スレイブ 000195087A06
前提2 2つのブルーツースデバイスはデフォルト通信速度が9600baud/sに設定されている
実行の様子
(1)それぞれのPCにおいてCOMポートを利用して,ハイパーターミナルを立ち上げる。
マスタ側(000195087A0C)
スレイブ側(000195087A06)
OK OK
(2)マスタ側から,スレイブ側のブルーツースデバイスアドレスに対して接続を試みる。
初期状態ではマスタ側もスレイブ側もMode0なのでATコマンドしか受け入れない。
そこで,スレイブ側を接続待ち状態にしてから,マスタ側から接続要求を出すという手順になる。
(2.1)スレイブ側を接続待ち状態にする。スレイブ側に「AT+BTSCAN」を入力
マスタ側(000195087A0C)
スレイブ側(000195087A06)
OK OK
AT+BTSCAN
OK
(注)スレイブ側ではBTより「[CR][LF]OK[CR][LF] {\r\nOK\r\n}」が送られて来る。
次に,PCから「AT+BTSCAN[CR][LF] {AT+BTSCAN\r\n}」を送る。
そうすると再び「[CR][LF]OK[CR][LF] {\r\nOK\r\n}」が送られて来る。
(2.2)マスタ側から000195087A06への接続要求を出す。マスタ側に「ATD000195087A06」を入力
マスタ側(000195087A0C)
スレイブ側(000195087A06)
OK
ATD000195087A06
OK
CONNECT 000195087A06OK
AT+BTSCAN
OK
CONNECT 000195087A0C
(3)マスタ側からデータ送信
マスタ側で「aaaa」を入力→スレイブ側で受信が確認できる
マスタ側(000195087A0C)
スレイブ側(000195087A06)
OK
ATD000195087A06
OK
CONNECT 000195087A06
aaaaOK
AT+BTSCAN
OK
CONNECT 000195087A0C
aaaa
(4)スレイブ側からデータ送信
スレイブ側から「bbbb」を入力→マスタ側で受信が確認できる
マスタ側(000195087A0C)
スレイブ側(00043e3a08eb)
OK
ATD000195087A06
OK
CONNECT 000195087A06
aaaa
bbbbOK
AT+BTSCAN
OK
CONNECT 000195087A0C
aaaa
bbbb
5.WindowsPC間のRS232C通信をブルーツースデバイスを用いて無線化し,いくつかの実験を行なう
5.1 目的
(1)スレイブに対し,特定のマスタとのみ接続を許可するように設定できることを確認する
(2)マスタは,通信が確立したスレイブを切り離し,再度通信を確立することができることを確認する
(これは複数のスレイブに対して切り替えながら通信できることの確認である)
5.2 スレイブの発見
前提1 マスタとスレイブのブルーツースアドレスの設定が終わっている
マスタ 000195087A0C
スレイブ 000195087A06
前提2 2つのブルーツースデバイスはデフォルト通信速度が9600baud/sに設定されている
(1)それぞれのPCにおいてCOMポートを利用して,ハイパーターミナルを立ち上げる。
それぞれ自分のブルーツースデバイスアドレスが表示される。
スレイブ側を接続待ち状態にする。
マスタ側(000195087A0C)
スレイブ側(00043e3a08eb)
OK OK
AT+BTSCAN
OK
(2)マスタ側から000195087A06への接続要求を出す。
マスタ側(000195087A0C)
スレイブ側(00043e3a08eb)
OK
ATD000195087A06
OK
CONNECT 000195087A06OK
AT+BTSCAN
OK
CONNECT 000195087A0C
(3)マスタ・スレイブともに電源OFFにする。
5.3 スレイブが特定のマスタからの接続にしか応答しない設定
Paraniは,初期状態でMode0で動作している。このモードでは,ATコマンドによってのみ動作している。
「5.2」で一度接続を行うと,電源をOFFにしてもお互いに相手のブルーツースアドレスを覚えている。
再度電源をONにした時,マスタをMode1の動作なら,直近の接続先に自動的に接続を試み,他のデバイス
からの接続を拒否するようになる。
またスレイブがMode2の動作なら,直近の接続先からの接続を待つようになり,他のデバイスからの接続
を拒否するようになる。
もし,1対1の接続のみの状態にするなら,マスタをMode1にし,スレイブをMode2にすればよい。
また,1つのマスタが,複数のスレイブに対し接続をするなら,マスタをMode0にし,スレイブをMode2にすればよい。
ただし,ブルーツースの制約から1度に1つのスレイブとしか接続できないので,接続先の切り替えが必要になる。
5.3.1 スレイブが特定のマスタからの接続にのみ応答するようにする。
一度接続したのち,スレイブをMode2にすればよい
実行の様子
(1)「5.2」の手順で一度接続作業を行なう
(2)スレイブのみを電源ON。
スレイブ側(00043e3a08eb)
OK
(3)スレイブ側をMode2動作に切り替え。「AT+BTMODE,2」を入力
スレイブ側(00043e3a08eb)
OK
AT+BTMODE,2
OK
(4)スレイブをソフトウェアリセット。「ATZ」を入力
これを実行しないと完了にならない
スレイブ側(00043e3a08eb)
OK
AT+BTMODE,2
OK
ATZ
OK
これでスレイブはマスタ(000195087A0C)にしか応答しなくなる。
5.3.2 スレイブが「登録したマスタ」からの接続に応答することを確かめる。
実行の様子
(1)それぞれのPCにおいてCOMポートを利用して,ハイパーターミナルを立ち上げる。
それぞれ自分のブルーツースデバイスアドレスが表示される。
マスタ側(000195087A0C)
スレイブ側(000195087A06)
OK OK
(2)マスタ側から000195087A06への接続要求を出す。
マスタ側(000195087A0C)
スレイブ側(00043e3a08eb)
OK
ATD000195087A06
OK
CONNECT 000195087A06OK
CONNECT 000195087A0C
「4.2」ではスレイブに「AT+BTSCAN」を入力しておかないとマスタ側の接続要求に応じなかったが,
ここでは,それなしに応じており,接続に成功した。
まとめ
スレイブを,特定のアドレスを持つマスタのみに応答させるには,
1)一度接続を確立した後,マスタ・スレイブともに電源OFFする。
2)スレイブを起動し,Mode2に変更すればよい。
マスタを特定のスレイブに自動的に接続するようにするには,一度接続を確立した後,同様な手順でマスタをMode1にすればよい。
5.4 接続の中断と再接続
実行の様子
(1)それぞれのPCにおいてCOMポートを利用して,ハイパーターミナルを立ち上げる。
それぞれ自分のブルーツースデバイスアドレスが表示される。
マスタ側(000195087A0C)
スレイブ側(000195087A06)
OK OK
(2)マスタ側から000195087A06への接続要求を出す。
(3)マスタ側から文字列データ「hello」を送る
マスタ側(000195087A0C)
スレイブ側(000195087A06)
OK
ATD000195087A06
OK
CONNECT 000195087A06OK
CONNECT 000195087A0C
マスタ側(000195087A0C)
スレイブ側(000195087A06)
OK
ATD000195087A06
OK
CONNECT 000195087A06
helloOK
CONNECT 000195087A0C
hello
(4)マスタ側にエスケープ文字列「+++」を入力する
マスタがstandbyモードに戻り,ATコマンドを受け付ける状態になる。
マスタ側(000195087A0C)
スレイブ側(000195087A06)
OK
ATD000195087A06
OK
CONNECT 000195087A06
hello
+++
OKOK
CONNECT 000195087A0C
hello
(5)マスタ側にソフトウェアリセットコマンド「ATZ」を送る
マスタ側(000195087A0C)
スレイブ側(000195087A06)
OK
ATD000195087A06
OK
CONNECT 000195087A06
hello
+++
OK
ATZ
OKOK
CONNECT 000195087A0C
hello
DISCONNECT
(6)再度接続 接続が確立したら文字列データ「cool communication」を送信する
マスタ側(000195087A0C)
スレイブ側(000195087A06)
OK
ATD000195087A06
OK
CONNECT 000195087A06
hello
+++
OK
ATZ
OK
ATD000195087A06
OK
CONNECT 000195087A06
cool communicationOK
CONNECT 000195087A0C
hello
DISCONNECT
CONNECT 000195087A0C
cool communication
5.5 スレイブの接続許容先マスタの変更
スレイブをMode2で動作させている状態では,特定のマスタからの接続を待っている状態になっている。
役割を終えて,マスタのアドレスを別のアドレスに設定したくなることがある。
この場合はスレイブをMode0にできれば,別なマスタに対して再設定することができるようになるため,
スレイブをMode0にする方法を試す。
(1)対象のスレイブの電源をONにする。この時マスタは電源をOFFにしておく
(2)「ATZ」「AT+BTMODE,0」「ATZ」の順でコマンドを入力すればよい。
これでスレイブはMode0になるので,「5.1」の方法で,新しいマスタを設定すればよい。
6.マイクロコンピュータH8間のRS232C通信をブルーツースデバイスを用いて無線化する
次のように,H8マイクロコンピュータ間で使うことを考える。
6.1 Parani-ESD100のハードウェア仕様
仕様は次の通りである。
(1)評価ボードを使わずに,CPUのRXD,TXDを直接Parani-ESD100に与えて使う。
(2)マイコンのSCIはフロー制御を行っていないので,Parani-ESD100のCTSにはL信号(0V)を与える。
(3)マイコンの電源電圧は5V,Parani-ESD100の電源電圧は3.3Vなので,信号の電圧変換が必要である。
(4)Parani-ESD100のRST(Restart,負論理)は信号が入ると出荷時状態に戻ってしまうのでH信号(3.3V)を与える。
Parani-ESD100のコネクタ(1番ピンは四角) Parani-ESD200のコネクタ
5V系のマイクロコンピュータへの結線例
Parani-ESD1005V系のマイクロコンピュータへの結線例
Parani-ESD200
6.2 H8マイクロコンピュータへの適用
H8マイクロコンピュータ(AKI-H8)では,プログラムをCOMを使って書き込むため,MAX232などでレベル変換および論理変換を行っており,CPUカードの外に見えているRXD信号とTXD信号は変換された信号である。そのため,CPUカードの外部で再度MAX232などで論理変換・レベル変換してParani-ESD100に接続しなければならない。この時のMAX232は3.3V仕様のものを使う。
(MAX232をはずすことも考えられるが,プログラムの書き込みができなくなるためこれはやらない。)
H8/3048の場合はSCI0とSCI1があり,SCI0が空いているのでこれを使えばよい
H8/3664の場合はSCI3しかないので,MAX232を取り付けた場合は,PCとの通信ができなくなるので別基板でプログラムを書き込んで使うようになる。
H8CPUカードの外にMAX232をつけた結線 |
H8CPUカードの外にMAX232をつけた結線 |
6.3 通信速度の設定
16MHzクロックのH8/3048,H8/3664では通信速度は38400が都合がよいので切り替える。同時にPCのハイパーターミナルも切り替える。
切り替え方
切り替えコマンド「AT+UARTCONFIF,38400,N,1」+「ATZ」
マスタ側(000195087A0C) |
スレイブ側(000195087A06) |
OK |
OK |
フロー制御をしない場合は実用上は通信速度は9600位がよいのでこの作業はしない方がよい。
6.4 ソフトウェア
ここでは,説明のために2つのH8/3048を用いた通信をおこなうこととする。
PC対PCの通信では,動作確認のためにハイパーターミナルを用いることができた。しかし,マイクロコンピュータ対マイクロコンピュータの通信の場合にはこのようなわけにいかないので,テスト方法を工夫する必要がある。
「5.3」の手順によってスレイブが作業中のマスタからの接続にのみ応答するようになっていると仮定している。
初期化作業は「5.4」の(1)から(3)までを参考にすると次のとおりとなる。
(1)マスタ側
1)"OK"を受ける。
2)"ATDxxxxxxxxxxxx"を送る。(接続要求コマンド xxxxxxxxxxxxは通信相手のID)
3)"CONNECT xxxxxxxxxxxx"を受け取るまで文字列行を受ける。
(2)スレイブ側
1)"OK"を受ける。
2)"AT+BTSCAN"を送る。(接続受付コマンド,Masterを固定したMode2動作なら不要)
3)"CONNECT yyyyyyyyyyyy"を受け取るまで文字列行を受ける(yyyyyyyyyyyyは通信相手のID)
−−ここから下の部分は書きかけ−−
6.4.1 PCをマスタ,H8/3048をスレイブにするテスト
マスタ側(PCのハイパーターミナル)から「文字列+[Enter]」を送ると,スレイブ側(H8/3048)は,その文字列をオウム返しに返すテスト。
スレイブ側プログラム(H8V2コンパイラでコンパイルできます)
6.4.2 H8/3048をマスタ,PCをスレイブにするテスト
マスタ側(H8/3048)は,スレイブ側(PCのハイパーターミナル)に"0123456789"を繰り返し送信するテスト。
マスタ側プログラム(H8V2コンパイラでコンパイルできます)
6.4.3 H8/3048をマスタ,スレイブの両方に使ったテスト
マスター側H8/3048は8ビットスイッチの状態をバイトデータとして取り込み,連続してスレイブ側に送ります。スレイブ側は受信データの下2けたに対応して2つのLEDを点灯消灯させてテストを行う。電源を切るまでこの動作は続く。