[[2011b/A4/ロボコン]]

*NXT同士のBluetooth接続を行う [#eb7a9efc]

**はじめに [#ef620957]
NXTには高速なCPUや大容量RAMがあります。それになんといってもNXTの魅力といえば高性能なセンサーを使うことができるということです。しかしながら、NXTは一台につきセンサー4個、出力3個までしか接続できません。ある程度の物を作るのであれば十分なのですが、大きなロボットを作るときはより多くの部品が必要となります。そこで、Bluetoothを使えば、複数のNXTを接続して何台ものモーターやセンサーを活用することができます。

Bluetoothはとても便利なのですが、NXT同士の接続について日本語で書かれた資料はとても少ないです。そこで、少しでもヒントになればと思い書きました。

ここで注意なのですが、この記事はNXTが手許にない状態で書きました。そのため、間違いが含まれているかもしれません。もし説明に対して食い違っている場面に出くわしても勘で解決してください。指摘していただけたらその時点で加筆・訂正しようと思います。

**概要 [#tcb26f2f]
NXTでBluetooth接続をするときは、片方が”マスター”と呼ばれる役割、もう片方が”スレーブ”と呼ばれる役割を担います。”マスター”は通信を先に行い、”スレーブ”と3つまで接続できます。”スレーブ”の接続対象は”マスター”一台となります。

Bluetoothでの接続は、大きく分けて2つの段階に分かます。最初にNXT同士のBluetooth設定を行い、接続します。次に、プログラム側で実際に通信を行います。これらは両方とも簡単に行うことができるので、2台以上のNXTを使うときはぜひ活用してくださ

い。

**NXT同士のコネクションを確立する [#me233a3f]
Bluetooth接続を試すとき、最初に躓く可能性があるのはここです。というか私はここで躓きました。しかし、分かってしまえば簡単なので身構える必要はありません。

#ref(main_menu.png);
#ref(bluetooth_select.png);
まず、Bluetoothを利用可能にします。起動した画面から右ボタンを押してBluetoothにカーソルを合わせます。

#ref(bluetooth_onoff.png);
Bluetoothを選択するとOn/Offを選択できる画面になるので、"On"を選択してください。

#ref(bluetooth_on.png);
赤丸で囲んだように、Bluetoothマークと”<”のようなマークが左上に表示されればBluetoothが利用可能になります。

#ref(bluetooth_search.png);
次に、他のNXTとの接続を行います。メインメニューからBluetoothを選択し、Searchを選択してください。なお、この操作が必要なのはマスター側のみです。スレーブ側はBluetoothを有効にした後、最初の画面に戻しておいてください。

#ref(select.png);
少し時間がたつと画面が変わり、接続する対象を選べるようになります。ここで対象のNXTを選択します。

#ref(selected.png);
図のように、左上のアイコンがひし形になっていれば接続完了です。

なお、接続は電源のOn/Offや通信不良などで切れてしまうので、プログラムの実行の前に接続を確認してください。

**実際に通信する [#hce45b37]
プログラムに関してはNXCチュートリアルなど、ロボティクス入門ゼミのサイト上の情報が詳しいですが、簡単に説明します。

***マスター側 [#h844d203]
:ReceiveRemoteNumber(ボックス番号, true/false ,代入する変数);|一番目の引数のボックス番号には送信時指定したボックスの番号を整数で指定します。
:|二番目の引数にはtrueかfalseを指定します。trueの場合は、メッセージを受け取ったらそのボックスがクリアされ、falseの場合はクリアされません。
:|三番目の引数には、値を代入する先の数値変数を指定します。

:ReceiveRemoteString(ボックス番号, true/false ,代入する変数);|一番目の引数のボックス番号には送信時指定したボックスの番号を整数で指定します。
:|二番目の引数にはtrueかfalseを指定します。trueの場合は、メッセージを受け取ったらそのボックスがクリアされ、falseの場合はクリアされません。
:|三番目の引数には、値を代入する先の文字列変数を指定します。

:SendRemoteNumber(接続番号,ボックス番号,送信する数値);|接続番号のNXTのボックス番号のメールボックスに数値を送信します。

:SendRemoteStrning(接続番号,ボックス番号,送信する文字列);|接続番号のNXTのボックス番号のメールボックスに文字列を送信します。

***スレーブ側 [#me3c7c1a]
:ReceiveRemoteNumber|
:ReceiveRemoteString|マスター側と同じです。

:SendResponseNumber(ボックス番号,送信する数値);|マスターのボックス番号のメールボックスに数値を送信します。

:SendResponseString(ボックス番号,送信する文字列);|マスターのボックス番号のメールボックスに文字列を送信します。

**コメント [#a141aeda]
何か不具合があればどうぞ
#comment


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS