xbeewifiの実験(AVRマイコンと接続) kunioのHP H26.1.4
xbeewifiを無線ルータへの接続は、遠隔簡易電力監視システムで実現できたが、xbeewifi同士の通信についてはまだ
試してなかったので、今回その方法(APIモード)をX-CTUで確認勉強し、親局にマイコンをつないだ通信までやってみた。
まだ全てを理解できていなし、疑問点もあるが試した内容を紹介します。
上側が親局、下左側が子局1、右側が子局2
冒頭、今回の実験に際し参考にさせて頂いたHPを紹介し、感謝申し上げます。
きむ茶工房ガレージハウス−XBee(無線通信)の実験
xbee(シリーズ1,2)の基本的なノウハウはこちらから盗みました。非常に参考になりました。
Arduino Freaks XBee
Wi-Fi
xbeewifiの特徴など基本的な情報がまとまっています。
(1)X-CTU(PC)による確認
PCに接続したxbeewifi同士をx-ctuを使って設定、通信パケットを確認した。
xbeewifiの設定
基本構成
PCとの接続アダプタは2組しかないので、3台の内2台を接続し入替ながら全体を確認
使用ツール
X-CTU ver5.2.8.6、Digi API Frame
Maker(APIパケット作成ツール)
X-CTUは入力インターフェイスが改善されたver6.1.0があることを最近知った。
ver6.1.0の方がパケットの作成や解析機能等があり、使いやすい感じである。ただAPIコンソールとATコンソール
が前のverのように同時に使えない(xbeeのAPモードによって固定)のが残念。
X-CTUの使い方はここでは省略します。
・設定のデフォルトから変更部分
項 目 |
親 |
子1 |
子2 |
備考 |
ID:SSID |
111 |
← |
← |
*1 |
AH:network type |
1:IBSS creator |
0:IBSS joiner |
← |
|
IP:IP protocol |
0:UDP |
← |
← |
|
MA:IP addressing mode |
1:static |
← |
← |
(*2) |
DL:destination IP address |
192.168.0.5 |
192.168.0.2 |
← |
|
MY:module IP address |
192.168.0.2 |
192.168.0.5 |
192.168.0.6 |
*2 |
MK:IP address mask |
255.255.255.0 |
← |
← |
|
AP:API Enable |
1:API Enable |
← |
← |
|
CH:Channel# of access point |
1 |
(1) |
(1) |
*3 |
補足・留意点 リクエスト ⇒ レスポンス フレームID 内 容 フレームID 内 容 〃 〃
*1 任意に設定
*2 MAをSTATICにしないと設定(保存)できない
*3
親局のみ設定(子局は親局と同じ値になる)、読みだして'FF'となっている場合は未接続状態
親局設定して、フレーム8A:modem statusが、断続的に出力されたらch設定する
設定は、親局(creator)モードで行いATコマンドで実施する('ATCH 1'等、modem configurationでは設定不可)。
APIフレーム
実際に試した、フレームの内容は以下のとおり。
0x00:Tx64
他局へデータ送信
0x80:Rx64
他局からデータ受信
0x89:Txステイタス
自局Tx64の送信結果を受信
0x08:ATコマンド
自局へATコマンド送信
0x88:ATコマンドレスポンス
自局ATコマンド実施結果受信
0x07:リモートATコマンド
他局へATコマンド送信
0x87:リモートATコマンドレスポンス
他局からATコマンド実施結果受信
他局送信タイミングはIR(周期)、IC(I/O変化)設定
0x8F:I/Oデータ受信
他局からDin、A/D情報受信
親局→子局だけでなく、子局→親局や子局→子局であっても正常な通信(結果)が得られると思われる。(全てを確認してない)
確認したATコマンド気になったもの(API動作のATコマンド、リモートATコマンド)
・IS 使用中のI/O入力(Din、A/D)を読む。 I/O使用が未設定(デフォルト)の場合エラー(AT,API共)となるので注意
・%V モジュール電圧計測 2バイト 単位mV
・TP モジュール温度 2バイト値を得られるが温度への換算方法が不明 データシートでは測定範囲は-40〜85℃
(2)AVRを親局に接続し確認
回路図
子局は2台(必要に応じてPC接続)、xbeewifiの設定は前述のとおり
・主要部品
AVRマイコン Tiny2313V 4MHz動作(内蔵RC発信器:シリアル通信のボーレートの精度を上げるためOSCCALによる校正)
LCDディスプレイ SB1602BW I2Cインターフェイス 受信パケット表示
XBee用ピッチ変換基板 親局:sparkfun製(付属三端子レギュレータ0.5A使用、電源に470uFコンデンサ取付)
子1:秋月電子製(付属三端子レギュレータは容量不足のため取外、電源に470uFコンデンサ取付)
子2:ストロベリー・リナックス製:XBeeエクスプローラUSB(電源はUSBより、FT232RL内蔵)
USBシリアル変換モジュール
子1:秋月電子製 FT232RL USBシリアル変換モジュール
温度センサ LM60 子1のAD1に接続、基準電圧1.25V(AV:0)に設定
三端子レギュレータ 3.3V 0.5or1A 入出力には適当なコンデンサを接続(図では省略)
AVRソース
処理の流れ
初期化(AVR、LCD、USART)
xbeeが安定するまで待つ(約1.5秒)
APIフレームを親局に順次送信し、受信したパケットデータをLCDにhex表示させる(表示改行、次パケットはSW押下)
APIフレームデータはあらかじめ作成しておいたものを、定数として使用
受信データのチェックサムを照合し、正常・異常を判定しアイコンで表示(下の結果では全て正常のマーク)
@ATIS 送信先:自身
AリモートATIS 送信先:子1
BTx64 'xbee' 送信先:子1
CリモートAT%V 送信先:子2
DリモートAT%V 送信先:自身(どうなるか確認)
実施結果
@
0x88フレーム Din0使用、AD不使用
A 続き
0x87フレーム AD1入力値18D ⇒ 約10℃
B
0x89フレーム メッセージ送信成功
C 続き
0x87フレーム モジュール電圧 CD0 ⇒ 3.28V
D
、
0x89フレームに続いて、0xB0(RxパケットIPv4)フレームを受信
0xB0の内容がよくわからない。送信元が子2局、データシートを見るとport番号BEEには意味がありそう
2枚目の2556(%V)のあとの5858が結果と思われるが意味不明、たまには正常と思われる値となることもある
いずれにしても、意味のない操作かな
(3)まとめ
当初考えていた、マイコンからパケットを送信し結果を受信するところまで一応確認できた。
(受信データを加工すれば遠隔制御や観測が出来そう)
今後は、これを応用して何か(マイコンとマイコンをxbeeを使って接続したような物)作ろうと思うがいいアイデアが思いつかない。
また、マイコンでA
PIフレームをジェネレートするのもハードルが高そう(^^;