広告
*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"; 広告 |