XBeeを繋いでみた。
ZigBeeに対応した製品であるXBeeでPCとArduinoを繋いでみました。色々とめんどかったのでまとめますね。
以下のサイトと書籍を参考に設定しました。
- MacでArduino Uno + XBEEを使ってみた - むだな ものを つくる
- 建築発明工作ゼミ2008: Arduino+Xbee Shield/Processing+XBee Explorer USB
- Amazon.co.jp: XBeeで作るワイヤレスセンサーネットワーク (Make: PROJECTS): Robert Faludi, 小林 茂(監訳), 水原 文: 本
環境・使ったもの
XBeeを設定する
各XBeeにグループや接続先などの設定をする必要があります。
参考にしたサイトと僕の端末でファームウエアや製品の差異があるみたいで、一部そのままではできませんでした。
ドライバ設定
Virtual COM Port DriversでMac 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を流用しました。以下引用です。
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側にすると、Arduino⇔XBeeの接続になります。ただしArduinoからのデータは、USBシリアルによってPCにも送信されるのでご注意ください。
スイッチをUSB側にすると、PC(USBシリアル経由)⇔XBeeの接続になります。このモードを使う場合、Arduinoには事前に下記の「空スケッチ」を書き込んで下さい。
なので、書き込んだあとはMICRO側にしないとXBeeが動きません。注意しましょう。
クリックするとこんな感じで動くはず。きっと。