XBee経由でArduinoのスケッチ書き込み

昨日書いたBLOGの続きで、XBee経由でArduinoにスケッチを書込む方法を模索中。

波形をみるとArduino IDEは57600bpsで書き込もうとしていた。XBeeの設定は9600bpsなのでこのままだと通信が成立しない (ところでArduinoは機種によって書き込み速度が違うらしく、UNOとかは115200bpsだそうだ)。
書き込み速度を落とす事は簡単ではないので、XBeeの方を57600bps設定にしてみた。
フロー制御無しなのが不安ではある。
また手動リセットだとタイミングがつかめないのでリセット信号だけは図の様に有線で接続した。
これで試したところ、正常にスケッチを書き込めている。

リセットだけ有線

XBee経由でスケッチ書き込み。
(リセットだけ有線。描いてないがGND同士は接続。)

リセット入力から書き込みデータ送信までの時間を波形で確認したところ意外に長く、2秒程度であった。またリセット信号が出るタイミングはArduiono IDEに「マイコンボードに書き込んでいます」の表示が出る瞬間である事も判った。という事はこの表示が出てから2秒以内にリセットボタンを押せば書き込めるはず・・・。
有線リセットの配線を取り外し、このタイミングで手動リセットを押してみたところ、無事スケッチを書き込む事ができた。

これでとりあえずはスケッチの更新を無線でできる様にはなった。しかしなんとか自動リセットにならないものか? もう少し調べる事にする。

XBee

だいぶ前に購入して放っておいたXBee(Series2)を動かしてみた。

XBeeの端子は2mmピッチなので、まずは変換基板を作成する。早速CNCで切削してみた。 基板の真ん中付近はユニバーサル領域である。

Board for XBee

XBee用2.5mmピッチ変換基板 その1

この基板にXBee用2mmピッチコネクタを取付けた後で失敗に気付いた。2.54mmピッチのコネクタ部分の幅が広すぎてブレッドボードに載せられないのだ。

Board for XBee

こりゃ失敗。幅が広すぎた。

市販の変換基板は2mmピッチ端子よりも内側に2.54mmピッチ端子が並んでいる。しかしなんだか使いにくそうに見えたので外側に配置したのだが、そういう事だったのね・・・。
教訓:先人の知恵に学べ(違う事をするならよく考えてからにしろ)

早速作り直した基板がこれである。2.54ピッチ端子を内側に移動した。これにより外形がコンパクトにもなった。 中央付近のユニバーサル領域は8×2に変更。

Board for XBee 3

XBee変換基板 その2

この基板を先日作成したFT232RLアダプタ経由でPCと接続するのだが、XBeeは3.3V電源なのでアダプタを少し改造した。FT232RLは3.3Vレギュレータを内蔵しており、この出力(3V3OUT:17pin)をIO電源(VCCIO:4pin)に接続することで3.3V化できるのだ。 そこで小型のスイッチを取り付け、5Vと3.3Vを切替え可能にした。

FT232RLtoXBee

FT232RLボード+XBee 5V/3.3V切替えSW付き。

 

通信の相手方にはArduino Pro Miniを使う事にする。先程失敗したピッチ変換基板であるが、よく考えると最低限必要な端子は左半分で済むので写真の様にずらして挿せばブレッドボードで使用できる事に気付いた。
電源は3.3Vのスイッチング電源である(壊れたプリンタから取り外したもの)。

XBee実験

とりあえずこれで通信できた

あちこちのサイトを見て回り、XBeeモジュールの最低限のお手軽設定を次の通りに実施。
<PC側モジュール>
・まずXCTUで出荷時の設定を読み込み。
・Function Setを “ZIGBEE COODINATOR AT”に設定。
・DHを0013A200(相手方のアドレス上位)
・DLを409EXXXX(相手方のアドレス下位 XXXXは4桁のHEX)

<Arduino側モジュール>
(一旦Arduiono側ソケットから外し、ホスト側に指した状態で設定する)
・まずXCTUで出荷時の設定を読み込み。
・Function Setを “ZIGBEE ROUTER AT”に設定。
・DHを0013A200(相手方のアドレス上位)
・DLを409EXXXX(相手方のアドレス下位 XXXXは4桁のHEX)

※XCTUはXBeeの設定ツールで、Digiのサイトからダウンロードした。
※各モジュールのアドレスは裏側に書いてある。

Arduinoにシリアルを読んでLEDをつけたり返事を返したりするスケッチを書き込んでおき、シリアルモニターから色々入れてやると、それに応じてあっけなく動作した。

しかし・・・
もう一つやりたかったのが無線経由でのスケッチの書き込みである。しかしこのままでは上手く行かず、次のエラーがでる。
avrdude: stk500_getsync(): not in sync: resp=0×00
Arduinoはリセット後一定の時間の間に書き込みを開始しなければならなず、普通にシリアルアダプタを使う場合はDTR信号でリセットして直後に書き込みを開始するらしいが、現状のXBee経由だとこの方法が使えない。 何度か手でリセットボタンを押しながら試したのだが、タイミングが合わない為か上手く書き込めなかった(最近のArduinoは自動リセットが前提なので待ち時間が短いらしい)。
XBeeの説明書を見て何とかリセット信号を出せないかと考えているのだが・・・これまた英語なので苦労している。
あちこちのサイトを見て回ってもスケッチを書込む例が見当たらないので、かなり厳しいのかもしれない。