はじめに
ここではH8マイコンと浅草ギ研製Bluetooth無線モジュール「AG−BT20E」を使って、PCと無線で通信を行ってみます。
※このページで紹介する内容はあくまでも一例です。個別の作成のご相談ご質問はお答えできませんのでご了承下さい。このページと同じ内容についてのご質問についてはロボット掲示板にてお願いいたします。
※以下の情報は2008年4月現在のものです。ご注意ください。
Bluetoorh無線モジュールAG−BT20Eについてはこちらを参照願います。
PCとマイコンの無線通信について
自作ロボットを動かす方法としては、自立型、ラジコンプロポなどで操縦、PCからリモートブレイン、などが考えられます。リモートブレイン型ロボットの場合はPCと無線で接続してデータのやりとりをする必要があります。その際に気になるのは到達距離、通信速度、複数chを同時通信できるか?などではないでしょうか。
到達距離と通信速度はシステム全体の性能にかかわりますし、複数ch同時通信は大会出場時には必須の条件となります。
無線の種類にはいろいろなものがありますが、ホビーや教育用としは以下が実際に入手可能なものだと思われます。
種類 |
距離 |
速度 |
周波数帯 |
最大出力 |
複数ch |
微弱無線 |
数メートル |
2400〜9600bps程度 |
規定なし |
500uV/m |
機種による |
特定小電力 |
数十〜100m |
2400〜9600bps程度 |
400MHz前後、1.2GHz |
10mW |
機種による |
Bluetooth |
数十〜100m |
3Mbps |
2.4GHz |
1〜100mW |
可 |
Zigbee |
1〜100m |
20K〜250Kbps |
2.4GHz |
10mW/MHz |
可 |
無線LAN |
数十〜数百m |
54Mbps |
2.4GHz |
10mW/MHz |
不可 |
データ通信用の微弱および特定小電力無線機は、電子工作関連のメーカーから発売されておりますが、速度の点でいまひとつです。浅草ギ研でも以前は、周波数を物理的にSW切り替えで40ch同時通信可能な微弱無線機を製造しておりましたが、速度を速くしたいという要望が多くありました。
スペックだけを見ると、複数ch同時通信しない場合、たとえば自作ロボを自宅でしか動かさない場合は無線LANが非常に高速だと見えますが、無線LANの場合は消費電力が非常に大きく、システムの大きさも大きくなるので、ロボットには向かないと考えられます。
BluetoothとZigbeeは携帯機器を意識しているものなので、ロボットに向いていると言えます。Zigbeeは消費電力が非常に小さいので、稼動部分が無く低消費電力なロボット(動かないのにロボットというかどうかは別として)に向いていると言えるでしょう。Bluetoothは年々速度が上がってきており、複数ch同時通信しても通信が可能(環境に依存します)なので一般的な自作ロボットに向いているかもしれません。
ということで浅草ギ研ではAG-BT20Eという無線モジュールを開発しました。これは、現時点で一番上位のバージョンであるBluetoothVer2.0+EDRという無線で、理論的には通信速度が3Mbpsという仕様になっています。実際にはそこまでは出ませんが、AG-BT20Eの場合は双方向で最高460800bps(双方向足して約1Mbps)で通信できます。出力はClass2というもので無線到達距離は約10m(環境に依存する)となっています。
有線と無線の通信
市販のロボットキットを作ったことがある方は経験があると思いますが、PCとロボットを有線ケーブルでつないでモーションデータを転送したりすることがあると思います。このとき、通信エラーはほとんど発生しないかと思います。
無線と有線の一番の違いですが、無線の場合はいろいろな要因によって接続が途中で切れる可能性がある、ということです。無線システムの場合はこのようなエラーを考慮し、エラー発生の検知やエラー後の再接続の処理などを自分で構築する必要があります。
自宅でテストしたときには問題ないが、大会などで無線機が沢山使われているところだと上手く動かないということはよくありますのでこの辺りを念頭において開発する必要があります。
接続
他の例でも紹介していますが、今回もH8Tinyマイコンボード、ベストテクノロジー製BTC064を使ってみます。CPUはH8/3694Fで、トラ技の付録にもなったことがあるのでこのマイコンを持っている方も多いかと思います。開発環境はベストテクノロジー社のGDLを使います。
BTC064のピン配列
BTC064との接続は次の通りとなります。BTC064のTXはHIGHが5Vなのでそのまま接続することはできませんので抵抗で分圧しています。
H8のTX(送信)はBT20EのRX(受信)、H8のRXはBT20EのTXに接続します。
これは実際に通信している時の波形です。黄色がH8のTXの波形、緑がAG-TB20EのRXの波形です。波形はそのままに、電圧が約3.3Vに下げられています。
電源は5Vと3.3Vの2つが必要になります。今回は実験のため、簡単に電源を2つ作りました。どちらも手元にあった市販の9VACアダプタから電源を取ることにしました。ACアダプタ用ソケット(電子部品店で購入)にレギュレータICとコンデンサを直接取り付けてます。写真のようにGNDは共通にします。その他写真は割愛します。
PCとの無線接続
BT20EはBluetooth無線なので、PC側にもBluetooth無線が必要になります。最近のNOTEパソコンにはBluetoothが標準装備されているものもあります。デスクトップの場合は、USBコネクタにさすタイプのBluetooth無線が非常に安い価格で入手できます。Bluetoothは年々規格が変わっていますが、現在は「Ver2.0+EDR」というのが最速で、BT20EもこのタイプになりますのでPC側も同じタイプを用意してください。
Bluetoothは、物理的な仕様とともに、通信プロトコルなどが細かく規定されています。たとえば、コードレス電話ならコードレス電話用の通信規格、ファイル転送ならファイル転送用の、などアプリケーションごとに最適な通信ができるような規格が設定されてもいます。BT20Eはその中で、仮想シリアルポートを構成するRFCOMM及びSPP(Serial
Port Profile)というものを使っており、Bluetooth同士で一旦つながってしまえはその後は両方の機器同士をあたかもシリアルポートでつないでいるように使うことができます。
実際に送受信するデータは規定されたパケット(HCIパケットというもの)に変換されますので、実際のデータはBluetoothの仕様よりは低い速度でしか送ることができません。Ver2.0+EDRは最高3Mbpsですが、AG-BT20Eの最高速度は460800bpsなのはこのような理由からです。
Bluetoothは実際にデータを送る前に、特定の無線同士を関連づける「ペアリング」という作業が必要です。また、この際にお互いにID登録をする場合もあります。このIDはPIN番号又はパスキーと呼ばれています。AG-BT20EもPIN番号を事前にお互いに登録する方式を取っており、IDは「0000」で固定となっていますのでPC側のBluetooth無線機のPIN番号を0000に設定する必要があります。
Bluetoothはマスターとスレーブに分かれます。AG-BT20Eはスレーブに設定されていますのでPC側のBluetooth無線機をマスターとして使います。マスターは通信する相手を探したり、接続要求をするものです。
無線の接続はおおむね次の手順で行われます。
1)スレーブ側(AG-BT20E)を検索可能状態にする。AG-BT20Eは電源を入れるだけでこの状態になります。
2)PCからBluetoothのスレーブ、つまりAG−BT20Eを検索する(PC側のソフトで行う。)。
3)お互いにペアリングする(PC側のソフトで行う。)。
4)接続する。(PC側のソフトで行う。)PC側のソフトによっては接続要求した後、COMポートを開いた段階で接続されるものもある。
となります。
接続はこのようにPC側の操作で行われますが、PC側Bluetooth無線機の種類によって接続に使うユーティリティーソフトの作法が違う場合があります。安価なPC用Bluetooth無線で一般的に手に入るものには下記があります。それぞれの接続手順はリンクをクリックしてください。詳細の操作方法を記載しています。
■BlueSoleil系の接続手順
■TOSHIBA Bluetooth
Stack系の接続手順
■WIDCOMM系の接続手順
筆者の環境では、TOSHIBA...のユーティリティーソフトを使うと、仮想COMポートではない機能が動きっぱなしになってPCの速度が非常に遅くなるという現象がおきました。ということで、以後、BlueSoleil系の無線機、ELECOM製BT-UD1を使った場合の例を掲載します。
接続
上記のリンクの例の通りにインストール及び接続確認すると、PCとAG-BT20Eが接続され、PCの画面は次のようになります。
接続が成功すると、検索されたAG-BT20Eのアイコンが点線でつながり、データ通信を表す赤い点が移動します。電波の状態は、アイコン横のゲージで表示されています。
H8からデータを送信するプログラム
今回は動作テスト程度にします。H8からデータを送り、PCに表示させてみます。PCでの表示はハイパーターミナルを使いますが、VistaなどのOSの場合は適当なシリアル通信プログラムで確認してください。
とりあえず作ったのが次になります。
AG-BT20E.c (右クリックで対象を保存)
以下、ソースの内容です。単純に一秒ごとに0x30からカウントアップしたデータを送信するだけです。0x30はアスキーコードで数字の0ですので、0123...と表示されるはずです。
尚、このH8タイニーマイコンボードの場合はクロックが20MHzとなっていますが、20MHzでは高速なシリアル通信になると正確なbpsが出せないので今回は9600bpsの設定になっています。ということで、AG-BT20E側を9600bpsに設定するのを忘れないで下さい。DIPスイッチで設定しますが、設定値はAG-BT20Eのページに書いてあります。
シリアル通信プログラムについては他のH8のページで詳しく解説していますのでそちらを参照願います。
プログラムはビルドの後、BTC064に転送しておいてください。
動作テスト
通信を始めるにあたり、マイコン側を通信可能状態にします。AG-BT20Eは電源を入れるだけで数秒で通信可能状態(赤LED点灯)になります。
つぎに、PC側のCOMの番号を調べます。今、PC側とマイコン側でBluetoothが起動していて接続が終了したとしますとPC側のユーティリティーが接続状態を表示しているかと思います。
BlueSoleilの場合は、接続されたAG-BT20Eのアイコンを右クリックし、「ステータス」を選択すると次の画面になります。
ここのCOMポートの部分に接続されたCOMポートの番号が表示されます。筆者の場合はCOM77に接続されました。
次に、PC側でハイパーターミナル(もしくは適当な通信ソフト)を起動します。
「接続方法」のところで、先に確認したCOM77(各自環境で番号は違う)を選択します。
通信設定は次の通りです。「ビット/秒」は9600で、「フロー制御」は”なし”です。
BTC064のスイッチを「RUN」にしてプログラムを走らせますと、PCに次のように表示されます。
ということで、H8からBluetooth無線でPCへデータを送ることができました。
同じようにして受信も、単純にH8のUARTから受信するだけです。受信については割愛しますが、浅草ギ研の他のH8のページ又は書籍などを参照してください。
2008年4月29日
|