(13)トラ技mbedでXBee(XBeeライブラリ)
.
(13)XBee(XBee library)
概要
- XBee用の制御ライブラリです。
- 2つの付録基板を活用します。
- トランジスタ技術2014年2月号の付録基板(実験基板)
- トランジスタ技術2014年3月号の付録基板(トラ技mbed)
- 実験基板は表示機として使用します。LPC810は外しておきます。
仕様(spec.)
- XBee Series2のAPIモード用の制御ライブラリです。
- わかりやすく使いやすいライブラリを目指しました。
- コーディネータのファームウェアはCoodinator APIです。
- エンドデバイスのファームウェアはEnd Device APIです。スリープ・モードでPINスリープを有効にしておきます。
- デフォルトの通信速度は9600です。(変更可能)
- 通信条件は8,n,1です。
- 仕様は予告なく変更されることがあります。
事前準備
- コーディネータにはCoodinator APIファームウェアを書き込んでおきます。
- エンドデバイスにはEnd Device APIファームウェアを書き込んでおきます。
- エンドデバイスのみPINスリープをパラメータで有効にしておきます。
- PINスリープモードの場合、SLEEP_RQ=H指定でスリープ、SLEEP_RQ=L指定で起床を制御できます。
- エンドデバイスのスリープモードは1:PINスリープあるいは5:サイクリック・スリープ+PINスリープに設定します。
- XCTUでファームウェアを書き換えます。
- 「超お手軽無線モジュールXBee」が参考になります。
- http://toragi.cqpub.co.jp/tabid/534/Default.aspx
動作原理(method)
- XBeeをシリアル通信(UART)経由で制御します。
- リモート側をコントロールする必要があるため、ATモードは使用できません。
- APIモードのフレーム送受信を行います。
- フレームの解析を容易にするため、共用体を利用します。
- FrameTypeからどの構造体を利用すればよいか判断します。
- 受信は割り込みを利用し、取りこぼしを防止します。
- 9600bpsとは1バイトを送受信するために約1ms必要です。待ち時間の目安にしてください。
- XBeeはフレームをデフォルトで最大83バイトのパケットに分割します。そのためフレームを83バイト以下にすることが望まれます。
- 送受信バッファーサイズはそれぞれ256バイトです。超えないようにしてください。
- 受信バッファーには複数のフレームが格納されることがあります。
- 次のフレーム解析するためにフレームを移動する関数を利用します。
テキスト送受信のハンドシェイク
- フレームの送受信方法です。
- 動作確認のためのループバック設定時の動作です。
- ACKは受信確認です。
- NACKを指定することもできます。この場合、ACKはありません。
ローカル・コマンドのハンドシェイク
- フレームの送受信方法です。
- ACKはコマンド受付確認です。コマンド応答データを含みます。
- NACKを指定することもできます。この場合、ACKはありません。
リモート・コマンドのハンドシェイク
- フレームの送受信方法です。
- ACKはコマンド受付確認です。コマンド応答データを含みます。
- NACKを指定することもできます。この場合、ACKはありません。
自動サンプリングのハンドシェイク
- フレームの送受信方法です。
- 自動サンプリングによるデータの送受信方法です。
- ACKはデジタル入力とアナログ入力のデータを含みます。
- Digital IO Change Detectionパラメータを設定するとデジタル入力変化があったとき送信します。
- IO Sampling Rateパラメータを設定すると定期的にデジタル入力、アナログ入力を送信します。
XBee関数
関数名 | 用途 | 引数 | 戻り値 |
XBee xbee(P0_19, P0_18, P0_21) | インスタンス生成 | tx, rx, sleep_rq | - |
xbee.baud(9600) | 通信速度設定 | baud | void |
xbee.send_text(TARGET0, "ABC", ACK) | テキスト送信 | uint64_t address, char *text, ACK or NACK | int |
xbee.local_command("DD00030000", NACK) | ローカル・コマンド送信 | char *at_command, ACK or NACK | int |
xbee.remote_command(TARGET0, "P15", ACK) | リモート・コマンド送信 | uint64_t address, char *at_command, ACK or NACK | int |
xbee.check() | 受信バッファー確認 | void | 0=なし、1=あり |
xbee.clear() | 受信フレームのクリア | void | void |
- TARGET0はアドレス、例0x0013A20000000000ULL
- ATコマンドのパラメータ部は文字数によってバイト数が決まります。"5","05"なら1バイトです。最大4バイトまで可能です。
- ATコマンドによってパラメータ部のバイト数は異なります。パラメータ部は16進数です。不正な数値の場合0とみなされます。
- ATコマンド部は大文字、小文字を問いません。
- 不正なATコマンドは動作を予測できません。正しいATコマンドを指定ください。
XBeeのATコマンド形式
- 2文字のコマンド+[パラメータ]
- パラメータを省略した場合、取得
- パラメータを指定した場合、設定
- 例、ATコマンド="P1"+パラメータ="5"
- 意味、DIO11ピンを5:デジタル出力Hに設定します。
- 例、ATコマンド="DD"+パラメータ="00030000"
- 意味、デバイス識別子を0x30000に設定します。
- 例、ATコマンド="IS"
- 意味、デジタル入力とアナログ入力を取得します。
受信データ
status構造体 | テキストACK用フレーム、FrameType=0x8B |
text構造体 | テキスト受信用フレーム、FrameType=0x90 |
local構造体 | ローカルコマンドACK用フレーム、FrameType=0x88 |
remote構造体 | リモートコマンドACK用フレーム、FrameType=0x97 |
data構造体 | データ受信用フレーム、FrameType=0x92 |
- 受信データは割り込みで自動バッファーされます。
- 受信データを共用体として解析します。
- フレーム内のFrameTypeからどの構造体を利用すればよいか判断します。
- 受信バッファーに複数のフレームが格納されることがあります。
- 次のフレームを解析するときは、フレームを移動する関数を利用します。
- 先頭のフレームのみ構造解析します。
mbedソフトウェア
- サンプルプログラムはmbed_XBeeです。
- コーディネータ(親機)用、エンドデバイス(子機)用としてコンパイルします。
- mbed_Xbee_LPC11U35_501.binを書き込みます。
トラ技mbedのプログラム書き込み方法
- ISPボタンを押しながらRESETをON/OFFします。
- PCにUSBストレージとして認識されます。
- firmware.binを削除します。
- バイナリファイルをコピーします。
- RESETを押します。
接続
- XBeeのVccをmbedの3.3Vに接続します。
- XBeeのGNDをmbedのGNDに接続します。
- XBeeのTXをmbedのRXDに接続します。
- XBeeのRXをmbedのTXDに接続します。
- エンドデバイスのみXBeeのSLEEP_RQをmbedのP0_21に接続します。
著作権と免責事項
- 個人利用に限定され、著作権者の許可なく商用利用できません。
- 直接間接に関わらず、使用によって生じたいかなる損害も筆者は責任を負いません。
Please log in to post comments.