Top > XBee > API > Perl

広告

PerlからXBeeを操作

Perlからはシリアルポート経由でXBeeを叩けば良いのだけれど、いろいろめんどうなので先達が作ってくれたモジュールを使う。

準備

ダウンロード、インストールする。

  • XBee perl moodules
    • XBeeと通信するためのPerl用モジュール
    • 特にインストールする必要はないけど、Exampleがあるディレクトリで実行する必要がある。
  • Device::SerialPort が必要。DebianとUbuntuは「libdevice-serialport-per」という公式パッケージをインストールする。

使い方

Exampleがいくつかあるのでそれを参考に使ってみる。

Xbee::ATの場合

これは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の場合

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ではできない

#!/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
Last-modified: Thu, 05 Jan 2012 17:12:15 JST (4942d)