〔マイコンのトップに戻る〕
〔パート1〕
〔パート2〕
〔パート3〕
〔パート5〕
〔パート6〕
〔XBee3〕

APIモードイメージ図
次回以降にXBeeとマイコンやパソコンで接続する為にはこのAPIフレームデータがどんな構造に
なっているのか、また、どんな種類のタイプが有るのかを調べないとダメです。
なので今回のこのページではAPIフレームデータの中でも私が使用するであろう基本のフレームタイプ
のみ記述します。
その他のAPIフレームデータについては、こちらのユーザーガイド(S2/S2B)を参照下さい。 *2)
"S2C"モジュールのユーザーガイドはこちらです。 *3)
"XBee"モジュールのユーザーガイドはこちらです。 *4)
APIフレームデータ(APIパケット)の構造
下図がAPIフレームデータ(APIパケット)の構造で、先頭が0x7Eで始まりチェックサムで終了します。

チェックサムの計算
チェックサムは上図のフレームデータ赤枠内のみ計算対象とします。
例) 0x7E 0x00 0x05 0x08 0x01 0x4E 0x4A 0xFF 5F
[ 0xFF - ((0x08 + 0x01 + 0x4E + 0x4A + 0xFF) & 0xFF) ] は 5F とこの様に計算します。
”0x7E”
"0x7E"が先頭以外に現れる場合が有ります、そんな時はAPIパケットの先頭を誤認識してしまう可能性
が有ります。

XBeeの設定項目で"AP-API Enable"を"2(API enabled escaping)"とした場合、
先頭以外に現れた"0x7E"を"0x7D 0x5E"に置換えて送信を
行います、これをエスケープモードと言います。
(だからぁ、"0x7D"を挿入してぇ、"0x7E xor 0x20 ⇒ 0x5E"です)
他に "0x11"も"0x7D 0x31"に変換
"0x13"も"0x7D 0x33"に変換
"0x7D"も"0x7D 0x5D"に変換
但し、チェックサムは変換前のコードで計算します。 *2)
"XBee3は、[UART Interfacing]の項目です。

X-CTUのツールアイコン(左図の赤枠)を

-------------------------------------(S2/S2B)---------------------------------------
B XBeeを"ZIGBEE ROUTER API"に変更します。(APIモードです) *2)

まず、"Function Set"の項目で"ZIGBEE ROUTER API"を選択します。
次に、"Firmware version"の項目で書き込むバージョンを選択します、
一番上が新しいのでそれを選びましょう。
後は、[Update]ボタンをクリックしてのファームウェアを書き込みます。
(S2/S2BはここまでDへ進む)
-----------------------------------------------------------------------------------
-----------------------------(S2C/XBee3はここから)------------------------------- *3)

[Sleep Modes]の項目に有る、"SM"の設定が"No Sleep(Router)[0]"に
なっている事を確認します。

[Serial Interfacing]の項目に有る、"AP"の設定を"API enabled[1]"に設定を行い、
項目右横の[Write]丸ボタンをクリックして設定をXBeeに書き込んで下さい。
"XBee3は、[UART Interfacing]の項目で、"API Mode Without Escapes[1]"の設定名です。
(因みに、[1-2]以外の設定になっていれば"AT"モードとなります)

[Networking]の項目に有る、"CE"の設定が"Disabled[0]"に
なっている事を確認します。(”ルータ”モードです)
"XBee3は、"Join Network[0]"の設定名です。
-----------------------------------------------------------------------------------

今回はAP-API Enable"を"1"で実験します、エスケープモード
だとちょっとぉメンドクサイのでぇ。
"XBee3は、[UART Interfacing]の項目です。
図の@のタブをクリックして[Network Working Mode]にします。
下図が表示されるので図のAをクリックし通信網をスキャーンします。
(スキャーン開始したらアイコンはストップボタンになります)

この様に親機にぶら下がっている子機が表示されます。
Configurationを行いたい子機(B)をダブルクリックします。
図の@のタブをクリックして[Consoles Working Mode]にします。
下図が表示されるので図のAをクリックし回線をオープンします。
(オープンしたらアイコンはクローズボタンになります)

上図のBの[Add new frame to the list]ボタンをクリックします。


APIフレームデータの作成を行ったら、[OK]ボタンをクリックします。
フレームタイプは"08"のATコマンド("SL":自アドレスのLOWbyteを得る)発行での例です、
なので親へのパケット送信ですが、子機へのフレームデータなら親機から子機に送信されます。

[Add frame]ボタンをクリックします。

"frame_0"を選択し、[Send selected frame]ボタンをクリックします。
「Frames log」に送受信結果が表示されます。

赤文字データが子機から返された内容です。
| オフセット | データ | 説明 |
| 0 | 7E | 開始コード |
| 1 | 000F | フレームデータの長さ (15byte) |
| 3 | 17 | フ レームタイプ |
| 4 | 01 | フ
レームID (返信用のデータみたいだが、とりあえず01) |
| 5 | 0013A200409821A5 | 送 信先の64ビットアドレスを設定 |
| 13 | FFFE | 送
信先の16ビットアドレスを設定 (アドレスが不明な場合はFFFEとしておく) (設定するとデータは早く届くらしい) |
| 15 | 00 | リ
モートコマンドの送信オプション (利用しない場合は00) |
| 16 | 4953 | AT コマンド ("I" "S") (ATの文字はいらない) |
| 18 | FB | チェックサム |
| オフセット | データ | 説明 |
| 0 | 7E | 開始コード |
| 1 | 0017 | フレームデータの長さ (23byte) |
| 3 | 97 | フ レームタイプ |
| 4 | 01 | フ レームID |
| 5 | 0013A200409821A5 | 送 信元の64ビットアドレスを設定 |
| 13 | 980F | 送 信元の16ビットアドレスを設定 |
| 15 | 4953 | AT コマンド ("I" "S") |
| 17 | 00 | コ
マンドの実行結果 00=正常 01=エラー 02=無効なコマンドです 03=無効なパラメータです 04=リモートコマンド送信に失敗しました |
| 18 | 0100020400020207 | コマン
ドデータ 01 0002 デジタルI/Oのマスクパターン 04 ADCのマスクパターン 0002 デジタルI/Oの入力情報データ 0207 AD2から読み込まれた電圧値データ (詳しくは前頁のパート3・パート1を参照下さい) |
| 26 | BF | チェックサム |

| オフセット | データ | 説明 |
| 0 | 7E | 開始コード |
| 1 | 0010 | フレームデータの長さ (16byte) |
| 3 | 17 | フ レームタイプ |
| 4 | 01 | フ
レームID (返信用のデータみたいだが、とりあえず01) |
| 5 | 0013A200409821A5 | 送 信先の64ビットアドレスを設定 |
| 13 | FFFE | 送
信先の16ビットアドレスを設定 (アドレスが不明な場合はFFFEとしておく) |
| 15 | 02 | リ
モートコマンドの送信オプション (02=コマンドの指示をすぐに有効にする) ここで有効にしない場合は、ATACコマンドで有効にします。 |
| 16 | 4431 | AT コマンド ("D" "1") |
| 18 | 05 | AT
コマンド(ATD1)のパラメータ (05=I/O出力をHIGH 04=I/O出力をLOW) |
| 19 | 1B | チェックサム |
| オフセット | データ | 説明 |
| 0 | 7E | 開始コード |
| 1 | 000F | フレームデータの長さ (15byte) |
| 3 | 97 | フ レームタイプ |
| 4 | 01 | フ レームID |
| 5 | 0013A200409821A5 | 送 信元の64ビットアドレスを設定 |
| 13 | 980F | 送 信元の16ビットアドレスを設定 |
| 15 | 4431 | AT コマンド ("D" "1") |
| 17 | 00 | コ
マンドの実行結果 (00が正常 その他の数値はエラー上記参照) |
| 18 | BF | チェックサム |

APIパケットのフレームタイプ"08"で[ATSL]のコマンドを発行すると、
XBeeからはフレームタイプ "88" のAPIパケットで応答します。
(ATSLコマンドは自分のアドレスの下位4バイトが返されます)
| オフセット | データ | 説明 |
| 0 | 7E | 開始コード |
| 1 | 0004 | フレームデータの長さ (15byte) |
| 3 | 08 | フ レームタイプ |
| 4 | 01 | フ
レームID (返信用のデータみたいだが、とりあえず01) |
| 5 | 534C | AT コマンド ("S" "L") (ATの文字はいらない) |
| 7 | 57 | チェックサム |
| オフセット | データ | 説明 |
| 0 | 7E | 開始コード |
| 1 | 0009 | フレームデータの長さ (15byte) |
| 3 | 88 | フ レームタイプ |
| 4 | 01 | フ レームID |
| 5 | 534C | AT コマンド ("S" "L") |
| 7 | 00 | コマンドの実行結果 00=正常 01=エラー 02=無効なコマンドです 03=無効なパラメータです 04=Tx送信に失敗しました |
| 8 | 409C90AB | コマンドのデータ (アドレスの下位4バイトが返されました) |
| 12 | C0 | チェックサム |


(親機側 X-CTU1 の画面)
フレームタイプ"10"のAPIパケットが送信され、
その送信結果をフレームタイプ"8B"のAPIパケットで返されます。

(子機側 X-CTU2 の画面)
送られてきたデータはフレームタイプ"90"のAPIパケットで受信します。
| オフセット | データ | 説明 |
| 0 | 7E | 開始コード |
| 1 | 0012 | フレームデータの長さ (18byte) |
| 3 | 10 | フ レームタイプ |
| 4 | 01 | フ
レームID (00にするとAPIパケット"8B"が送信されない) |
| 5 | 0013A200409821A5 | 送 信先の64ビットアドレスを設定 |
| 13 | FFFE | 送
信先の16ビットアドレスを設定 (アドレスが不明な場合はFFFEとしておく) |
| 15 | 00 | ブ ロードキャスト送信の最大ホップ数を設定?? |
| 16 | 00 | 送 信オプション |
| 17 | 54455354 | 送信す るデータ("TEST") |
| 21 | 5E | チェックサム |
| オフセット | データ | 説明 |
| 0 | 7E | 開始コード |
| 1 | 0010 | フレームデータの長さ (16byte) |
| 3 | 90 | フ レームタイプ |
| 4 | 0013A200409C90AB | 送 信元の64ビットアドレスを設定 |
| 12 | 0000 | 送 信元の16ビットアドレスを設定 |
| 14 | 01 | 受
信したパケットの情報 01=内容を認めたパケット(通常) 02=ブロードキャストされたパケット 20=暗号化されたパケット 40=エンドデバイスから送信さ れたパケット |
| 15 | 54455354 | 受信し たデータ("TEST") |
| 19 | 62 | チェックサム |
| オフセット | データ | 説明 |
| 0 | 7E | 開始コード |
| 1 | 0007 | フレームデータの長さ (7byte) |
| 3 | 8B | フ レームタイプ |
| 4 | 01 | フ レームID |
| 5 | 980F | 送
信元の16ビットアドレスを設定 (レスポンスACKを返したXbeeの16ビットアドレス) |
| 7 | 00 | 送
信を何回リトライしたかの個数 |
| 8 | 00 | 送信の状況 00=正常 01=MAC ACK 失敗 02=CCA 失敗 15=指定した送信先アドレスが不正 21=ネットワークでACKが失敗 22=ネットワークに参加していない 23=自分宛のアドレスを指定した 24=指定のアドレスが見当たらない 25=ルートが見つからない 26=ブロードキャスト失敗 2B=無効なバインディングテーブルインデックス 2C=空きバッファのリソースエラー欠如、タイマなど 2D=APS通信をブロードキャストで試してみた 2E=APS通信をユニキャストで試してみたが、EE=0 32=空きバッファのリソースエラー欠如、タイマなど 74=データ・ペイロードが長すぎる 75=要求されていない間接メッセージ |
| 9 | 00 | ディスカバリーの状況?? 00=ディスカバリーのオーバヘッドはなかった 01=アドレスディスカバリー 02=ルートディスカバリー 03=アドレスとルートディスカバリー 40=拡張タイムアウトディスカバリー |
| 10 | CC | チェックサム |

(子機側 X-CTU2 の画面)
フレームタイプ"10"のAPIパケット内のフレームIDを"00"にして
いるのでフレームタイプ"8B"のAPIパケットは返されていません。
又、送信先アドレスを"0000000000000000"にしています、コーディネータに送る場合はこれでもOK

(親機側 X-CTU1 の画面)
フレームタイプ"90"のAPIパケットで受信されています。

親機のリセットボタンを押して見た、ステータス"00"と"06"の2個が送られて来ています。
| オフセット | データ | 説明 |
| 0 | 7E | 開始コード |
| 1 | 0002 | フレームデータの長さ (2byte) |
| 3 | 8A | フ レームタイプ |
| 4 | 00 | ステータス 00:ハードウエアがリセットされた 01:ウオッチドッグタイマーにてリセットされた 02:ネットワークに接続した(ルータ・エンドデバイスのみ) 03:ネットワークから切り離された 06:コーディネータが動作を開始した 07:ネットワークセキュリティキーを更新した 0D:供給する電源電圧が超えた(PRO S2B のみ) 11:ネット接続中にモデム構成が変更された 80+:スタックエラー |
| 5 | 75 | チェックサム |
"XBee3"モジュールでの見直し(*4) 2019/07/06
"S2C"モジュールでの見直し(*3) 2018/02/05
X-CTU(ver6.3.4)での見直し(*2) 2017/01/20
追記(*1) 2013/05/18
【きむ茶工房ガレージハウス】
Copyright (C) 2006-2019 Shigehiro Kimura All Rights Reserved.