(13)トラ技mbedでXBee(XBeeライブラリ)

(13)XBee(XBee library)

概要

  • XBee用の制御ライブラリです。
  • 2つの付録基板を活用します。
  • トランジスタ技術2014年2月号の付録基板(実験基板)
  • トランジスタ技術2014年3月号の付録基板(トラ技mbed)
  • 実験基板は表示機として使用します。LPC810は外しておきます。

/media/uploads/yasuyuki/xbee-mbed.png

仕様(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はありません。

/media/uploads/yasuyuki/xbee-text.png

ローカル・コマンドのハンドシェイク

  • フレームの送受信方法です。
  • ACKはコマンド受付確認です。コマンド応答データを含みます。
  • NACKを指定することもできます。この場合、ACKはありません。

/media/uploads/yasuyuki/xbee-local.png

リモート・コマンドのハンドシェイク

  • フレームの送受信方法です。
  • ACKはコマンド受付確認です。コマンド応答データを含みます。
  • NACKを指定することもできます。この場合、ACKはありません。

/media/uploads/yasuyuki/xbee-remote.png

自動サンプリングのハンドシェイク

  • フレームの送受信方法です。
  • 自動サンプリングによるデータの送受信方法です。
  • ACKはデジタル入力とアナログ入力のデータを含みます。
  • Digital IO Change Detectionパラメータを設定するとデジタル入力変化があったとき送信します。
  • IO Sampling Rateパラメータを設定すると定期的にデジタル入力、アナログ入力を送信します。

/media/uploads/yasuyuki/xbee-data.png

XBee関数

関数名用途引数戻り値
XBee xbee(P0_19, P0_18, P0_21)インスタンス生成tx, rx, sleep_rq-
xbee.baud(9600)通信速度設定baudvoid
xbee.send_text(TARGET0, "ABC", ACK)テキスト送信uint64_t address, char *text, ACK or NACKint
xbee.local_command("DD00030000", NACK)ローカル・コマンド送信char *at_command, ACK or NACKint
xbee.remote_command(TARGET0, "P15", ACK)リモート・コマンド送信uint64_t address, char *at_command, ACK or NACKint
xbee.check()受信バッファー確認void0=なし、1=あり
xbee.clear()受信フレームのクリアvoidvoid
  • 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からどの構造体を利用すればよいか判断します。
  • 受信バッファーに複数のフレームが格納されることがあります。
  • 次のフレームを解析するときは、フレームを移動する関数を利用します。
  • 先頭のフレームのみ構造解析します。

/media/uploads/yasuyuki/xbee-buffer.png

mbedソフトウェア

  • サンプルプログラムはmbed_XBeeです。
  • コーディネータ(親機)用、エンドデバイス(子機)用としてコンパイルします。
  • mbed_Xbee_LPC11U35_501.binを書き込みます。

トラ技mbedのプログラム書き込み方法

  1. ISPボタンを押しながらRESETをON/OFFします。
  2. PCにUSBストレージとして認識されます。
  3. firmware.binを削除します。
  4. バイナリファイルをコピーします。
  5. 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.