Logo address

XBee

2014/01/22
2023/04/11 「はじめに」を追加

はじめに

以下の記事は 2014 年に書かれ、そのまま公表するのを忘れた、今(2023年)となっては古い記事である。最近になって XBee を弄る機会があって、読み返してみるとメモ的である。

現在取り組んでいるのは、Plan9 と Lua と XBee の組み合わせである。どれもマイナーな存在で、この組み合わせで遊んでいるのは世界で唯一人だと断言してよい。やりたいのは、スクリプト言語で手軽に XBee をコントロールすることである。そのためには Plan9 の能力と、Lua の能力が必要であった。ほぼ完成したので苦労話をどこかで公表することにする。記事が完成したらリンクを貼る予定である。--> 完成しました。 http:index2.html

以下は古い記事のままである。

準備

Switch Science XBee USB アダプター(リセットスイッチ付き)
USBシリアル変換: FT232RL (FTDI)
XBee ZB

実験には(多少お金がかかっても) XBee を USB アダプター に取り付けた方がよい。

以下、Mac を想定。

FTDI driver

Mountain Lion or before

ドライバのダウンロード

http://www.ftdichip.com/Drivers/VCP.htm
ダウンロードされるファイル名は
FTDIUSBSerialDriver_v2_2_18.dmg
この中には
FTDIUSBSerialDriver_10_3.mpkg
FTDIUSBSerialDriver_10_4_10_5_10_6_10_7.mpkg
が含まれる。

インストールして XBee を USB に取り付けると

/dev/cu.usbserial-xxxxxxxx
/dev/tty.usbserial-xxxxxxxx
が現れる。ここに {xxxxxxxx} は固有の文字列である。

これが現れない場合には、デバイスを疑うよりもケーブルを疑った方が良い。(電源供給専用ケーブルを使っていないか?)

以下では {/dev/cu} の方を使う。({/dev/tty} は目的が違う)

Mavericks

Mavericks には既にドライバが含まれているらしい。

XBee ZB

MAC アドレス

購入した XBee の MAC アドレスは裏面に書かれている。マウントすると見えなくなるので、XBee にラベルを貼り、MAC アドレスを記録しておくのが良い。(これらはコマンドで読み取る事もできる)

筆者のは

(A) 13A200 40A74607	# coordinater
(B) 13A200 40ADD424	# router
(C) 13A200 40A74509	# end device
である。

ネットワーク・アドレス

通信先を決めるのに使われる。2種ある。

通信先は64bitで指定するが、先頭48bitが0の場合には 16bit アドレスが指定されたと見なされる。

特殊なアドレス。(16進数で書くと)

ZigBee ネットワーク

(a) 同一の ZigBee ネットワークの PAN ID は同じにする。0 以外の値に設定する。
(b) 同一の ZigBee ネットワークには必ず coordinator が 1つ必要。1つだけ。
(c) coordinator と router は常時電源 ON にする。

購入時の XBee の firmware は

多様なモード
firmware で決まる。

各々について、さらに2つの種類がある。

Firmware

ZigBee RF Modules by Digi International
Models: XBEE2, XBEEPRO2, PRO S2B
Hardware: S2 and S2B
Firmware Versions:
firmware update には X-CTU が必要になる。
X-CTU は Win と Mac でサポートされている。

X-CTU

XBee のファームウェアの更新には X-CTU が必要になる。X-CTU には Windows 版と Mac 版がある。

http://www.digi.com/support/productdetail?pid=3352&osvid=57&type=utilities
書籍には古いバージョンが解説されているが、UI が全く異なる。
ネットの解説も古い。

Linux でも相当品が存在するらしい。
http://www.moltosenso.com/client/fe/browser.php?pc=/client/fe/download.php

moltosenso Network Manager™ IRON is the cross-platform answer for the users of Digi International® X-CTU™. The same functionalities are now available on Microsoft Windows®, Linux® and Mac OS X™ operating systems.

使い方

ネットには X-CTU の使い方の解説が多数あるが、X-CTU の UI が大きく変更されたために、ネットの情報はあまり役に立たない。

この ICON は XBee を探す時に使う

9600bps しか動作しない... (Win 版も)

XBee recovery で firmware を更新する。

Mac

X-CTU は現在では Mac もサポートされている
使い方は Win 版と同じ。

40003027_A.dmg
xctung.app

Mavericks にバグ?

2014/01/22

これまで問題なく出来ていたファームウェア交換ができなくなった...
状況の変化を考えてみると...
これまでは Mountain Lion の MacBook でファームウェア交換をしていたのだが、今回は Mavericks の MacBook Pro でやったのだ。
Mountain Lion の MacBook を使ったら、成功した。

ATT operation

最初は ATT(AT/Transparent) で実験するのが良い。
そこらの通信プログラムが使える。
リモート XBee の設定内容は、この operation では見えない。

注意: 通信速度等の初期設定値:

9600bps
1 stop bit
8bit
non-parity
は変更しない方が良い。変更すると面倒なことになる。

ATVR # firmware version -> 22A7
ATHV # hardware version -> 194B

API operation

パケット通信モードである。XBee ネットワークで使う。リモート XBee の設定を見たり、変えたりするには API モードでないとできない。

新作ソフト

僕は X-CTU のようなコテコテした初心者向けのソフトは嫌いで、また実際に何が起こっているのか、よく分からない。そこでシンプルなのを作る事にした。

Mac で動かしているが、Unix 系ならどれでも動くはずである。

att

ATT(AT/Transparent) operation で使う。このプログラムはシンプルな通信プログラムである。
使い方は
att $device
である。ここに {$device} は {/dev/cu.usbserial-xxxxxxxx}

api

api は API operation で使う。使い方は、ローカル XBee と通信する場合には
api $device
リモート XBee と通信する場合には
api -d $address $device
である。ここに {$address} は通信相手のアドレス(MAC アドレス、あるいは 16bit アドレス)である。

api の使い方は att と同じである。例えば

ATSL
で通信相手の MAC アドレスの下位4バイトを読み取れる。
ATDH 0
ATDL FFFF
で通信相手の XBee の destination address を変えられる。

送信メッセージおよび受信メーセージが16進数で表示される。

crun

XBee 通信によって、リモートの Mac をコントロールするのに使える。
crun $device /bin/sh

LESSONS

Lesson 1

目標

X-CTU の使い方を知る

機材

XBee ZB, XBee USB adapter (Switch Science), micro USB cable, パソコン: 1つづつ

ソフトウェア

X-CTU

Lesson 2

目標

XBee の AT コマンドの使い方を知る

機材

パソコンを1台
Firmware: ATT operation (何でも良い)

ソフトウェア

att

att の起動
att デバイス

att /dev/cu.usbserial-A603BUCH
注意: A603BUCH については
ls /dev/cu.*
で確認する

以下の説明で「デバイス」とは、このような cu デバイスとする。

コラム

/dev/cu と /dev/tty の違い
tty はモデムを介さない通信に使う。他方 cu はモデムを介した通信に使う。XBee はモデムを介したの通信モデルを採用しているので /dev/cu の方を使う。

ATコマンドの形式

AT コマンドは
ATXX パラメータ
の形式である。XX には2文字の命令が来る。 パラメータ は16進数で指定する。大文字小文字の区別はない。「 パラメータ」は省略可能である。その場合には状態が得られる。XX と「 パラメータ」は0個以上の空白で区切られる。

課題

Enter AT command mode → +++ # CR を打たない。1秒待つ。
Exit AT command mode → ATCN
MAC address → ATSH, ATSL
Firmware version → ATVR

注釈: 非常に多くの AT コマンドがある。
AT モードは、ローカルな XBee を操作対象にしている。リモートの XBee の設定を見る手段は無い。

Lesson 3

目標

パソコンを2台準備し、1対1通信を行う

準備

Firmware: 1つをコーディネータ、他方をルータ
通信プログラム: att

現在の通信相手のアドレスは
ATDH と ATDL で分かる。
ATコマンドで通信相手のアドレスを指定する。例えば通信相手のMACアドレスが
上位 13A200、下位 40A74509 であれば

ATDH 13A200
ATDL 40A74509
で設定する。

ソフトウェア

att

課題

両方のパソコンで att を動かし、適当に文字を入力してみる。その結果が他方のパソコンに送られているのを確認する。

コラム

ブロードキャスト
通信相手のMACアドレスを 000000000000FFFF に設定すると全ての XBee にメッセージが送られる
ATDH 0
ATDL FFFF
混線する危険性が無いなら、 ブロードキャストが使いやすい。(相手のアドレスを知らなくてもよいから)

Lesson 4

目標

パソコンを2台準備し、一方のパソコンから他方のパソコンをコマンドで制御する (sh を操作する)

ソフトウェア

att, crun

課題

一方のパソコンで att を起動し、他方のパソコンで
crun デバイス /bin/sh
を実行する。

att を起動したパソコンから他方のパソコンの sh を操作できる事を確認する。

コラム

sh は標準入出力を使うので、直接的には device との I/O ができない。これを可能にしているのが crun である。

Lesson 5

目標

2台のパソコンを準備し、XBee を接続する。
X-CTU を使って XBee を API モードに設定する。(ファームウェアの交換を行う)
1つをコーディネータ、他方をルータにする。
ネットワーク ID を共に 1 にする。(0以外の共通の ID なら何でもよい)
一方のパソコンから、他方の XBee の MAC アドレスを読み取れているのを確認する。

ソフトウェア

X-CTU

Lesson 6

目標

ソフトウェア

api

api は att と同じ感覚で操作できる API モード用のツールである。
送信した内容と返答が16進数で表示される。

api の起動

ローカル XBee を操作する時には
api デバイス
リモート XBee を操作する時には
api -d リモートアドレス デバイス
「リモートアドレス」とは、通信相手の XBee の MAC アドレスである。FFFF にするとプロードキャストでアクセスできる。

課題

ローカルな XBee に対して、
ATSH
ATSL
コマンドを発行して、返答の中に、MAC アドレスが含まれているのを確認する。

Lesson 7

目標

リモートの XBee の設定を見る。

ソフトウェア

api

課題

リモート XBee に対して、
ATSH
ATSL
コマンドを発行して、返答の中に、MAC アドレスが含まれているのを確認する。

文献

[1] 濱原、佐藤「超お手軽無線モジュールXBee」(CQ出版社)
注釈: これが一番詳しいが、特殊なハード環境を想定している。また重要な説明を欠いていることがある。
[2] Robert Faludi (小林、水原訳)「XBee で作るワイヤレスセンサーネットワーク」(O’REILLY)
注釈: ZigBee ネットワークを概念的に知るのに良い。
[3] 鄭立「ZigBee 開発ハンドブック」(リックテレコム, 2012)
注釈: XBee コマンドリファレンスが載っていない!
[4] X-CTU Configuration & Test Utility Software
http://ftp1.digi.com/support/documentation/90001003_A.pdf‎
[5] XBee Command Reference Tables
http://examples.digi.com/wp-content/uploads/2012/07/XBee_ZB_ZigBee_AT_Commands.pdf
[6] ZigBee SIG-Jp「ZigBee 仕様書」
http://www.zbsigj.org/download/085224r00ZB_MG-ZigBee-Specification-053474r17_Japanese_08120.pdf