2016年09月07日
ルンバをXBeeでコントロール (Part 2)
○ 環境設定
前回まではハードウエアの設定を行ったので、今回はSWの設定を行う。
私はPerlを使っているが他にPhythonやC、Rubyなど開発言語は色々使えそうだ。
手順は以下の通り。
1) Perlが動作する開発環境 (OSXもしくはRaspberry Pi)
2) 2種類のテストコードを以下に置いておくので、必要なモジュールのインストールを行う。
基本的にはベーシックの方を使う。
testRmba.pl ・・・ベーシック
testRmba2.pl ・・・ステータスを1分に一回確認してファイルにセーブする
>sudo cpan
で、CPANに入って以下のように使っているモジュールをインストール
>install Device::SerialPort
>install Device::XBee::API
>install Data::Dumper
>install threads
>install threads::shared
>install Thread::Queue
>install Schedule::Cron
以下のコマンドで抜ける。
CPAN>quit
3) 環境に合わせて以下の箇所を変更。
SERIAL_PORTは、ホスト側につないだ時のUSBのPort。
XBEE_ADDRESSはルンバ側に接続するXbeeのLowアドレス。
use constant SERIAL_PORT => "/dev/tty.usbserial-AH017K8D";
use constant XBEE_ADDRESS => 0xFFFFFFFF;
4) コマンド入力用のパイプの作成
>mkfifo input-fifo
5) Xbeeをルンバ、Host側に接続してテストコードを実行。
>perl testRmba.pl
Joint Notification=1にしているので、一回目に実行すると接続したダンプメッセージが表示されたと思う。
○テストコードの使い方
テストコードの中身を見てもらえばわかるのだが、Perlを実行して別ターミナルから以下のようにEchoしてinput-fifo経由でコマンドを入力する。
> echo TX,XX,XX > input-fifo
一応、以下のコマンドを用意しているが、TX以外はこのテストコードでは確認していない。
(多分、動作すると思う)
TX・・・シリアルコマンド、ルンバにデータを送信
AT・・・Host側のXbeeの設定行う時に使うATコマンド
RAT・・・ルンバ側のXbeeの設定行う時に使うRemote ATコマンド
○動作させる
1) ステータスコマンドの確認
以下のように打ってデータの羅列が出れば、問題なし。
> echo TX,0x8e,0x0 > input-fifo
2) 以下のコマンドでCleanがスタートする。
> echo TX,0x80 >input-fifo ・・・スタート
> echo TX,0x82 > input-fifo ・・・コントロール
> echo TX,0x87 > input-fifo ・・・クリーン
ルンバの状態遷移、コマンドに関してはルンバが出している Create Open Interface_v2.pdf を参考にしてほしい。
参考までに私が知りたかったホームにルンバがいるかどうかはステータスをチェックで"Charging Sources Available"のHome Baseビットを確認すれば良い。
testRmba2.plの方では、毎分ステータスチェックのコマンドを発行してこのビットを確認し、動作している時だけステータスをファイルに落とすようにしている。
ビデオ
以下はPCから先ほどのXbeeにコマンドを打った場合。
以下はXbeeシステムに取り込んでiPhoneから制御。
ステータスチェックを毎分行っているので、ホームベースに戻ってからiPhone側のステータスが変わるまで最長で1分の遅れがある。
前回まではハードウエアの設定を行ったので、今回はSWの設定を行う。
私はPerlを使っているが他にPhythonやC、Rubyなど開発言語は色々使えそうだ。
手順は以下の通り。
1) Perlが動作する開発環境 (OSXもしくはRaspberry Pi)
2) 2種類のテストコードを以下に置いておくので、必要なモジュールのインストールを行う。
基本的にはベーシックの方を使う。
testRmba.pl ・・・ベーシック
testRmba2.pl ・・・ステータスを1分に一回確認してファイルにセーブする
>sudo cpan
で、CPANに入って以下のように使っているモジュールをインストール
>install Device::SerialPort
>install Device::XBee::API
>install Data::Dumper
>install threads
>install threads::shared
>install Thread::Queue
>install Schedule::Cron
以下のコマンドで抜ける。
CPAN>quit
3) 環境に合わせて以下の箇所を変更。
SERIAL_PORTは、ホスト側につないだ時のUSBのPort。
XBEE_ADDRESSはルンバ側に接続するXbeeのLowアドレス。
use constant SERIAL_PORT => "/dev/tty.usbserial-AH017K8D";
use constant XBEE_ADDRESS => 0xFFFFFFFF;
4) コマンド入力用のパイプの作成
>mkfifo input-fifo
5) Xbeeをルンバ、Host側に接続してテストコードを実行。
>perl testRmba.pl
Joint Notification=1にしているので、一回目に実行すると接続したダンプメッセージが表示されたと思う。
○テストコードの使い方
テストコードの中身を見てもらえばわかるのだが、Perlを実行して別ターミナルから以下のようにEchoしてinput-fifo経由でコマンドを入力する。
> echo TX,XX,XX > input-fifo
一応、以下のコマンドを用意しているが、TX以外はこのテストコードでは確認していない。
(多分、動作すると思う)
TX・・・シリアルコマンド、ルンバにデータを送信
AT・・・Host側のXbeeの設定行う時に使うATコマンド
RAT・・・ルンバ側のXbeeの設定行う時に使うRemote ATコマンド
○動作させる
1) ステータスコマンドの確認
以下のように打ってデータの羅列が出れば、問題なし。
> echo TX,0x8e,0x0 > input-fifo
2) 以下のコマンドでCleanがスタートする。
> echo TX,0x80 >input-fifo ・・・スタート
> echo TX,0x82 > input-fifo ・・・コントロール
> echo TX,0x87 > input-fifo ・・・クリーン
ルンバの状態遷移、コマンドに関してはルンバが出している Create Open Interface_v2.pdf を参考にしてほしい。
参考までに私が知りたかったホームにルンバがいるかどうかはステータスをチェックで"Charging Sources Available"のHome Baseビットを確認すれば良い。
testRmba2.plの方では、毎分ステータスチェックのコマンドを発行してこのビットを確認し、動作している時だけステータスをファイルに落とすようにしている。
ビデオ
以下はPCから先ほどのXbeeにコマンドを打った場合。
以下はXbeeシステムに取り込んでiPhoneから制御。
ステータスチェックを毎分行っているので、ホームベースに戻ってからiPhone側のステータスが変わるまで最長で1分の遅れがある。
【XBeeの最新記事】
この記事へのコメント