XBeeを繋いでみた。


ZigBeeに対応した製品であるXBeeでPCとArduinoを繋いでみました。色々とめんどかったのでまとめますね。
以下のサイトと書籍を参考に設定しました。


XBeeを設定する

XBeeにグループや接続先などの設定をする必要があります。
参考にしたサイトと僕の端末でファームウエアや製品の差異があるみたいで、一部そのままではできませんでした。

ドライバ設定

Virtual COM Port DriversMac OS X x64 (64-bit) の VCP Driverを落としてインストールします。

ポートの取得
ls /dev/tty.*

/dev/tty.Bluetooth-Modem	
/dev/tty.Bluetooth-PDA-Sync
/dev/tty.usbserial-A4013ABD

僕の環境だと /dev/tty.usbserial-A4013ABD が接続しているXBeeのポートです。移行、この名前を使いますが、自分の環境で置き換えてください。

picocomのインストール

XBEEを設定するターミナルをインストールします。ZTermとか色々あるみたいですが、Terminalから使えるpicocomをインストールしました。

brew install picocom

XBeeに接続するには以下を実行します。

picocom --echo --imap crcrlf /dev/tty.usbserial-A4013ABD

picocom v1.6

port is        : /dev/cu.usbserial-A4013ABD
flowcontrol    : none
baudrate is    : 9600
parity is      : none
databits are   : 8
escape is      : C-a
local echo is  : yes
noinit is      : no
noreset is     : no
nolock is      : no
send_cmd is    : sz -vv
receive_cmd is : rz -vv
imap is        : crcrlf,
omap is        : 
emap is        : crcrlf,delbs,
ATコマンドで端末を設定
  • ATID ネットワークグループ
  • ATDH / ATDL 宛先

を設定すればいけます。
宛先を設定するためにXBee端末の裏にIDが入力されているので控えましょう。
※参考サイトではATMYに任意を値を設定してるけど、現在(?)はできません。読み込み専用です。

サンプル

ATID(ここが同じのXBee同士が繋がる)
ATDH
ATDL(この二つに指定された宛先を繋がる)

というわけで以下みたいな感じで設定しました。

XBee A

ATID2001
ATDH0013A200
ATDL4086B111

XBee B

ATID2001
ATDH0013A200
ATDL4086B126
ソースコード

建築発明工作ゼミ2008: Arduino+Xbee Shield/Processing+XBee Explorer USBを流用しました。以下引用です。

Arduino

int val;//受信データ用の変数を用意

void setup(){
  //シリアル通信開始
  Serial.begin(9600);
  //13ピンをデジタル出力に設定
  pinMode(13,OUTPUT);
}

void loop(){
  if(Serial.available()>0){ //データが来たら
    val=Serial.read();    //データを読み込み、valへ代入
  }
  if(val=='H'){           //valが「H」の場合
    digitalWrite(13,HIGH);//点灯
  }else{                  //valが「L」の場合
    digitalWrite(13,LOW); //消灯
  }
}

Processing側

//シリアル通信ライブラリを取り入れる
import processing.serial.*;
//ポートのインスタンス
Serial port;

void setup(){
  //「XBee Explorer USB」のシリアルポート設定
  port=new Serial(this,"/dev/tty.usbserial-A8003VXd",9600);
}
void draw(){
  //特になし  
}

void mousePressed(){//マウスボタンを押したら
  port.write('H');  //「H」を送信(点灯)
}

void mouseReleased(){//マウスボタンを放したら
  port.write('L');   //「L」を送信(消灯)
}

Arduinoにソースを書き込む時に以下に注意してください。
スイッチサイエンス/商品詳細 Arduino ワイヤレスプロトシールド

SELEIAL SELECTスイッチによってXBeeの有線接続先を切り替えられます。
スイッチをMICRO側にすると、ArduinoXBeeの接続になります。ただしArduinoからのデータは、USBシリアルによってPCにも送信されるのでご注意ください。
スイッチをUSB側にすると、PC(USBシリアル経由)⇔XBeeの接続になります。このモードを使う場合、Arduinoには事前に下記の「空スケッチ」を書き込んで下さい。

なので、書き込んだあとはMICRO側にしないとXBeeが動きません。注意しましょう。

クリックするとこんな感じで動くはず。きっと。