Top > XBee > API > Perl

広告
  • 追加された行はこの色です。
  • 削除された行はこの色です。
  • XBee/API/Perl へ行く。

*PerlからXBeeを操作 [#i5611ea8]
Perlからはシリアルポート経由でXBeeを叩けば良いのだけれど、いろいろめんどうなので先達が作ってくれたモジュールを使う。
*準備 [#z9a41add]
ダウンロード、インストールする。
-[[XBee perl moodules:http://jager.no/projects/xbee/libxctu-perl-0.1.tar.bz2/view]]
--XBeeと通信するためのPerl用モジュール
--特にインストールする必要はないけど、Exampleがあるディレクトリで実行する必要がある。
-[[Device::SerialPort :http://search.cpan.org/~cook/Device-SerialPort-1.04/SerialPort.pm]]が必要。DebianとUbuntuは「libdevice-serialport-per」という公式パッケージをインストールする。
*使い方 [#l00e6a5d]
Exampleがいくつかあるのでそれを参考に使ってみる。~
**Xbee::ATの場合 [#mb4b8a7a]
これはATコマンドバージョンでAPIを使っていないのでSeries 2でもAPIが使えるファームにする必要はない。
 #!/usr/bin/perl
 use Xbee::AT;
 my $Port="/dev/ttyUSB1";
 my $xbee = Xbee::AT->new({ port => $Port, debug => 0});
 #my $data = $xbee->rssi(); #DB command
 #my $data = $xbee->hardware_version(); #Hardware Version
 my $data = $xbee->firmware_version(); #Firmware Version
 print "$data\n";
debugを1にすると実行途中のメッセージが表示される。~
Xbee::ATを使った場合はできることがすくないみたい。
**Xbee::APIの場合 [#f7f57336]
Series 2の場合APIが使えるファームにする必要がある。~
D0 (20 pin)のHi、Lo切り替え
 #!/usr/bin/perl
 use Xbee::API;
 my $Port="/dev/ttyUSB1";
 my $speed=9600;
 my $xbee = Xbee::API->new( { port => $Port, debug =>0, speed => $speed } );
 $command="D0";
 print "SET Low\n";
 $send_data="\x04";
 $xbee->at_command( $command, $send_data, $id);
 my $frame=$xbee->read_api();
 print $frame{checksum} . "\n";
 print "Sleep\n";
 sleep 10;
 print "SET High\n";
 $send_data="\x05";
 $xbee->at_command($command, $send_data, $id);
 print "END\n";

APIを使えばリモートで操作できる。リモートのXBeeもAPIが使えるようにしておく。~
リモートのXBeeのD0を操作
 #!/usr/bin/perl
 use Xbee::API;
 my $Port="/dev/ttyUSB1";
 my $speed=9600;
 my $xbee = Xbee::API->new( { port => $Port, debug =>0, speed => $speed } );
 my $dest64="0013A20040XXXXXX"; #相手先アドレス
 my $dest16="FFFE"; #16-bit アドレス
 my $command="D0";
 my $send_data="\x04";
 print "SET LOW\n";
 $xbee->at_command_remote(pack( "H*",$dest64), pack( "H*",$dest16), $command, $send_data, $id);
 print "Sleep\n";
 sleep 10;
 print "SET High\n";
 $send_data="\x05";
 $xbee->at_command_remote(pack( "H*",$dest64), pack( "H*",$dest16), $command, $send_data, $id);
 print "END\n";

相手のPWM出力を制御。Series 2ではできない
相手の[[PWM出力>XBee/PWM]]を制御。Series 2ではできない
 #!/usr/bin/perl
 use Xbee::API;
 my $Port="/dev/ttyUSB0";
 my $speed=9600;
 my $xbee = Xbee::API->new( { port => $Port, debug => 0, speed => $speed } );
 my $dest64="0013A2004066xxxx"; #相手先アドレス
 my $dest16="0000"; #16-bit アドレス
 
 print "Set PWM\n";
 my $command="P0";
 my $send_data="\x02"; #PWMモード
 $xbee->at_command_remote(pack( "H*",$dest64), pack( "H*",$dest16), $command, $send_data, $id);
 #my $frame=$xbee->read_api(); #受信
 my $command="M0";
 #my $send_data="01FF";	#50%
 my $send_data="03FF";	#100%
 $xbee->at_command_remote(pack( "H*",$dest64), pack( "H*",$dest16), $command, pack( "H*",$send_data), $id);
 #$frame=$xbee->read_api(); #受信
 #print $frame{checksum} . "\n";
 print "Sleep\n";
 sleep 10;
 $send_data="0000";	#0%
 $xbee->at_command_remote(pack( "H*",$dest64), pack( "H*",$dest16), $command, pack( "H*",$send_data), $id);
 $frame=$xbee->read_api();
 print "END\n";

広告

リロード   差分   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS