シリアル通信アプリ 書式モード(アスキー)の 0xDB コマンド
書式モード(アスキー)におけるインタラクティブモードを使用しない設定機能
送信側の端末へ特定の書式に従ったデータを入力すると、受信側の端末も特定の書式に従ったデータを出力します。
データは16進数のアスキー文字列で表現します。
送信側の入力 | 受信側の出力 | |
---|---|---|
簡易形式/拡張形式のデータ | → | 簡易形式/拡張形式のデータ |
SET
ピンを GND
へ接続して起動すると書式モード(アスキー)が有効となります。EX1
ピンを GND
へ接続して起動すると書式モード(バイナリ)が有効となります。扱うことのできる書式の形式は2種類あります。
例えば、5バイトのバイナリデータ 0x48 0x45 0x4C 0x4C 0x4F
は、簡易形式を使って次のように送信できます。
【送信側】
:000148454C4C4F8B <- 入力
:DBA1800103 <- 出力
【受信側】
:780148454C4C4F13 <- 出力
基本形式や拡張形式で表現したデータ列を送信するときは、アスキー文字列(0-9,A-F)へ変換します。
書式は超簡単!標準アプリ(App_Twelite)や親機・中継機アプリ(App_Wings)の親機の出力と同様に、:
で始まりCRLFで終わります。
ヘッダ | ペイロード | チェックサム | フッタ |
---|---|---|---|
: | 00 -FF の繰り返し | ペイロードのLRC8 | CRLF |
:
(0x3A
)\r\n
/0x0D 0x0A
)例えば、バイナリデータ 0x00 0x11 0x22 0x33 0xAA 0xBB 0xCC
は次のように表現します。
:00112233AABBCC69<CR><LF>
書式モードは、親機と子機を区別します。
親子間では、アプリケーションIDと周波数チャネルを合わせる必要があります。
書式モードでは、受信したデータから送信元を判別できます。
簡易形式の書式では論理デバイスIDを、拡張形式の書式では論理デバイスIDに加えて拡張アドレスを利用します。
0x8
を付加したものです。書式モードの簡易形式を利用する場合は、次の書式に従います。
# | データ | 内容 | 備考 |
---|---|---|---|
char | ヘッダ | : のみ | |
0 | uint8 | 送信先の論理デバイスID | 親機0x00 ,子機0x01 -0x64 ,全子機0x78 |
1 | uint8 | コマンド番号 | 0x80 未満の任意の値 |
2 | [uint8] | 任意のデータ | 長さ\(N\)のバイト列(\(N\leqq80\)を推奨) |
uint8 | チェックサム | LRC8 | |
char | フッタ | CR (0x0D /'\r' ) | |
char | フッタ | LF (0x0A /'\n' ) |
0x01
コマンドの上位互換です。# | データ | 内容 | 備考 |
---|---|---|---|
char | ヘッダ | : のみ | |
0 | uint8 | 送信元の論理デバイスID | 親機0x00 ,子機0x01 -0x64 ,未設定子機0x78 |
1 | uint8 | コマンド番号 | 送信側で指定した0x80 未満の値 |
2 | [uint8] | 任意のデータ | 長さ\(N\)のバイト列 |
uint8 | チェックサム | LRC8 | |
char | フッタ | CR (0x0D /'\r' ) | |
char | フッタ | LF (0x0A /'\n' ) |
0x01
コマンドの上位互換です。# | データ | 内容 | 備考 |
---|---|---|---|
char | ヘッダ | : のみ | |
0 | uint8 | 送信元の論理デバイスID | 0xDB のみ:自身を示す |
1 | uint8 | コマンド番号 | 0xA1 のみ |
2 | uint8 | 応答ID | 128 -255 (0x80 -0xFF )の範囲で続き番号を示す |
3 | uint8 | 処理結果 | 成功1 ,失敗0 |
uint8 | チェックサム | LRC8 | |
char | フッタ | CR (0x0D /'\r' ) | |
char | フッタ | LF (0x0A /'\n' ) |
親機から全子機に対してバイト列 0x11 0x22 0x33 0xAA 0xBB 0xCC
を送信する例を示します。
【送信側:親機】
:7801112233AABBCCF0<CR><LF> <- 入力
:DBA1800103<CR><LF> <- 出力
末尾の
0xF0
はチェックサム:0x78
から0xCC
までの合計の2の補数のLSBから8ビット。
【受信側:全子機】
:0001112233AABBCC68<CR><LF> <- 出力
末尾の
0x68
はチェックサム:0x00
から0xCC
までの合計の2の補数のLSBから8ビット。
書式モードの拡張形式を利用する場合は、次の書式に従います。
# | データ | 内容 | 備考 |
---|---|---|---|
char | ヘッダ | : のみ | |
0 | uint8 | 送信先の論理デバイスID | 親機0x00 ,子機0x01 -0x64 ,全子機0x78 |
1 | uint8 | コマンド番号 | 0xA0 のみ |
2 | uint8 | 応答ID | 任意の値 |
3 | [uint8] | オプション | 長さ\(N\)のオプション列 |
3+\(N\) | [uint8] | 任意のデータ | 長さ\(M\)のバイト列(\(M\leqq80\)を推奨) |
uint8 | チェックサム | LRC8 | |
char | フッタ | CR (0x0D /'\r' ) | |
char | フッタ | LF (0x0A /'\n' ) |
# | データ | 内容 | 備考 |
---|---|---|---|
char | ヘッダ | : のみ | |
0 | uint8 | 拡張アドレスの指定 | 0x80 のみ |
1 | uint8 | コマンド番号 | 0xA0 のみ |
2 | uint8 | 応答ID | 任意の値 |
3 | uint32 | 送信先の拡張アドレス | シリアルIDの先頭へ0x8 を加えた値 |
7 | [uint8] | オプション | 長さ\(N\)のオプション列 |
7+\(N\) | [uint8] | 任意のデータ | 長さ\(M\)のバイト列(\(M\leqq80\)を推奨) |
uint8 | チェックサム | LRC8 | |
char | フッタ | CR (0x0D /'\r' ) | |
char | フッタ | LF (0x0A /'\n' ) |
拡張形式では、オプション列を指定することで細かな設定を行うことができます。
オプション列は、オプションのIDと引数の繰り返しで表現します。終端は 0xFF
とします。
0xFF
の1バイトだけを指定します。ID | 引数 | 初期値 | 内容 |
---|---|---|---|
0x01 | なし | 無効 | MAC ACKの有効化 |
0x02 | uint8 | 0x00 | アプリケーション再送の有効化 |
0x03 | uint16 | 0x0000 | 初回送信の遅延の最小値 |
0x04 | uint16 | 0x0000 | 初回送信の遅延の最大値 |
0x05 | uint16 | 10 | アプリケーション再送の間隔 |
0x06 | なし | 無効 | 平行要求の許可 |
0x07 | なし | 無効 | 応答メッセージの無効化 |
0x08 | なし | 無効 | 送信後スリープ |
0x01
:MAC ACKの有効化MAC層のACK(確認応答)を有効化します。
頻繁にデータを送信する場合には適しませんが、信頼性を向上できる場合があります。
0x78
)とするときは利用できません。0x02
:アプリケーション再送の有効化MAC ACK を使用するときは、0x00
-0x0F
を指定します。送信に成功するまで、それぞれ0-16回の再送を行います。
MAC ACK を使用しないときは、0x81
-0x8F
を指定します。必ず1-16回の再送を行います。
応答メッセージは、すべての再送が終了してから出力します。
0x03
:初回送信の遅延の最小値初回送信までの遅延の最小値をミリ秒で指定できます。
0x04
:初回送信の遅延の最大値初回送信までの遅延の最大値をミリ秒で指定できます。
0x05
:アプリケーション再送の間隔アプリケーション再送を有効化した際の再送間隔をミリ秒で指定します。
0x06
:平行要求の許可平行要求を許可します。
平行要求を許可すると、要求を完了するまでブロックせず、次の要求処理を受け付けることができるようになります。
例えば 0.5 秒の遅延を設定した要求を3回連続して入力した場合、初期状態では 0.5 秒後、1.0秒後、1.5秒後と順番に処理します。ところが、平行要求を許可した場合は、0.5秒後に順不同で送信要求を処理します。なおパケット分割を必要とする場合は使用できません。
0x07
:応答メッセージの無効化送信側へデータを入力した際に出力される応答メッセージを無効とします。
0x08
:送信後スリープ送信後、速やかに本体をスリープさせます。
RX
が立ち上がりエッジを検知すると、スリープから復帰します。何か1バイトのデータを入力してください。
スリープ復帰後、UART の初期化が終わると入力を受け付けます。
# | データ | 内容 | 備考 |
---|---|---|---|
char | ヘッダ | : のみ | |
0 | uint8 | 送信元の論理デバイスID | 親機0x00 ,子機0x01 -0x64 ,未設定子機0x78 |
1 | uint8 | コマンド番号 | 0xA0 のみ |
2 | uint8 | 応答ID | 送信側で指定した値 |
3 | uint32 | 送信元の拡張アドレス | シリアルIDの先頭へ0x8 を加えた値 |
7 | uint32 | 送信先の拡張アドレス | 論理デバイスID使用時は0xFFFFFFFF |
11 | uint8 | LQI | 受信時の電波通信品質 |
12 | uint16 | 続くバイト列の長さ | バイト数\(M\)を表す |
14 | [uint8] | 任意のデータ | 長さ\(M\)のバイト列 |
uint8 | チェックサム | LRC8 | |
char | フッタ | CR (0x0D /'\r' ) | |
char | フッタ | LF (0x0A /'\n' ) |
# | データ | 内容 | 備考 |
---|---|---|---|
char | ヘッダ | : のみ | |
0 | uint8 | 送信元の論理デバイスID | 0xDB のみ:自身を示す |
1 | uint8 | コマンド番号 | 0xA1 のみ |
2 | uint8 | 応答ID | 入力時に指定した値 |
3 | uint8 | 処理結果 | 成功1 ,失敗0 |
uint8 | チェックサム | LRC8 | |
char | フッタ | CR (0x0D /'\r' ) | |
char | フッタ | LF (0x0A /'\n' ) |
親機から子機に対してバイト列 0x11 0x22 0x33 0xAA 0xBB 0xCC
を送信する例を示します。
親機から論理デバイスID0x42
の子機へ送信する例を示します。
0x01
0x81000000
(シリアルID0x1000000
)【送信側:親機】
:42A001FF112233AABBCC87<CR><LF> <- 入力
:DBA1010182<CR><LF> <- 出力
末尾の
0x87
はチェックサム:0x42
から0xCC
までの合計の2の補数のLSBから8ビット。
【受信側:子機】
:00A00181000000FFFFFFFFC80006112233AABBCC7D<CR><LF> <- 出力
末尾の
0x7D
はチェックサム:最初の0x00
から0xCC
までの合計の2の補数のLSBから8ビット。
親機から拡張アドレス0x81000001
(シリアルID0x1000001
)の子機へ送信する例を示します。
0x01
0x81000000
(シリアルID0x1000000
)【送信側:親機】
:80A00181000001FF112233AABBCCC7<CR><LF> <- 入力
:DBA1010182<CR><LF> <- 出力
末尾の
0xC7
はチェックサム:0x80
から0xCC
までの合計の2の補数のLSBから8ビット。
【受信側:子機】
:00A0018100000081000001C80006112233AABBCCF7<CR><LF> <- 出力
末尾の
0xF7
はチェックサム:最初の0x00
から0xCC
までの合計の2の補数のLSBから8ビット。
親機から論理デバイスID0x42
の子機へ MAC ACK を使用して送信する例を示します。
0x01
0x01
:MAC ACKの有効化を指定0x81000000
(シリアルID0x1000000
)【送信側:親機】
:42A00101FF112233AABBCC86<CR><LF> <- 入力
:DBA1010182<CR><LF> <- 出力
末尾の
0x86
はチェックサム:0x42
から0xCC
までの合計の2の補数のLSBから8ビット。
【受信側:子機】
:00A00181000000FFFFFFFFC80006112233AABBCC7D<CR><LF> <- 出力
末尾の
0x7D
はチェックサム:0x00
から0xCC
までの合計の2の補数のLSBから8ビット。
親機から論理デバイスID0x42
の子機へ 768ms の遅延を設けて送信する例を示します。
0x01
0x03
:初回送信の遅延の最小値を指定0x81000000
(シリアルID0x1000000
)【送信側:親機】
:42A001030300FF112233AABBCC81<CR><LF> <- 入力
:DBA1010182<CR><LF> <- 出力
末尾の
0x81
はチェックサム:0x42
から0xCC
までの合計の2の補数のLSBから8ビット。
【受信側:子機】
:00A00181000000FFFFFFFFC80006112233AABBCC7D<CR><LF> <- 出力
末尾の
0x7D
はチェックサム:0x00
から0xCC
までの合計の2の補数のLSBから8ビット。
0xDB
コマンドインタラクティブモードの設定を行う代わりに、UART から 0xDB
コマンドを入力することでモジュールの操作や設定を行うことができます。
書式モード(アスキー)におけるインタラクティブモードを使用しない設定機能