2012年11月8日木曜日

XBeeでリモコン化(3)

XBeeにUDPでパケットを送ると、ATコマンドとして制御ができます。

iPhoneからの通信はGCDAsyncsocketのお世話になりました。

以下は試した時のサンプル。

severはXBeeからの応答受信用です。
clientでXBeeにATコマンドを送っています。



=== server ===
#! c:\/Perl/bin/perl.exe

use Socket;

$port = 0x0BEE;

print "xbee IP service receiver\n";
print "wait upd packet port $port\n";

socket(SOCKET, PF_INET, SOCK_DGRAM, 0)
or die "can't create socket\n";

bind(SOCKET, pack_sockaddr_in($port, INADDR_ANY));

$recv_count = 0;

while(1)
{
recv(SOCKET, $buf, 10000, 0);
$recv_count++;
print "$recv_count:$buf\n";
}

=== client ===
#! c:\/Perl/bin/perl.exe

use Socket;

$port = 0x0BEE;
$host = "192.168.0.1";

$iaddr = inet_aton($host)
or die "$host not exist\n";

$sock_addr = pack_sockaddr_in($port, $iaddr);

socket(SOCKET, PF_INET, SOCK_DGRAM, 0)
or die "can't create socket\n";

@data = ();

push(@data, 0x02); # command id : 0x02 : AT command
push(@data, 0); # command option : 0
push(@data, 1); # frame id
push(@data, 2); # confiuration option : 0 queued, 2 apply
push(@data, 0x44); # AT command : D 0x44
push(@data, 0x30); # AT command : 0 0x30
$value = shift @ARGV;
push(@data, $value); # AT command parameter : 4 DOUT low

send(SOCKET, pack('C*',@data), 0, $sock_addr)
or die "send fail\n";

print "sended to $host:$port\n@data\n";

0 件のコメント:

コメントを投稿