iNSTITUTEM@STER

iNSTITUTEM@STER

2011年1月16日日曜日

XBee通信部分を作ってみた

   最近流行りのArduinoを使ってみる傍ら、無線通信のユニットであるXBeeを設定しました。
自分で1から書くと分量も多くなる上に冗長なので、リンクが多めです。

 まずは、PC接続ユニットを作ります。XBeeとパソコンをつなげるために、RS-232Cの変換ユニットを間に挟みます。実は、XBee製造元のSparkfunからぴったりのものがあったのですが、知らなかったせっかくなのでお値打ちに作ってみようと思います。
http://www.switch-science.com/products/detail.php?product_id=30


 材料は、秋月電子で販売しているFT232RL USB-シリアル変換モジュールとユニバーサル基板です。モジュールは1個950円、基板は余りものを利用しましたが、値段を付けると20円ぐらいでしょうか。これなら、本家の半額以下で作ることができます。
http://akizukidenshi.com/catalog/g/gK-01977

 製作方法は、こちらを参考にしました。わずか4本の線をつなぐだけですべてが完結!すばらしい。
http://www.maroon.dti.ne.jp/koten-kairo/works/dsPIC/xbee2.html
 

 さて、実際に使ってみます。設定はこちらを参考にしました。
http://kazushi-lab.c.fun.ac.jp/pukiwiki/index.php?Funnel%A4%DE%A4%C8%A4%E1

 ですが、まず引っ掛かったことがあります。
 Virtual PC上のWindows XPではXBeeをうまく設定しませんでした…
 ダウンロードする最新データがうまく取得できませんでした。

 なぜVirtual PCで起動したかと言うと…

 なんかまるで、このソフトはWindows98SEからXPまでですよ、と言わんばかりの表記ですが、実際は、USB接続のためのドライバだけがXPまで対応している、ということでした。設定ソフト自体はWindows7 64bitでも現時点では問題なく動いています。

 ボーレートと、DL - Destination Address Low、MY - 16-bit Source Adressを設定します。二つのXBeeでセットの値にします。たとえば、
1台目:DL=10 MY=11 2台目:DL=11 MY=10と言う具合です。

 つづいで、Arduinoに1台のXBeeを接続して、もう一台はPC接続ユニットにつなげます。後は、Arduinoの開発ツールで書き込めば完了…ですが

 
 やっぱりうまく書き込みができません。
 以下のようなエラーメッセージが出てしまいます。
avrdude: stk500_getsync(): not in sync: resp=0x00

avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51

 何度やってもうまく書き込めません。リセットボタンを押しても、USBをつなぎなおしても同じです。

 ある時、ふと思ったのが、純正品はどのようにつながっているのか、です。回路図も公開されているので、これを見ながら同じようにつなげばいいんじゃないかな、と思いました。

 
 図面上部分の、DIN,DOUT,CTS,RTS,DTRと書いてあるのが、どうやらXBeeとつながっている線のようです。電源2本を加えて、7本つながっていることになります。CTS以下もつながっているということは、データ垂れ流しではなく、ちゃんとフロー制御をしているんですね…

 というわけで、Arduino用には、以下のように回路を変更します。
 CTS,RTS,DTR同士、全てあわせて合計7本つなぎます。


 こうして出来上がった接続ユニットで、無事に通信できました。

2 件のコメント:

  1. シナモンブレードについて質問があるんですが…
    よろしいですか?

    返信削除
  2. 青眼さん
    簡単に終わるような&公開して良い質問ならこちらへどうぞ~

    もし長くなったり、公開はまずい…ということでしたら、「ペンライト頒布について」のなかのメールアドレスへ送ってもらえれば答えますよ。

    返信削除