バイナリデータの伝送
バイナリデータの伝送に特化した製品として、TWELITE UART もございます。
TWELITE UART を使う場合は、ファームウェアの書き換え を飛ばして 通信モードの一覧 以降をお読みください。
使用する製品
TWELITE DIP | TWELITE R2 |
TWELITE 親機/子機 | USB アダプター |
シリアル通信アプリ | - |
2個 | 2個 |
なお、TWELITE DIP と TWELITE R2 のペアは MONOSTICK 単体と同等です。次の組み合わせでも構いません。
MONOSTICK |
TWELITE 親機/子機 |
シリアル通信アプリ |
2個 |
シリアル通信アプリ
TWELITE のファームウェアを、シリアル通信の無線化に特化したシリアル通信アプリ(App_Uart)へ書き換えます。超簡単!標準アプリはシリアル通信によるバイナリデータの伝送機能を備えているものの、その機能は非常に限られているからです。
ファームウェアの書き換え
親機と子機、すべての端末を書き換えます。
- TWELITE STAGE SDK を導入し、TWELITE STAGE アプリを立ち上げる
- シリアルポート選択から接続したデバイスを選択する
- 「メインメニュー」から「2: アプリ書換」を選択する
- 「1: BINから選択」を選び、
App_Uart...
を選択する - 書き込みが完了するまで、数回
Enter
を押す
初期設定では、書き込みが成功すると次のようなインタラクティブモードの画面へ移行します。
--- CONFIG/TWE UART APP V1-04-5/SID=0x82018ca0/LID=0x78 -- ---
a: set Application ID (0x67720103)
i: set Device ID (120=0x78)
c: set Channels (18)
x: set RF Conf (3)
r: set Role (0x0)
l: set Layer (0x1)
b: set UART baud (38400)
B: set UART option (8N1)
m: set UART mode (E)
k: set Tx Trigger (sep=0x0d0a, min_bytes=0 dly=0[ms])
h: set header format [;U;%t;%i;0x%A;%q;%s;<*>;%X;\n]
C: set crypt mode (0)
o: set option bits (0x00000100)
---
S: save Configuration
R: reset to Defaults
通信モードの一覧
シリアル通信アプリには5つの通信モードがあり、用途に応じて使い分けることができます。
- 書式モード(アスキー):送受信双方に書式を適用するモード
- 書式モード(バイナリ):書式モード(アスキー)のバイナリ表記版
- チャットモード:テキストチャットを行うモード
- 透過モード:書式を利用せず純粋にUARTを無線化するモード
- ヘッダ付き透過モード:受信側の出力にのみ書式を適用するモード
初期状態はヘッダ付き透過モードです。
ここでは、次の4つのモードを使った通信テストの手順を紹介します。気になるものを選んでお試しください。
- ヘッダ付き透過モード
- 送信側の書式はありません。
- 受信側の書式から、送信元の論理デバイスIDや受信時の電波通信品質といった情報を得ることができます。
- バランスのよいモードです。
- 透過モード
- 送受信双方に書式はありません。
- 送信側の入力と受信側の出力は同等です。
- 最も簡単ですが、機能は限られています。
- 書式モード(アスキー)
- 送受信双方へ書式を適用します。
- 外部デバイスの対応が必要ですが、送信先の指定や送信元の識別ができます。
- バイナリデータは16進数の文字列で表現します。
- 書式モード(バイナリ)
- 送受信双方へ書式を適用します。
- 外部デバイスの対応が必要ですが、送信先の指定や送信元の識別ができます。
- バイナリデータはそのまま表現します。
今回は同一のPCへ2台の TWELITE を接続し、データをループバックさせてみましょう。通常は外部デバイス同士を無線経由で接続します。
ヘッダ付き透過モード
ヘッダ付き透過モードを使用して、ASCIIデータHello
という文字列を双方から送信してみましょう。
設定方法
シリアル通信アプリの既定のモードはヘッダ付き透過モードです。よって初期設定のまま使用します。
通信テスト
1. TWELITE STAGE アプリを2つ立ち上げる
TWELITE STAGE アプリ(TWELITE_Stage.exe/.command/.run
)を2つ立ち上げてください。
TWELITE_Stage_1
とTWELITE_Stage_2
)。2. ターミナルを表示する
双方の TWELITE STAGE アプリにおいてシリアルポートを選択したのち、「1: ビューア」>「1: ターミナル」を選択します。
3. 片側から送信
片方の画面を選択し、Hello
と入力してEnter
を押します。もう片方の画面へ反映されます。
4. 反対側から送信
もう片方の画面を選択し、Hello
と入力してEnter
を押します。元の画面へ反映されます。
次の系列は、以下のように解釈できます。
;U;00052;120;0x82036841;255;000;Hello;79;
データ | 内容 | 値 | |
---|---|---|---|
U | char | 固定値 | U |
00052 | uint16 | 出力時のタイムスタンプ | 52 秒 |
120 | uint8 | 送信元の論理デバイスID | 120 IDなし子機 |
0x82036841 | uint32 | 送信元の拡張アドレス | 82036841 |
255 | uint8 | LQI(電波通信品質) | 255/255 |
000 | uint8 | 送信元の続き番号 | 0 |
Hello | [uint8] | 入力データ | Hello |
79 | uint8 | XORチェックサム | 0x79 |
書式の詳細はマニュアルをご覧ください。
透過モード
透過モードを使用して、ASCIIデータHello
という文字列を双方から送信してみましょう。
設定方法
m
:通信モードをD
とします。
通信テスト
1. TWELITE STAGE アプリを2つ立ち上げる
TWELITE STAGE アプリ(TWELITE_Stage.exe/.command/.run
)を2つ立ち上げてください。
TWELITE_Stage_1
とTWELITE_Stage_2
)。2. ターミナルを表示する
双方の TWELITE STAGE アプリにおいてシリアルポートを選択したのち、「1: ビューア」>「1: ターミナル」を選択します。
3. 片側から送信
片方の画面を選択し、Hello
と入力してEnter
を押します。もう片方の画面へ反映されます。
4. 反対側から送信
もう片方の画面を選択し、Hello
と入力してEnter
を押します。元の画面へ反映されます。
入出力のどちらにも書式がないため、入力したデータをそのまま出力します。
Hello
書式モード(アスキー)
書式モード(アスキー)を使用して、バイナリデータ 0x5A 0xAB 0x90 0x00
を双方から送信してみましょう。
設定方法
m
:通信モードをA
とします。
片方の端末のi
:論理デバイスIDを0
(親機)としたうえで、もう片方の端末は1
(子機、ID1
)とします。
通信テスト(簡易形式)
まずは、簡易形式のシンプルな書式を試してみましょう。
1. TWELITE STAGE アプリを2つ立ち上げる
TWELITE STAGE アプリ(TWELITE_Stage.exe/.command/.run
)を2つ立ち上げてください。
TWELITE_Stage_1
とTWELITE_Stage_2
)。2. ターミナルを表示する
双方の TWELITE STAGE アプリにおいてシリアルポートを選択したのち、「1: ビューア」>「1: ターミナル」を選択します。
3. 親機側から送信
まず、以下の系列をコピーします。
:01235AAB900047
上記の系列は、次の内容を指します。
データ | 内容 | 値 | |
---|---|---|---|
: | char | ヘッダ(固定値) | : |
01 | uint8 | 送信先の論理デバイスID | 0x01 子機 |
23 | uint8 | 任意のコマンド番号 | 0x23 |
5AAB9000 | [uint8] | 送信するデータ | 0x5A 0xAB 0x90 0x00 |
47 | uint8 | チェックサム(LRC) | 0x47 |
char | フッタ(改行文字) | CR (0x0D /\r ) | |
char | フッタ(改行文字) | LF (0x0A /\n ) |
書式の詳細はマニュアルをご覧ください。
次に、親機側の画面を選択します。
最後に、Alt+V
/⌘+V
を押してペーストし、Enter
を押します。子機側の画面へ反映されます。
上記における受信側の系列は、以下のように解釈できます。
:00235AAB900048
データ | 内容 | 値 | |
---|---|---|---|
: | char | ヘッダ(固定値) | : |
00 | uint8 | 送信元の論理デバイスID | 0x00 親機 |
23 | uint8 | コマンド番号 | 0x23 |
5AAB9000 | [uint8] | 送信されたデータ | 0x5A 0xAB 0x90 0x00 |
48 | uint8 | チェックサム(LRC) | 0x48 |
char | フッタ(改行文字) | CR (0x0D /\r ) | |
char | フッタ(改行文字) | LF (0x0A /\n ) |
書式の詳細はマニュアルをご覧ください。
:DBA1...
の書式についても、マニュアルをご覧ください。4. 子機側から送信
まず、以下の系列をコピーします。
:00235AAB900048
上記の系列は、次の内容を指します。
データ | 内容 | 値 | |
---|---|---|---|
: | char | ヘッダ(固定値) | : |
00 | uint8 | 送信先の論理デバイスID | 0x00 親機 |
23 | uint8 | 任意のコマンド番号 | 0x23 |
5AAB9000 | [uint8] | 送信するデータ | 0x5A 0xAB 0x90 0x00 |
48 | uint8 | チェックサム(LRC) | 0x48 |
char | フッタ(改行文字) | CR (0x0D /\r ) | |
char | フッタ(改行文字) | LF (0x0A /\n ) |
書式の詳細はマニュアルをご覧ください。
次に、子機側の画面を選択します。
最後に、Alt+V
/⌘+V
を押してペーストし、Enter
を押します。親機側の画面へ反映されます。
上記における受信側の系列は、以下のように解釈できます。
:01235AAB900047
データ | 内容 | 値 | |
---|---|---|---|
: | char | ヘッダ(固定値) | : |
01 | uint8 | 送信元の論理デバイスID | 0x01 子機 |
23 | uint8 | コマンド番号 | 0x23 |
5AAB9000 | [uint8] | 送信されたデータ | 0x5A 0xAB 0x90 0x00 |
47 | uint8 | チェックサム(LRC) | 0x47 |
char | フッタ(改行文字) | CR (0x0D /\r ) | |
char | フッタ(改行文字) | LF (0x0A /\n ) |
書式の詳細はマニュアルをご覧ください。
:DBA1...
の書式についても、マニュアルをご覧ください。通信テスト(拡張形式)
次に、拡張形式の高度な書式を試してみましょう。
1. TWELITE STAGE アプリを2つ立ち上げる
TWELITE STAGE アプリ(TWELITE_Stage.exe/.command/.run
)を2つ立ち上げてください。
TWELITE_Stage_1
とTWELITE_Stage_2
)。2. ターミナルを表示する
双方の TWELITE STAGE アプリにおいてシリアルポートを選択したのち、「1: ビューア」>「1: ターミナル」を選択します。
3. 親機側から送信
まず、以下の系列をコピーします。
:01A0CDFF5AAB9000FE
次に、親機側の画面を選択します。
最後に、Alt+V
/⌘+V
を押してペーストし、Enter
を押します。子機側の画面へ反映されます。
上記における受信側の系列は、以下のように解釈できます。
:00A0CD82036841FFFFFFFFFF00045AAB9000D1
データ | 内容 | 値 | |
---|---|---|---|
: | char | ヘッダ(固定値) | : |
00 | uint8 | 送信元の論理デバイスID | 0x00 親機 |
A0 | uint8 | コマンド番号(固定値) | 0xA0 |
CD | uint8 | 応答ID | 0xCD |
82036841 | uint32 | 送信元の拡張アドレス | 0x82036841 |
FFFFFFFF | uint32 | 送信先の拡張アドレス | 0xFFFFFFFF なし |
FF | uint8 | LQI | 255/255 |
0004 | uint16 | 続くデータの長さ | 4 バイト |
5AAB9000 | [uint8] | 送信されたデータ | 0x5A 0xAB 0x90 0x00 |
D1 | uint8 | チェックサム(LRC) | 0xD1 |
char | フッタ(改行文字) | CR (0x0D /\r ) | |
char | フッタ(改行文字) | LF (0x0A /\n ) |
書式の詳細はマニュアルをご覧ください。
:DBA1...
の書式についても、マニュアルをご覧ください。4. 子機側から送信
まず、以下の系列をコピーします。
:00A0CDFF5AAB9000FF
次に、子機側の画面を選択します。
最後に、Alt+V
/⌘+V
を押してペーストし、Enter
を押します。親機側の画面へ反映されます。
上記における受信側の系列は、以下のように解釈できます。
:01A0CD820163B2FFFFFFFFFF00045AAB900066
データ | 内容 | 値 | |
---|---|---|---|
: | char | ヘッダ(固定値) | : |
01 | uint8 | 送信元の論理デバイスID | 0x01 子機 |
A0 | uint8 | コマンド番号(固定値) | 0xA0 |
CD | uint8 | 応答ID | 0xCD |
820163B2 | uint32 | 送信元の拡張アドレス | 0x820163B2 |
FFFFFFFF | uint32 | 送信先の拡張アドレス | 0xFFFFFFFF なし |
FF | uint8 | LQI | 255/255 |
0004 | uint16 | 続くデータの長さ | 4 バイト |
5AAB9000 | [uint8] | 送信されたデータ | 0x5A 0xAB 0x90 0x00 |
66 | uint8 | チェックサム(LRC) | 0x66 |
char | フッタ(改行文字) | CR (0x0D /\r ) | |
char | フッタ(改行文字) | LF (0x0A /\n ) |
書式の詳細はマニュアルをご覧ください。
:DBA1...
の書式についても、マニュアルをご覧ください。書式モード(バイナリ)
書式モード(バイナリ)を使用して、バイナリデータ 0x5A 0xAB 0x90 0x00
を双方から送信してみましょう。
以降、バイナリデータ表現の 0x
を省略します。
例えば、0x5A 0xAB 0x90 0x00
は 5A AB 90 00
と表します。
設定方法
m
:通信モードをB
とします。
片方の端末のi
:論理デバイスIDを0
(親機)としたうえで、もう片方の端末は1
(子機、ID1
)とします。
バイナリへ対応した環境を用意
TWELITE STAGE アプリのターミナル機能や TeraTerm はバイナリデータの扱いに対応していないため、バイナリ形式に対応したターミナルソフトを導入する必要があります。
ここでは、一例としてCoolTermを使用します。
通信テスト(簡易形式)
まずは、簡易形式のシンプルな書式を試してみましょう。
1. CoolTerm の画面を2つ開く
CoolTerm の画面を2つ開き、それぞれのデバイスへ接続します。
設定について
Options
> Terminal
> Terminal Mode
を Raw Mode
としたうえで、Options
> Transmit
> Send String Options
> Terminate 'Send String' Data
のチェックを外してください。
設定の詳細については、STAGEアプリを使わずにUART通信する のページをご覧ください。
受信したデータを16進数で表示するために、View
> View Hex
を選択しておきます。Connect
を押して接続します。
2. 親機側から送信
親機側の画面を選択し、Connection
> Send String...
を選択して送信画面を開き、ラジオボタンのHex
を選んでおきます。
次の内容を入力し、Send
を押して親機へ送信します。
A5 5A 80 06 01 23 5A AB 90 00 43 04
上記の系列は、次の内容を指します。
データ | 内容 | 値 | |
---|---|---|---|
A5 | uint8 | ヘッダ(固定値) | 0xA5 |
5A | uint8 | ヘッダ(固定値) | 0x5A |
8006 | uint16 | データ長 | 6 バイト |
01 | uint8 | 送信先の論理デバイスID | 0x01 子機 |
23 | uint8 | 任意のコマンド番号 | 0x23 |
5AAB9000 | [uint8] | 送信するデータ | 5A AB 90 00 |
43 | uint8 | チェックサム(XOR) | 0x43 |
04 | uint8 | フッタ | EOT (0x04 ) |
書式の詳細はマニュアルをご覧ください。
上記における受信側の系列は、以下のように解釈できます。
A5 5A 80 06 00 23 5A AB 90 00 42 04
データ | 内容 | 値 | |
---|---|---|---|
A5 | uint8 | ヘッダ(固定値) | 0xA5 |
5A | uint8 | ヘッダ(固定値) | 0x5A |
8006 | uint16 | データ長 | 6 バイト |
00 | uint8 | 送信元の論理デバイスID | 0x00 親機 |
23 | uint8 | コマンド番号 | 0x23 |
5AAB9000 | [uint8] | 送信されたデータ | 5A AB 90 00 |
42 | uint8 | チェックサム(XOR) | 0x42 |
04 | uint8 | フッタ | EOT (0x04 ) |
書式の詳細はマニュアルをご覧ください。
A5 5A 80 04 DBA1...
の書式についても、マニュアルをご覧ください。3. 子機側から送信
親機と同様に子機側の画面を選択し、Connection
> Send String...
を選択して送信画面を開き、ラジオボタンのHex
を選んでおきます。
次の内容を入力し、Send
を押して親機へ送信します。
A5 5A 80 06 00 23 5A AB 90 00 42 04
上記の系列は、次の内容を指します。
データ | 内容 | 値 | |
---|---|---|---|
A5 | uint8 | ヘッダ(固定値) | 0xA5 |
5A | uint8 | ヘッダ(固定値) | 0x5A |
8006 | uint16 | データ長 | 6 バイト |
00 | uint8 | 送信先の論理デバイスID | 0x00 親機 |
23 | uint8 | 任意のコマンド番号 | 0x23 |
5AAB9000 | [uint8] | 送信するデータ | 5A AB 90 00 |
42 | uint8 | チェックサム(XOR) | 0x42 |
04 | uint8 | フッタ | EOT (0x04 ) |
書式の詳細はマニュアルをご覧ください。
上記における受信側の系列は、以下のように解釈できます。
A5 5A 80 06 01 23 5A AB 90 00 43 04
データ | 内容 | 値 | |
---|---|---|---|
A5 | uint8 | ヘッダ(固定値) | 0xA5 |
5A | uint8 | ヘッダ(固定値) | 0x5A |
8006 | uint16 | データ長 | 6 バイト |
01 | uint8 | 送信元の論理デバイスID | 0x01 子機 |
23 | uint8 | コマンド番号 | 0x23 |
5AAB9000 | [uint8] | 送信されたデータ | 5A AB 90 00 |
43 | uint8 | チェックサム(XOR) | 0x43 |
04 | uint8 | フッタ | EOT (0x04 ) |
書式の詳細はマニュアルをご覧ください。
A5 5A 80 04 DB A1...
の書式についても、マニュアルをご覧ください。通信テスト(拡張形式)
次に、拡張形式の高度な書式を試してみましょう。
1. CoolTerm の画面を2つ開く
CoolTerm の画面を2つ開き、それぞれのデバイスへ接続します。
設定について
Options
> Terminal
> Terminal Mode
を Raw Mode
としたうえで、Options
> Transmit
> Send String Options
> Terminate 'Send String' Data
のチェックを外してください。
設定の詳細については、STAGEアプリを使わずにUART通信する のページをご覧ください。
受信したデータを16進数で表示するために、View
> View Hex
を選択しておきます。Connect
を押して接続します。
2. 親機側から送信
親機側の画面を選択し、Connection
> Send String...
を選択して送信画面を開き、ラジオボタンのHex
を選んでおきます。
次の内容を入力し、Send
を押して子機へ送信します。
A5 5A 80 08 01 A0 CD FF 5A AB 90 00 F2 04
上記における受信側の系列は、以下のように解釈できます。
A5 5A 80 12 00 A0 CD 81 0E 0E 23 FF FF FF FF BA 00 04 5A AB 90 00 10 04
データ | 内容 | 値 | |
---|---|---|---|
A5 | uint8 | ヘッダ(固定値) | 0xA5 |
5A | uint8 | ヘッダ(固定値) | 0x5A |
8012 | uint16 | データ長 | 18 バイト |
00 | uint8 | 送信元の論理デバイスID | 0x00 親機 |
A0 | uint8 | コマンド番号(固定値) | 0xA0 |
CD | uint8 | 応答ID | 0xCD |
810E0E23 | uint32 | 送信元の拡張アドレス | 0x810E0E23 |
FFFFFFFF | uint32 | 送信先の拡張アドレス | 0xFFFFFFFF なし |
BA | uint8 | LQI | 186/255 |
0004 | uint16 | 続くデータの長さ | 4 バイト |
5AAB9000 | [uint8] | 送信されたデータ | 0x5A 0xAB 0x90 0x00 |
10 | uint8 | チェックサム(XOR) | 0x10 |
04 | uint8 | フッタ | EOT (0x04 ) |
書式の詳細はマニュアルをご覧ください。
A5 5A 80 04 DB A1...
の書式についても、マニュアルをご覧ください。3. 子機側から送信
親機と同様に子機側の画面を選択し、Connection
> Send String...
を選択して送信画面を開き、ラジオボタンのHex
を選んでおきます。
次の内容を入力し、Send
を押して親機へ送信します。
A5 5A 80 08 00 A0 CD FF 5A AB 90 00 F3 04
上記における受信側の系列は、以下のように解釈できます。
A5 5A 80 12 01 A0 CD 81 0E 00 92 FF FF FF FF BA 00 04 5A AB 90 00 AE 04
データ | 内容 | 値 | |
---|---|---|---|
A5 | uint8 | ヘッダ(固定値) | 0xA5 |
5A | uint8 | ヘッダ(固定値) | 0x5A |
8012 | uint16 | データ長 | 18 バイト |
01 | uint8 | 送信元の論理デバイスID | 0x01 子機 |
A0 | uint8 | コマンド番号(固定値) | 0xA0 |
CD | uint8 | 応答ID | 0xCD |
810E0092 | uint32 | 送信元の拡張アドレス | 0x820163B2 |
FFFFFFFF | uint32 | 送信先の拡張アドレス | 0xFFFFFFFF なし |
BA | uint8 | LQI | 186/255 |
0004 | uint16 | 続くデータの長さ | 4 バイト |
5AAB9000 | [uint8] | 送信されたデータ | 0x5A 0xAB 0x90 0x00 |
AE | uint8 | チェックサム(XOR) | 0xAE |
04 | uint8 | フッタ | EOT (0x04 ) |
書式の詳細はマニュアルをご覧ください。
A5 5A 80 04 DB A1...
の書式についても、マニュアルをご覧ください。