伝説のSpice特別企画 いまさらIOT
programmable xbee 通信設定
programmable
xbeeとxbeeの違いと基本設定.
programmable -xbee 外観は普通のxbeeと見分けがつけられない
programmable -xbee 外観は普通のxbeeと見分けがつけられないほど良く似ています。 型番以外で判断は難しいでしょう。 間違って買った人もおいかと思います。 買ったんだから使いたいと思ってもこれがまた一癖あって、初めて使うとき構成がわかっていないので壊れているかな?とも思ったりします。 XCTUの無線設定さえ受け付けてくれません。 しかし、構成とその理由を知ればうまく行く方法が見つかります。
programmable -xbee は2つのCPUを持ちます。 当然無線ユニットを制御するCPUはどれにも搭載されています。 しかしそれに加えてユーザーがプログラムすることが出来るCPUを別途もっています。 無線ユニットのCPUがprogrammableなわけではありません。 下記の構成図のようにもうひとつCPUが搭載されていて、シリアルのコマンドはこのCPUがインターセプトしています。 その他ポート信号は多重に接続さています。
その回路図は下記ドキュメント 37,38ページに掲載されています。 とても薄くて見えにくいですが、注意してみると良くわかります。 2つのCPUのポートはxbeeのひとつのピンを共有しています。 この共有していることを良く理解することもポイントです。
S2Cのドキュメント XBee®XBee-PRO S2C
programmable -xbeeは通信ボーレートは115200bps固定のようです。 これはbootLoaderで決まっているようで、無線の通信設定とは違います。 そのため違うボーレートを無線側で設定するとややこしいことになります。 ここではすべて115200bpsで統一します。
通信のメッセージタイプは大きく分けて2種類
Transparent modeとAPI modeです。 Transparent
modeは単純です。 ホストCPUが送信したメッセージをそのまま相手側に送信します。 そのため細かな操作を出来ません。 API
modeはメッセージをパケット化して送信します。 詳しくは上記PDFドキュメントの82ページ辺りにあります。
Transparent でも無線に乗っているところではAPI
と同じフォーマットになっています。 xbeeが無線CPUの中で上手にパケット化して送信しています。 そのおかげで通信相手がTransparent
やAPIが混在しても問題ありません。
ATコマンドはローカルなxbeeをダイナミックに変更
どちらのメッセージタイプを使用していてもATコマンドといわれるコマンドを送受信して自分につながっているローカルなxbeeの設定を変更することが出来ます。
トランスペアレントモードで運用しているとき、キーから+++と3個連続で入力します。 これは今のスルーの状態を抜けてATコマンドモードに入ることを指示します。 OKが返された後はATコマンドモードです。
ATコマンドは続いて2文字固定でコマンドを送ります。 ここではAPとかCNとかです。 その他xbeeの設定はほとんどすべてにATコマンドが割り当てられています。 上記ドキュメントのATcommandの項を見てください。
APIモードで運用しているときはパケットでATコマンドを指定するだけです。 パケットのフォーマットは同じくドキュメントを見てください。 DiGiの XBee Zigbee Mesh Kit User Guide の説明サイトのAPI説明のところです。 API frame structure なにが良いかというとWebなのでGoogle翻訳にかけられます。 クリックひとつで日本語になります。 基本的なところは共通ですから、このドキュメントから翻訳して読み取ることが早いかと思います。
通信設定のプログラムXCTUでうまく認識しない問題
programmable -xbeeはパワーオンではbootLoaderが起動します。 この時点では無線ユニットのCPUには通信データは送信されません。 bootLoaderは受け取ったキャラクタをそのまま返信したりします。 この手順とXCTUが上手に処理をしてくれません。 少なくとも現時点ではそのようなことが発生します。 XCTUにprogrammable -xbeeを認識させるには上記構成を覚えておく必要があります。 上手にXCTUに接続させる方法を動画にしています。
以前のバージョン X-CTUを使うとシンプルでわかりやすい
リセットボタンを押した後、改行キー(0x0d)を端末から送ります。 bootLoaderは下記のメニューを返信してきます。 このメニューはモデルの違いにより違うかもしれません。 今回のモデルの場合です。
B-Bypass Mode
F-Update App
T-Timeout
V-BL Version
A-App Version
R-Reset
>
このケースで重要なコマンドは[B]と[F]です。 今は[B] Bypass Mode が関連します。 上記の図でインターセプトしているCPUは入出力をそのままバイパスします。 そうなった時点で通常のxbeeと同じ状態となります。 以降の扱いは同じように行えますので、人によってはホストプログラムで「0x0d][B]を送信してバイパスモードにしてその後通信しているケースもあるようです。 と言うかそうするしかないです。 その状態になると新しいXCTUツールでも難なく認識をします。 その手順も動画を参考にしてください。
1対1でお任せ通信設定をする手順
今回は相手をダイナミックに変更しません。 そのためお互いにお互いのデバイス番号(ネットワーク上の識別コード)を登録しておきます。 そうすれば、プログラムで難しいことをすることなく無線はつながります。
設定する項目はATコマンドでもアクセスできます。 XCTUでは直接設定しますが、APIモードでホストCPUから設定することも出来ます。 そのためATコマンド名称とセットになっています。
必須設定する項目
ID (Extended PAN ID)
PAN-IDと呼ばれてグループの番号を設定するところです。 無線は同じ帯域で多く同じ周波数帯をシェアーして使用しています。 xbee同士も別のネットワークを形成しているものも通信圏内にあるでしょう。 それらと混信しないよう グループにID番号をつけます。 逆に言うとこの番号の一致しないものとは通信しないということです。
CE (Coordinator Enable)
通信の役割には ルーターと、コーディネーターがあります。 このどちらかを選択する必要があります。 コーディネータはネットワークの中に1つしか存在が許されていません。
0=Not a Coordinator
1= Coordinator
DH command / DL command
通信相手の番号を指定します。 xbeeには必ずユニークな32ビットの(8桁の)番号を持っています。 この番号は重複していません。 相手側の番号をここに設定すると自動的にその相手に無線接続します。 DHは上位、DLは下位です。
BD (Interface Data Rate)
ホストとの通信接続の速度です。 今回は上記に説明した理由で115200bpsを必ず設定します。
API Enable
ホストとの通信フォーマット選択です。 Raspberry側はTransparent 接続です。 ただし、バイパスモードをprogrammableの部分に書き込む場合はAPIモードで設定してプログラムでTransparent に変更します。 デバイス側はAPI接続です。
0 API disabled (operate in Transparent mode) Transparent モードのことです。
1 API enabled APIモードのことです。
2 API enabled (with escaped control
characters) APIモードでさらにエスケープ処理をする場合です
詳しくはドキュメント151ページあたりです。
NI command
必須ではありませんxbeeにつける名前です。 この名前はprogrammable -xbeeではプログラムでアプリケーション名称に書き換えられます。
間違ってprogrammable -xbeeを二つ購入したとき(私の場合)
今回はこのあとバイパスモードをprogrammableの部分に書き込んでパワーオンでバイパスモードになる手順をとります。 次項以降にてCodeWarriorを使用してバイパスモードにするプログラムを作成して書き込みます。 このあたりの情報はWebにありません。 もしかしたら流行おくれかもしれません。 ピークは2016年あたりのようです。 メーカーもprogrammable -xbee出してみたもののユーザーが追従してこないと嘆いているかもしれません。 C,C++でガリガリ書くスタイルは流行らないということでしょうか?
Raspberry側は普通のxbeeを選択するほうが賢明
もうひとつの選択は、programmableでないxbeeを使用することです。 デバイス側(モータ制御)はprogrammableを必要としていますが、raspberry側はその必要が無いのでかえって邪魔なのでこちらは通常のxbeeを使用するほうが賢明でしょう。 XCTUを使用した設定動画ではxbee3との比較をしながらprogrammableとそうでない場合の違いを解説しています。
古いタイプの設定プログラムX-CTUは必須
programmable -xbeeはCodeWarriorを使用して、プログラムを開発していれることが出来ます。 そのときにプログラムを書き込む手順にはX-MODEMプロトコルが必要です。 しかし、探し方が悪いのか新しいtoolにはそのメニューが見つかりません。 プログラム開発には古いツールを使うしかないようです。 でも古いほうがシンプルで使いやすいです。
参考にしたページ