XBee(無線通信)の実験パート1
(PCとXBee単体[1個のみ]で接続して動作させて見ます)
〔マイコンのトップに戻る〕
〔パート2〕
〔パート3〕
〔パート4〕
〔パート5〕
〔パート6〕
〔XBee3〕
XBeeモジュールを使って無線通信の実験を行ってみたいと思います。
パート1ではXBeeをパソコンに接続して、X−CTU(XBee設定ツール)の基本操作と、
接続しているXBeeにLEDを配線し点灯させたり、スイッチを配線してデジタル入力を行ったりします。
また、アナログの入力も行ってみます。
2.4GHz帯の通信規格として、近距離無線通信の標準化仕様でIEEE802.15.4が有りますが、 *2)
XBeeはこの規格をベースにしてこの物理層の上の通信層にZigbee規格プロトコールを乗せた物です。
他に無線LANやBluetoothもこの2.4GHz帯の通信規格を利用しています。
XBeeとはUSART(シリアル通信)にて接続出来るのでとってもお手軽に利用可能です、
また、XBeeの内部にマイコンを内蔵しているので、アナログ値の入力(4ポート)やデジタル入出力
(12ポート)が利用出来る様になっています。
XBeeのネットワーク構成
XBeeのシリーズ1では1対1と1対Nでの
接続でしたが、シリーズ2からはスター型・
メッシュ型・ツリー型のネットワーク方式が
可能になりました。
なので、シリーズ2(ZB/S2/ZigBee/S2C)では
必ず接続するネットワーク内にコーディネータと
言うネットワークを管理する親局が一つ存在します
(XBee3も同じです)
因みに購入時のデフォルトはルータとなっています
又、ルータは電波が届かない場所であれば中継の
役目も行います。
エンドデバイスは1対1のみの通信ですが、
低消費電力の為のスリープモードで動作します。
XBeeは数種類有るので、これからXBeeを購入しようと思う人はnanoblogさんのこちらを一読する事を
お勧めします。
私が購入したXBee部品関連は下記です。
秋月電子のXBede ZBモジュール(シリーズ2:S2)PCBアンテナタイプを
2個購入。
ですので、ここでの実験はこのモジュールで行う事になります。
XBeeの電源は2.1〜3.6VDCです。
PS.*3)
2018/1月 現在、XBee S2モジュールは製造中止です、後継機は"S2C"です
こちらの製品です、ここのMyHPは旧記事ですがぁS2Cでも少し追記して置きます。
PS. *4)
2019/7月 現在、更に低消費電力/小型化したXBee3モジュールが販売されているようです。
"XBee3"でも少し追記して置きます。
XBee3は、"MicroPython"を使ってプログラムが可能らしい、ESPの様にマイコンいらずになるのかぁ。
"MicroPython"を利用すると、I2C(マスター)が出来るらしい。
”Digi MicroPython Programming Guide”はこちらを参照しましょう。
詳しい"S2/S2B"と"S2C"との変更点はここのPDFを参照下さい。
大まかには、
・USART以外のインターフェースとしてSPI通信が追加されています。
・XBee-PROと同等の通信距離だけどぉ消費電力が少なくなっている様です。
・S2/S2Bはコーディネータ/ルータ/エンドデバイスに切替えを行う際はそれぞれのファームウェアを
ダウンロードしていたが、S2C/XBee3ではコーディネータ/ルータ/エンドデバイスが一つのファーム
ウェアとして書き込まれているのでコンフィギュレーションの変更だけで切替えが可能な様です。
秋月電子のXBee用2.54mmピッチ変換基板を2個購入。
XBeeの端子は2mmピッチなので2.54mmピッチに変換する為の基板
です、半田付け必要。
この基板は電源が5Vです、3.3V電圧レギュレータを実装してい
てXBeeの電源となりますが、注意は信号レベル(DOUT/DINなど)は
変換されませんので自分で電圧レベルを調整する必要が有ります。
ブレッドボードに挿す為にも必要ですね。
尚、スイッチサイエンスのこちらのXBee 5Vインターフェースアダプタと
XBeeエクスプローラ5Vマイコン用は信号の電圧レベルも変換しているので少しお高いけど便利かもね。
単純に2.54mmピッチに変換するだけで良いならこちらも有ります。
秋月電子のXBee USBインターフェースボードキットを1個購入。
FTDI社製FT232RLを搭載してXBeeをUSBでパソコンに接続するボード
です、半田付け必要。
特徴としては、リセットとコミッショニングボタンスイッチが有り、
LEDはPWR(電源ON表示)・ASSC(ネットワーク参加状態表示)・RSSI
(受信信号強度状態表示)・RX(データ受信状態表示)・TX(データ送信
状態表示)が有ります。
また、外部電源を使用すると最大1Aの出力電流が出せる様ですね。
(XBee PROは外部電源を利用した方が良いかもね)
あ、そうそう、
USBケーブルはマイクロ-Bのタイプですよ、ミニタイプと間違わない様に。
このボード、PCからXBeeの設定も行うので最低1個は必要ですね。
他にはスイッチサイエンスのXBee USB アダプターも有ります、こちらは、リセットSW,RSSI,RX,TX,PWRのLED付きです。
あとぉ、USBポートではなくシリアルポートに接続するアダプターも有ります。*2)
尚、こちらの”USBシリアル変換モジュール”を持っている人はそれを利用しても良いでしょう。
《パソコンにソフトを準備する》
XBeeを利用するにあたり必要なソフトをパソコンにインストールしなければいけません。
XBeeに設定を行ったり、ファームウエアの書き換えにATコマンドの発行などを行う為のX-CTUツール。
USBでパソコンと接続する為のドライバーソフト。
X−CTUインストール
X-CTUのインストールについてはnanoblogさんのこちら(旧ver5.2.7.5)を参考に行なって下さい。
尚、DIGIのサイト(下図)で、最新の”XCTU v. 6.3.11, Windows x86/x64”をダウンロード使用とすると、
入力フォームの画面が表示されますが、その画面下に有る[SUBMIT]ボタン横の
"No thanks, register later"文字をクリックすればダウンロード出来ます。
又、SETUP画面がちょっとぉ異なりますが操作は大体同じです。 *2)
X-CTUのユーザーガイドはこちらをご覧ください。
FT232RLのドライバインストール
USBインターフェースボードはFTDI社製FT232RLを搭載しているのでFTR232RL用のドライバーソフトを
入れないとダメです、パソコンに既に入れている人はこの項目は読み飛ばしましょう。
FTDI社HPのここからダウンロードします。
左図の赤マーク場所をクリックします。
但し、Windows(x86)の場合です、
またバージョンは変わるでしょう。
ダウンロードしたら解凍します。
次にここを参考にインストールします。
但し、"Arduinoボード"での方法となっています、"USBシリアル変換モジュール"と読み替えて下さい。
又、フォルダー参照時のファイル場所も上記解凍した場所を指定します。
(ArduinoIDEをインストールしている人はダウンロードしなくてもOKです)
※ Windows 7 の人はこちらのやり方が簡単でぇ手っ取り早いかもね。
@ "XBee USBインターフェースボード"に
XBeeZBモジュールを挿します。
(モジュールの挿す方向に注意して下さい)
インターフェースボードのPWE-SELジャンパーピンを
USB側に取り付けます。
A ボードとPCをUSBケーブルで接続します。(PWR/ASSCのLEDが点灯しています)
B X-CTUツール(Version:6.3.4)を起動する。 *2)
XBeeと接続する為に上図の赤く囲ったアイコン(Add Radio Module)をクリックします。
C FT232RLドライバがインストールされていれば
左図の様に[USB Serial Port (COMx)]が
表示されているはずです。
これを選択します。 *2)
"COM5"は各々のPCで異なりますよ念の為。
その後は[Finish]ボタンをクリックします。
するとぉ、
下図の赤枠で囲った様なモジュールリストが
表示されます。
D そのモジュールリストをクリックします。 *2)
するとぉ、
右側にモジュールの設定情報が表示されます。
([Configuration Working Mode]の画面です)
赤枠で囲ったモジュールリストの右上に、
丸Xのボタンが有ります、これをクリックすると
モジュールリストを削除出来るので、
違うXBeeに繋ぎ替える時に、操作すれば良い
でしょう。
"Function Set"の項目が"ZIGBEE ROUTER AT"になっているのでこのXBeeはルータで動作します。
"S2C"モジュールの場合は、"ZIGBEE TH Reg"になっていてXBeeはルータで動作します。*3)
"XBee3"モジュールの場合は、"Digi XBee3 Zigbee 3.0 TH"になっていてXBeeはルータです。*4)
ちなみに、シリーズ1なら"XBEE 802.15.4"となっている。
設定を変更したらアイコンでXBeeに書込みを行います。
ちょっとだけATコマンド
上図の画面でXBeeの設定は出来ますが、ATコマンドをXBeeに送る事でも設定が出来ます。
ただ、ATコマンドでの設定はXBeeの電源OFFやリセットで元に戻ります、この場合は、設定後
「ATWR」コマンドを発行すれば書き込まれます。
@のタブをクリックして[Consoles Working Mode]にします。
下図が表示されるのでAをクリックし回線をオープンします。 *2)
(オープンしたらアイコンはクローズボタンになります)
青文字がキー入力操作で、赤文字がXBeeから返された内容です。
・ +++を入力します、OKが返されたらATコマンド入力モードになります。
(+++の後ろはEnterキーは入力しない、+++は素早く入力する)
(ATコマンド入力モードはキーを入力しないと自動的に 10秒程でモードがキャンセルされる)
・ [at]コマンドはモードになっているかの確認のみでOKが返されるだけです。
(OKが返らなければ 10秒の時間切れ再度 +++ する)
・ ATコマンドは4文字で構成され、無いコマンドを送ればエラーが返される。
("ATxx"でxxが2文字のコマンドです、ATコマンドの後はEnterキーを入力する)
・ [ATSL]コマンドは自分のアドレスの下位4バイトが返されます。
(ATSHなら自分のアドレスの上位4バイトですが"0013A200"とどのXBeeも同じようです)
・ [ATCN]コマンドはATコマンド入力モードを抜けます。
・ [ATCT]コマンドは、コマンドモード時間のタイムアウト時間を設定します。
デフォルトが10秒(0x64)で、2 - 0x28F(x 100 ms)範囲内で設定できます。
※ ATコマンドの詳細はこちらです。
USBシリアル変換モジュールで繋いでみる
秋月電子の”USBシリアル変換モジュール”での接続で行ってみます。
USBシリアル変換モジュールの話は「FT232RL使用によりUSBをシリアル変換してマイコンと繋ぎます」を参照下さい。
USBシリアル変換モジュールの
J1ジャンパーピンは必ず
1-2間をショートで設定します。
(左写真は2-3間ですけどね)
1-2間をショートする事により
USARTの信号電圧レベルが
3.3Vになります。
USBからの電源を使用です。
さあ、上の記述の様にX-CTUを起動してみましょう。
リセットスイッチとコミッショニングボタンスイッチや状態表示LED等はここでは配線していませんが、
実際に基板作成する場合は必要でしょう。
XBee(シリーズ2:S2/S2B/S2C)の端子配列一覧表
"XBee3"も"S2C"とピン構成は同じ様です。 *4)
端子番号 |
端子名称
(デフォルト動作値) |
端子の機能 |
1 |
VCC |
+電源 2.1-3.6VDC |
2 |
DOUT
DIO13
|
シリアル出力
デジタルI/O(OUTPUT/INPUT)”S2Cは設定可” |
3 |
DIN
DIO14
|
シリアル入力
デジタルI/O(OUTPUT/INPUT)”S2Cは設定可”
|
4 |
DIO12(無効)
SPI_MISO
|
デジタルI/O(OUTPUT/INPUT)
マスターIN/スレーブOUT(SPIデータ送信)
|
5 |
RESET |
オープンコレクタでプルアップ |
6 |
DIO10(RSSI)
PWM0
|
RSSIは受信信号強度状態出力
デジタルI/O(OUTPUT/INPUT)
アナログ出力:PWM0のデュティ比は"M0"で設定
|
7 |
DIO11(無効)
PWM1
SDA |
デジタルI/O(OUTPUT/INPUT)
アナログ出力:32.787kHzで50%デューティ比で固定
XBee3はPWM1のデュティ比は"M1"で設定
SDA(I2C)はXBee3のみでMicroPython利用のソフトで使用可能 |
8 |
reserved |
予約済み端子 |
9 |
SLEEP_RQ
DIO8/DTR
(入力) |
スリープ用制御端子(エンドデバイスの時)
スリープ利用しない時はDIO8・DTR
(DIO8は利用出来ないようであるがぁ....)
デジタルI/O(OUTPUT/INPUT)”S2C
は設定可”
|
10 |
GND |
接地(−電源) |
11 |
DIO4(無効)
SPI_MOSI
|
デジタルI/O(OUTPUT/INPUT)
マスターOUT/スレーブIN(SPIデータ受信)
|
12 |
DIO7(CTS) |
CTSはシリアル通信のフロー制御端子
デジタルI/O(OUTPUT/INPUT)
RS-485 有効 Low/Hight
|
13 |
ON/SLEEP
DIO9
(出力) |
スリープ状態の表示出力(エンドデバイスの時)
利用しない場合はDIO9(DIO9は利用出来ないようだがぁ..)
(エンドデバイス以外は出力しっぱなし)
デジタルI/O(OUTPUT/INPUT)”S2C
は設定可”
|
14 |
VREF |
未使用(通常はGNDに接続) |
15 |
DIO5(ASSC) |
ASSCはネットワーク参加状態出力
デジタルI/O(OUTPUT/INPUT) |
16 |
DIO6(無効)
RTS |
デジタルI/O(OUTPUT/INPUT)
RTSはシリアル通信のフロー制御端子 |
17 |
DIO3(無効)
AD3
SPI_SSEL
|
デジタルI/O(OUTPUT/INPUT)
アナログ入力
SPIスレーブ選択信号入力
|
18 |
DIO2(無効)
AD2
SPI_SCLK
|
デジタルI/O(OUTPUT/INPUT)
アナログ入力
SPIクロック信号入力(MAX 5Mbps)
|
19 |
DIO1(無効)
AD1
SPI_ATTN
SCL
|
デジタルI/O(OUTPUT/INPUT)
アナログ入力
SPI_ATTNはXBeeに送信するデータがある場合にHIGHにされる
SCL(I2C)はXBee3のみでMicroPython利用のソフトで使用可能 |
20 |
DIO0(Comm)
AD0 |
Commissioning
Button(ネットワーク参加スイッチ)
デジタルI/O(OUTPUT/INPUT)
アナログ入力 |
※紫色の機能は、"S2C"モジュールで追加された機能です。*3)
※橙色の機能は、"XBee3"モジュールで追加された機能で、紫色も含まれます。 *4)
※シリーズ1XBeeの場合は端子の機能割付けが少し異なります。
X-CTUのConfiguration説明 *2)
[Configuration Working Mode]タブ画面の簡単な操作説明です。
[Read]:XBeeの設定情報を全部読み込みます。
[Write]:XBeeの設定情報を全部書き込みます。
[Default]:デフォルトのファームウェア値をロードしますが、書き込みはしません。
[Update]:XBeeに書込めるファームウェア(Function Set)の表示と更新を行います。
[Profile]: 設定情報をファイルに読み書きします。
青三角印は、デフォルト設定と異なる設定値ですよマークらしい。
《LEDを点灯させて見よう》
XBeeにLEDを配線してパソコンのX-CTUからATコマンドを発行しLEDを点灯させて見たいと思います。
デジタル出力
左図はXBeeのシリーズ1ですがシリーズ2も
同じです。
LEDの足が長い方をXBee側のDI01(19)端子
に配線します。
また、制限抵抗を付けていませんが、
気になる人は付けて下さい、
端子からは2.7V(VCC-0.5V)程出力されます。
X-CTUを起動し、[Consoles Working Mode]タブの
"Consoles log" 画面から左の様にコマンドを入力して
みましょう、LEDが点灯します。
(左図は旧Versionの画面です) *2)
でもぉ、コマンドを発行してから5秒ぐらいしてLEDが
反応するのですが....
なぁ〜ぜぇ、何か設定が有るのかなぁ?
判明:設定が有りました。 *1)
[ATD1x]コマンドの後で[ATAC]コマンドを出せば直ぐに反応します。(又は[atd1x,ac]です)
DIO1/DIO2/DIO3/DIO4/DI011/DIO12は他に機能を割り当てられていないので利用可能でしょう。
DIO0/DI05/DIO6/DIO7/DIO10も割当てられている機能を使用しないならデジタル端子で利用出来ます
"S2C/XBee3"モジュールで、DIO8/DIO9/DIO13/DIO14が利用可能になりました。*3)
アナログ(PWM)出力
XBeeのシリーズ2はPWM出力が出来ないので
この実験はシリーズ1のみです。
"S2C/XBee3"モジュールでも利用可能になりました。*3)
LEDの足が長い方をXbee側のPWM1(7)端子
に配線します。
実はこの実験の為だけにはシリーズ1を1個
買ってしまったが1個では使い道なさそう。(T T)
※ "S2C"のアナログ出力は32.787kHzで50%デューティ比で固定。
"XBee3"のアナログ出力は15.625kHzでデューティ比は"M0/M1"コマンドで設定を行う。 *4)
PWMの出力コマンドデータは[ATM1xxx]です。
xxxの数値は16進数入力で0〜3FF
出力を測定してみた、
出力0%(atm10)時の電圧は0.7mV
出力100%(atm13ff)時の電圧は2.009V
ってことは0(0)〜3FF(1023)だから
0.7mV〜2.009Vを1023ステップで出力可能ですね。
PWM1の他にPWM0(6)も利用可能ですがRSSIで使用されていますね。
このコマンドは発行するとすぐにLEDが反応します
《スイッチを接続して見よう》
XBeeのデジタルI/Oにタクトスイッチを繋ぎON/OFF状態を調べて見ます。
デジタル入力
左写真はシリーズ1ですが以下の記事は
シリーズ2での内容です。
ここではDIO1端子(19)で実験しています、
I/O端子はXBeeの内部でプルアップ
されています、なのでタクトスイッチはGND
に配線します。
ちなみに[ATPR]コマンドを利用すれば
内部プルアップは禁止に出来ます。
(シリーズ1にはこのコマンドは有りません)
プルアップ抵抗の話は下記を参照下さい。
@ 上図の様に配線したらパソコンとUSBケーブルで接続します。
A X-CTUを起動し、[Configuration Working Mode]タブの画面で設定を行います。 *2)
B 次に"I/O Settings"のセクションに有る、"D1-AD1/DIO1 Configuration"の項目をクリックし、
"3-DIGITAL INPUT"を選択します。
(全てのデジタルI/Oの初期値設定は"無効"の使用しないになっています)
C 項目右横の[Write]丸ボタンをクリックして設定をXBeeに書き込んで下さい。 *2)
D [Consoles Working Mode]タブの
"Consoles log" 画面から、[ATIS]コマンドを
発行すれば左の様にデジタル
I/Oの情報が返されます。
(左図は旧Versionの画面です) *2)
マスクパターンデータは2バイトの16進で
返されます、下記の対応表を見て下さい。
今回はDIO1のD1を入力に設定したので1が立っています。
でぇ、入力情報データ内容は、スイッチは内部プルアップに接続されているので、
押していない時が1です、押せばGNDに繋がるので0ですね。
デジタルI/Oのマスクパターン表(S2/S2Bモジュール)
端子 |
|
|
|
P2 |
P1 |
P0 |
未 |
未 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
ビット名 |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
2進数 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
16進数 |
0 |
0 |
0 |
2 |
デジタルI/Oのマスクパターン表(S2C/XBeeモジュール) *3)
端子 |
|
P4
|
P3
|
P2 |
P1 |
P0 |
D9
|
D8
|
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
プルアップ抵抗について *3)
デジタルの入力に端子を割り当てた場合に、XBee内部にてプルアップ(30KΩ)を行う事が可能です、
コンフィギュレーションの設定と[ATPR]コマンドで出来ます。
又、"S2C/XBee3"モジュールの場合はプルダウンの設定も可能です。
[I/O Settings]の項目に有る、"PR"の設定で行います。
値はS2/S2Bが0x0-0x3FFFで、S2C/XBee3が0x0-0x7FFFとなります、
1 = 内部プルアップあり、0 = 内部プルアップなし。
デジタル端子とビットの割り当ては下記表を参照下さい。
尚、[ATPR]コマンドのデータ(atpr1FBF)も同じです。
"PD"の設定(0x0-0x7FFF)は、1 =プルアップ、0 =プルダウンです。
この設定はS2/S2Bモジュールには有りません。
デジタルI/Oのデータビット割り当て表
ビット
|
15
|
14
|
13
|
12
|
11
|
10
|
9
|
8
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
データデフォルト値
|
S2/S2B
|
|
|
D7
|
D11
|
D10
|
D12 |
|
D5
|
|
|
D6 |
D0 |
D1 |
D2 |
D3 |
D4 |
0x1FFF
|
S2C/XBee3
|
|
D13
|
D7
|
D11
|
D10
|
D12
|
D9
|
D5
|
D14
|
D8
|
D6
|
D0
|
D1
|
D2
|
D3
|
D4
|
0x1FBF
|
《ADCで電圧を測定して見る》
アナログ入力
左写真はシリーズ1ですが以下の記事は
シリーズ2での内容です。
ここではAD1/DIO1端子をADCに割付けて
実験しています、
インターフェースボードのPWE-SELジャン
パーピンをEXT側に取付けて外部から電源
5Vを供給して下さい。
XBeeのアナログ入力は0〜1.2Vまでを
0〜1023(3FF)に変換して読み込まれます。
1.2Vを超えない様に注意。
今回は手持ちの抵抗から4.7KΩと1KΩを分圧して入力しました、計測したら879mVでした。
AD1/DIO1端子の設定を"2-ADC"に設定し、項目右横の[Write]丸ボタンで書き込んで下さい。 *2)
[ATIS]コマンドを発行すれば左の様に表示されます。
デジタルI/Oのマスクパターンは、デジタルI/Oは
利用しないとなっているので設定なしで"0000"と
なっています。
ADCのマスクパターンデータは1バイトの16進で
返されます、下記の対応表を見て下さい。
今回はAD1/DIO1のD1をADCに設定したので1が立っています。
ADCのマスクパターン表
ビット7は電源電圧の監視に使用される様
だが....(未実験)
読込まれたADCのデータは2バイトで返される
0〜1.2Vが0〜1023(3FF)になるので
今回は"02E5"(741)ですね。
(741 * 1200mV) / 1023 で 869mVとなる上記測定値が879mVなのでだいたいOK。
デジタル入力とアナログ入力
ではデジタル入力とアナログ入力が混在した場合は、
[ATIS]コマンドからはどんな感じに返され表示
されるのでしょう。 (左旧画面です)
上図の様にAD1/DIO1端子をデジタル入力に設定してAD2/DIO2端子をADC入力に設定した場合ですね。
と、この様になります。
もし、AD3もADCに割り付けた場合は、
ADCのマスクパターンは"0C"
となり"02E6"の下にデータが表示されます。
《その他》
”ADCで電圧を測定して見る”の実験風景です。
[ATIS]コマンドで返される内容はシリーズ1の場合は少し異なります、データシートを見ましょう。
シリーズ1のデータシートはこちらから、シリーズ2のデータシートはこちらからダウンロードしましょ。
"S2C"モジュールのデータシートはこちらからダウンロードしましょ。*3)
"XBee3"モジュールのデータシートはこちらからダウンロードしましょ。 *4)
XBeeは、結構機能が盛り沢山ですねぇ、この機能を理解するにはかなりの能力と時間を消費しそう
です、なのでぇ、基礎的な所のみ実験をして行きたいと思います、其れゆえ記事も何回かに分けて書こ
うと思います。
次回パート2では、親と子の1対1の通信(透過モード)実験を行います。
"XBee3"モジュールでの見直し(*4) 2019/07/05
"S2C"モジュールでの見直し(*3) 2018/02/05
X-CTU(ver6.3.4)での見直し(*2) 2017/01/20
追記(*1) 2013/04/29
【きむ茶工房ガレージハウス】
Copyright (C) 2006-2020 Shigehiro Kimura All Rights Reserved.