セクションの複数ページをまとめています。 印刷またはPDF形式で保存...

もとのページに戻る

2024-04-25 現在

シリアル通信アプリ マニュアル

最新版

ダウンロード

シリアル通信アプリ(App_Uart)を導入するには TWELITE STAGE SDK をインストールして、TWELITE STAGE アプリを使って書き換えてください。

1 - シリアル通信アプリのピン配置

シリアル通信アプリが使用するピンの機能

TWELITE / TWELITE DIP

シリアル通信アプリが使用するピンの機能を、下図の超簡単!標準アプリのピン名を使って表します。

超簡単!標準アプリのピン配置表

超簡単!標準アプリのピン配置表

シリアル通信超簡単!標準機能
VCC GNDVCC GND電源入力
TX RXTX RXシリアル入出力
TX_SUB RX_SUBSCL SDAシリアル副入出力
RTSPWM1シリアル入力許可
M1M1親機/子機の選択
M2M2子機へ中継機能を付与
M3M3スリープ
EX1AI2動作モードの上書き
BPSBPS代替ボーレート設定の有効化
RSTRSTリセット入力

電源入力

VCC/GND には、3.3V(2.0-3.6V)の電源を接続します。

シリアル入出力

TX/RX は、シリアル通信(UART)の送信と受信に使用します。

シリアル副入出力

TX_SUBSCL)/RX_SUBSDA)は、シリアル入出力の副ポートとして利用できます。

シリアル入力許可

RTSPWM1)が Low レベルのときは、RXへのシリアル入力を受け付けていることを示します。

親機/子機の選択

M1GNDへ接続すると親機、開放またはVCCへ接続すると子機として使用できます。

子機へ中継機能を付与

M2を子機設定のときにGNDへ接続することで、中継機能を付与できます。

スリープ

M3GNDへ接続すると、本体をスリープさせることができます。

動作モードの上書き

EX1 を起動時に GND へ接続しておくことで、動作モードを書式モード(バイナリ)へ上書きできます。

代替ボーレート設定の有効化

BPSGNDへ接続することで、インタラクティブモードで指定した代替ボーレート設定を有効化できます。

リセット入力

RSTGNDとの間にプッシュボタンを接続することで、リセットボタンを実装できます。RSTは内部プルアップされています。

TWELITE UART

シリアル通信アプリが使用するピンの機能を、基板に記載された7Pインタフェース(下図の②)のピン名を使って表します。

基板アンテナタイプ

基板アンテナタイプ

同軸コネクタタイプ

同軸コネクタタイプ

シルク機能
VCC GND電源入力
TXD RXDシリアル入出力
SET動作モードの上書き
RSTリセット入力

電源入力

VCC/GND には、3.3V(2.0-3.6V)の電源を接続します。

シリアル入出力

TX/RX は、シリアル通信(UART)の送信と受信に使用します。

動作モードの上書き

SET を起動時に GND へ接続することで、動作モードを書式モード(アスキー)へ上書きできます。

リセット入力

RSTGNDとの間にプッシュボタンを接続することで、リセットボタンを実装できます。RSTは内部プルアップされています。

2 - シリアル通信アプリの通信モード

各通信モードの説明
シリアル通信アプリ(App_Uart)には、5つの通信モードがあります。

通信モードの一覧

各モードは、インタラクティブモードによって切り替えます(一部のモードはピン入力にて設定可能)。

IDモード
A書式モード(アスキー)
B書式モード(バイナリ)
Cチャットモード
D透過モード
Eヘッダ付き透過モード

初期状態はヘッダ付き透過モードです。

A:書式モード(アスキー)

送信側の端末へ特定の書式に従ったデータを入力すると、受信側の端末も特定の書式に従ったデータを出力します。

16進数で表すデータはアスキー文字列で表現します。

送信側の入力受信側の出力
簡易形式/拡張形式のデータ簡易形式/拡張形式のデータ

TWELITE UART では、SET ピンを GND へ接続して起動すると本モードが有効となります。

データを表現する形式は2種類あります。

  • 簡易形式:論理デバイスIDだけを使用。超簡単!標準アプリのUART伝送機能と互換性あり
  • 拡張形式:論理デバイスIDに加えて、シリアルIDや再送回数などの送信オプションを使用できる

例えば、5バイトのバイナリデータ 0x48 0x45 0x4C 0x4C 0x4F は、簡易形式を使って次のように送信できます。

【送信側】

:000148454C4C4F8B  <- 入力
:DBA1800103  <- 出力

【受信側】

:780148454C4C4F13  <- 出力

書式モードでは、アプリケーションIDなどの設定をインタラクティブモードだけでなく UART によるコマンド(アスキー形式)によって動的に適用できます。

B:書式モード(バイナリ)

送信側の端末へ特定の書式に従ったデータを入力すると、受信側の端末も特定の書式に従ったデータを出力します。

16進数で表すデータはそのままバイナリ形式で表現します。

送信側の入力受信側の出力
簡易形式/拡張形式のデータ簡易形式/拡張形式のデータ

TWELITE / TWELITE DIP では、EX1 ピンを GND へ接続して起動すると本モードが有効となります。

書式モード(アスキー)と同様に、データを表現する形式は2種類あります。

例えば、5バイトのバイナリデータ 0x48 0x45 0x4C 0x4C 0x4F は、簡易形式を使って次のように送信できます。

【送信側】

0xA5 0x5A 0x00 0x07 0x00 0x01 0x48 0x45 0x4C 0x4C 0x4F 0x43 0x04    <- 入力
0xA5 0x5A 0x00 0x04 0xDB 0xA1 0x80 0x01 0xFB 0x04  <- 出力

【受信側】

0xA5 0x5A 0x00 0x07 0x78 0x01 0x48 0x45 0x4C 0x4C 0x4F 0x3B 0x04  <- 出力

書式モードでは、アプリケーションIDなどの設定をインタラクティブモードだけでなく UART によるコマンド(バイナリ形式)によって動的に適用できます。

C:チャットモード

テキストチャットを実現します。

送信側の入力受信側の出力
任意の文字列補助情報+任意の文字列

プロンプトの表示とエコーバック(入力した文字の出力)を行います。すべての端末は子機として、同報通信を行います。

例えば、ある端末から他の端末へ Hello という文字列を送信する場合は、次のように振る舞います。

【送信側】

810A4778:0> Hello  <- 入力
810A4778:1>  <- 出力

【受信側】

[810A4778:0] Hello  <- 出力
82018CA0:0>  <- 出力

上記の例ではプロンプトにシリアルIDを表示していますが、任意のハンドル名を使用することもできます。

D:透過モード

送信側の端末へ任意のデータを入力すると、受信側の端末は受信したデータをそのまま出力します。

送信側の入力受信側の出力
任意のデータ任意のデータ

書式を必要としないため、既存の UART 通信を簡単に無線化できます。

一方で、データの区切りがあいまいになってしまうほか、受信側の出力から送信元を判別できないといった欠点があります。

初期状態では、送信側へ入力されたデータをCRLFで区切り、CRLF よりも前のデータを送信します。

例えば、送信側の端末へ Hello<Enter> と入力すると、受信側の端末はそのまま Hello を出力します。

【送信側】

Hello  <- 入力

【受信側】

Hello  <- 出力

E:ヘッダ付き透過モード

送信側の端末へ任意のデータを入力すると、受信側の端末は受信した内容に特定の書式で補助情報を付加したデータを出力します。

送信側の入力受信側の出力
任意のデータ任意のデータ+補助情報

初期状態では、送信側へ入力されたデータをCRLFで区切り、CRLF よりも前のデータを送信します。

例えば、送信側の端末へ Hello<Enter> と入力すると、受信側の端末は補助情報を含んだ書式で Hello を出力します。送信側の端末も送信完了といったメッセージを伝える書式を出力します。

【送信側】

Hello  <- 入力
;U;00004;219;0x820163B2;000;000;0,1,Hel...;6E;  <- 出力

【受信側】

;U;00003;000;0x820163B2;255;000;Hello;42;  <- 出力

受信側が出力する補助情報は、送信元のアドレスや受信時の電波強度、チェックサム等を含みます。補助情報の書式はカスタマイズできます。

2.1 - シリアル通信アプリの書式モード(アスキー形式)

送受信双方の出力にヘッダを付加するモード(アスキー形式)
書式モードは、送受信双方の出力にヘッダを付加します。アスキー形式では、データを16進数の文字列で表します。
書式モードによるネットワークの構成例

概要

送信側の端末へ特定の書式に従ったデータを入力すると、受信側の端末も特定の書式に従ったデータを出力します。

データは16進数のアスキー文字列で表現します。

送信側の入力受信側の出力
簡易形式/拡張形式のデータ簡易形式/拡張形式のデータ
  • TWELITE UART では、SET ピンを GND へ接続して起動すると書式モード(アスキー)が有効となります。
  • TWELITE / TWELITE DIP では、EX1 ピンを GND へ接続して起動すると書式モード(バイナリ)が有効となります。

扱うことのできる書式の形式は2種類あります。

  • 簡易形式:論理デバイスIDだけを使用する。超簡単!標準アプリのUART伝送機能と互換性あり
  • 拡張形式:論理デバイスIDに加えて、シリアルIDや再送回数などの送信オプションを使用できる

例えば、5バイトのバイナリデータ 0x48 0x45 0x4C 0x4C 0x4F は、簡易形式を使って次のように送信できます。

【送信側】

:000148454C4C4F8B  <- 入力
:DBA1800103  <- 出力

【受信側】

:780148454C4C4F13  <- 出力

基本の書式

基本形式や拡張形式で表現したデータ列を送信するときは、アスキー文字列(0-9,A-F)へ変換します。

書式は超簡単!標準アプリ(App_Twelite)や親機・中継機アプリ(App_Wings)の親機の出力と同様に、:で始まりCRLFで終わります。

ヘッダペイロードチェックサムフッタ
:00-FFの繰り返しペイロードのLRC8CRLF
  • すべて ASCII 文字
  • 先頭は : (0x3A)
  • チェックサムはペイロードの合計の2の補数
  • 末端は CRLF (\r\n/0x0D 0x0A)
  • ビッグエンディアン

例えば、バイナリデータ 0x00 0x11 0x22 0x33 0xAA 0xBB 0xCC は次のように表現します。

:00112233AABBCC69<CR><LF>

親機と子機の区別

書式モードは、親機と子機を区別します。

親子間では、アプリケーションIDと周波数チャネルを合わせる必要があります。

送信元の判別

書式モードでは、受信したデータから送信元を判別できます。

簡易形式の書式では論理デバイスIDを、拡張形式の書式では論理デバイスIDに加えて拡張アドレスを利用します。

簡易形式の書式

書式モードの簡易形式を利用する場合は、次の書式に従います。

送信側の入力

#データ内容備考
charヘッダ:のみ
0uint8送信先の論理デバイスID親機0x00,子機0x01-0x64,全子機0x78
1uint8コマンド番号0x80未満の任意の値
2[uint8]任意のデータ長さ\(N\)のバイト列(\(N\leqq80\)を推奨)
uint8チェックサムLRC8
charフッタCR (0x0D/'\r')
charフッタLF (0x0A/'\n')

受信側の出力

#データ内容備考
charヘッダ:のみ
0uint8送信元の論理デバイスID親機0x00,子機0x01-0x64,未設定子機0x78
1uint8コマンド番号送信側で指定した0x80未満の値
2[uint8]任意のデータ長さ\(N\)のバイト列
uint8チェックサムLRC8
charフッタCR (0x0D/'\r')
charフッタLF (0x0A/'\n')

送信側の出力(応答メッセージ)

#データ内容備考
charヘッダ:のみ
0uint8送信元の論理デバイスID0xDBのみ:自身を示す
1uint8コマンド番号0xA1のみ
2uint8応答ID128-255(0x80-0xFF)の範囲で続き番号を示す
3uint8処理結果成功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ビット。

拡張形式の書式

書式モードの拡張形式を利用する場合は、次の書式に従います。

送信側の入力

送信先の指定に論理デバイスIDを使用する場合

#データ内容備考
charヘッダ:のみ
0uint8送信先の論理デバイスID親機0x00,子機0x01-0x64,全子機0x78
1uint8コマンド番号0xA0のみ
2uint8応答ID任意の値
3[uint8]オプション長さ\(N\)のオプション列
3+\(N\)[uint8]任意のデータ長さ\(M\)のバイト列(\(M\leqq80\)を推奨)
uint8チェックサムLRC8
charフッタCR (0x0D/'\r')
charフッタLF (0x0A/'\n')

送信先の指定に拡張アドレスを使用する場合

#データ内容備考
charヘッダ:のみ
0uint8拡張アドレスの指定0x80のみ
1uint8コマンド番号0xA0のみ
2uint8応答ID任意の値
3uint32送信先の拡張アドレスシリアルIDの先頭へ0x8を加えた値
7[uint8]オプション長さ\(N\)のオプション列
7+\(N\)[uint8]任意のデータ長さ\(M\)のバイト列(\(M\leqq80\)を推奨)
uint8チェックサムLRC8
charフッタCR (0x0D/'\r')
charフッタLF (0x0A/'\n')

オプション列の詳細

拡張形式では、オプション列を指定することで細かな設定を行うことができます。

オプション列は、オプションのIDと引数の繰り返しで表現します。終端は 0xFF とします。

ID引数初期値内容
0x01なし無効MAC ACKの有効化
0x02uint80x00アプリケーション再送の有効化
0x03uint160x0000初回送信の遅延の最小値
0x04uint160x0000初回送信の遅延の最大値
0x05uint1610アプリケーション再送の間隔
0x06なし無効平行要求の許可
0x07なし無効応答メッセージの無効化
0x08なし無効送信後スリープ
0x01:MAC ACKの有効化

MAC層のACK(確認応答)を有効化します。

頻繁にデータを送信する場合には適しませんが、信頼性を向上できる場合があります。

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ヘッダ:のみ
0uint8送信元の論理デバイスID親機0x00,子機0x01-0x64,未設定子機0x78
1uint8コマンド番号0xA0のみ
2uint8応答ID送信側で指定した値
3uint32送信元の拡張アドレスシリアルIDの先頭へ0x8を加えた値
7uint32送信先の拡張アドレス論理デバイスID使用時は0xFFFFFFFF
11uint8LQI受信時の電波通信品質
12uint16続くバイト列の長さバイト数\(M\)を表す
14[uint8]任意のデータ長さ\(M\)のバイト列
uint8チェックサムLRC8
charフッタCR (0x0D/'\r')
charフッタLF (0x0A/'\n')

送信側の出力(応答メッセージ)

#データ内容備考
charヘッダ:のみ
0uint8送信元の論理デバイスID0xDBのみ:自身を示す
1uint8コマンド番号0xA1のみ
2uint8応答ID入力時に指定した値
3uint8処理結果成功1,失敗0
uint8チェックサムLRC8
charフッタCR (0x0D/'\r')
charフッタLF (0x0A/'\n')

使用例

親機から子機に対してバイト列 0x11 0x22 0x33 0xAA 0xBB 0xCC を送信する例を示します。

論理デバイスIDを指定する例

親機から論理デバイスID0x42の子機へ送信する例を示します。

  • 応答IDは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)の子機へ送信する例を示します。

  • 応答IDは0x01
  • オプションなし
  • 親機の拡張アドレスは0x81000000(シリアルID0x1000000

【送信側:親機】

:80A00181000001FF112233AABBCCC7<CR><LF>  <- 入力
:DBA1010182<CR><LF>  <- 出力

末尾の0xC7はチェックサム:0x80から0xCCまでの合計の2の補数のLSBから8ビット。

【受信側:子機】

:00A0018100000081000001C80006112233AABBCCF7<CR><LF>  <- 出力

末尾の0xF7はチェックサム:最初の0x00から0xCCまでの合計の2の補数のLSBから8ビット。

MAC ACKを使用する例

親機から論理デバイスID0x42の子機へ MAC ACK を使用して送信する例を示します。

  • 応答IDは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 の遅延を設けて送信する例を示します。

【送信側:親機】

:42A001030300FF112233AABBCC81<CR><LF>  <- 入力
:DBA1010182<CR><LF>  <- 出力

末尾の0x81はチェックサム:0x42から0xCCまでの合計の2の補数のLSBから8ビット。

【受信側:子機】

:00A00181000000FFFFFFFFC80006112233AABBCC7D<CR><LF>  <- 出力

末尾の0x7Dはチェックサム:0x00から0xCCまでの合計の2の補数のLSBから8ビット。

0xDB コマンド

インタラクティブモードの設定を行う代わりに、UART から 0xDB コマンドを入力することでモジュールの操作や設定を行うことができます。

2.1.1 - シリアル通信アプリ 書式モード(アスキー)の 0xDB コマンド

書式モード(アスキー)におけるインタラクティブモードを使用しない設定機能
書式モードでは、インタラクティブモードの代わりに0xDBコマンドを使うことで、UART接続されたデバイスから動的に設定を行えます。

入力の書式

#データ内容備考
charヘッダ:のみ
0uint8送信先の論理デバイスID自身を示す0xDBのみ
1uint8コマンド番号後述の値から選択
2[uint8]パラメータ設定値を示す長さ\(N\)のバイト列(オプション)
uint8チェックサムLRC8
charフッタCR (0x0D/'\r')
charフッタLF (0x0A/'\n')

コマンド番号の一覧

機能
0xF0ACKの有効化
0xF1端末情報の取得
0xF2端末設定の適用
0xF3端末設定の取得
0xF8端末の制御
0xFD端末設定の消去
0xFE端末設定の保存
0xFF端末のリセット

0xF0:ACKの有効化

ACK 応答の要求を行います。

パラメータはありません。

応答の書式

#データ内容備考
charヘッダ:のみ
0uint8送信先の論理デバイスID0xDBのみ
1uint8コマンド番号0xF0のみ
2uint8データ0x01のみ
uint8チェックサム0x34:LRC8
charフッタCR (0x0D/'\r')
charフッタLF (0x0A/'\n')

0xF1:端末情報の取得

アドレス等の情報を表示します。起動時にも出力されます。

パラメータはありません。

応答の書式

#データ内容備考
charヘッダ:のみ
0uint8送信先の論理デバイスID0xDBのみ
1uint8コマンド番号0xF1のみ
2uint32アプリケーションID
6uint32バージョン番号1.4.7なら00010407
10uint8論理デバイスID
11uint32シリアルID
15uint8サイレントモードの状態有効1, 無効0
16uint8ネットワークの状態UP1, DOWN0
uint8チェックサムLRC8
charフッタCR (0x0D/'\r')
charフッタLF (0x0A/'\n')

0xF2:端末設定の適用

設定を適用します。

応答の書式

成功した場合
#データ内容備考
charヘッダ:のみ
0uint8送信先の論理デバイスID0xDBのみ
1uint8コマンド番号0xF3のみ
2[uint8]設定内容長さ\(N\)の識別子とデータの繰り返し
uint8チェックサムLRC8
charフッタCR (0x0D/'\r')
charフッタLF (0x0A/'\n')
失敗した場合
#データ内容備考
charヘッダ:のみ
0uint8送信先の論理デバイスID0xDBのみ
1uint8コマンド番号0xF3のみ
2uint8エラー0xFFのみ
uint8チェックサム0x33:LRC8
charフッタCR (0x0D/'\r')
charフッタLF (0x0A/'\n')

0xF3:端末設定の取得

設定を取得します。

応答の書式

#データ内容備考
charヘッダ:のみ
0uint8送信先の論理デバイスID0xDBのみ
1uint8コマンド番号0xF3のみ
2[uint8]設定内容識別子とデータの繰り返し
uint8チェックサムLRC8
charフッタCR (0x0D/'\r')
charフッタLF (0x0A/'\n')

0xF8:端末の制御

起動時にサイレントモードを有効としていた場合に、これを解除します。

応答の書式

#データ内容備考
charヘッダ:のみ
0uint8送信先の論理デバイスID0xDBのみ
1uint8コマンド番号0xF8のみ
2uint8データ0x11のみ
3uint8状態解除済み1, 未解除0
uint8チェックサムLRC8
charフッタCR (0x0D/'\r')
charフッタLF (0x0A/'\n')

0xFD:端末設定の消去

設定を初期化し、本体をリセットします。

パラメータおよび応答はありません。

0xFE:端末設定の保存

適用した設定を保存し、本体をリセットします。

パラメータおよび応答はありません。

0xFF:端末のリセット

適用した設定を破棄し、本体をリセットします。

パラメータおよび応答はありません。

パラメータの一覧(0xF2/0xF3

0xF2:端末設定の適用 および 0xF3:端末設定の取得 のパラメータは、識別子とデータ(ビッグエンディアン)の繰り返しで表現します。

識別子データ内容
0x00uint32アプリケーションID
0x01uint32周波数チャネルマスク
0x02uint16再送回数と出力
0x03uint8論理デバイスID
0x04uint8役割
0x05uint8中継レイヤ
0x06uint8通信モード
0x07uint32ボーレート
0x08uint8パリティ
0x09uint8暗号化機能
0x0A[uint8]暗号化キー
0x0Cuint16区切り文字
0xFFuint8エラー

0x00:アプリケーションID

アプリケーションIDを指定します。

0x01:周波数チャネルマスク

周波数チャネルのビットマスクを指定します。

使用するチャネルのビットを立てます。例えば、11チャネルを使う場合は1<<11です。

0x02:再送回数と出力

電波の送信出力と、透過モードおよびヘッダ付き透過モードにおいてパケットを追加で送信する回数を指定します。

下位の1バイトのみを使用します。そのうち上位の4ビットが再送回数(0-9)、下位の4ビットが送信出力(0-3)です。例えば、8回再送/出力3 であれば 0x0083です。

0x03:論理デバイスID

論理デバイスIDを指定します。

0x04:役割

子機のみ有効です。以下の値を指定します。通常はネットワーク層を利用しない配送方式を選択してください。

ネットワーク層を利用しない配送方式

  • 0:通常の指定(親機または子機)
  • 1-3:中継子機(論理デバイスIDを1-100 または 120とします)1-3の数値は最大中継段数を指します。最大中継段数まで再送を繰り返す方式のため、中継機の配置や数によっては重複したパケットを中継します。

ネットワーク層を利用する配送方式

  • 11:親機
  • 12:中継機
  • 13:子機

0x05:中継レイヤ

中継レイヤの番号です。中継機は中継レイヤ数の上位(より小さい値)の中継機・親機への接続を試みます。役割12としているときにだけ有効です。

0x06:通信モード

  • 0:透過モード
  • 1:書式モード(アスキー)
  • 2:書式モード(バイナリ)
  • 3:チャットモード
  • 4:ヘッダ付き透過モード

0x07:ボーレート

UART ボーレートを指定します。

0x08:パリティ

以下の設定の組み合わせにおいて、設定値の総和を指定します。

  • Bit
    • 0:8Bit
    • 8:7Bit
  • Parity
    • 0:None
    • 1:Odd
    • 2:Even
  • Stop
    • 0:STOP 1
    • 4:STOP 2

例えば、7-E-1 なら 8+2+0=10(0xA) を指定します。

0x09:暗号化機能

暗号化機能の有無を指定します。

  • 0:無効
  • 1:AES128bit の暗号化を有効

0x0A:暗号化キー

16バイトの暗号化キーを指定します。

インタラクティブモードでは設定できないバイナリ列を格納できます。この場合、インタラクティブモードの表示が崩れる場合があります。

0x0C:区切り文字

区切り文字列の指定を行います(0x00-0xFF)。

サイレントモード

設定方法

インタラクティブモードで以下の設定を行います。

  • r: Role80 を足しておく。例えば、通常の親機や子機なら80とする。
  • m: UART mode を書式モード(A/B)としておく。

動作確認

起動直後に出力される DB F1 応答の内容を確認します。

解除方法

DB F8 要求を行います(アスキー形式::DBF8101D<CR><LF>)。

注意点

  • サイレントモードの再設定はできません。
  • サイレントモードが有効のときに送信コマンドを入力した場合の動作は未定義です。

2.2 - シリアル通信アプリの書式モード(バイナリ形式)

送受信双方の出力にヘッダを付加するモード(バイナリ形式)
書式モードは、送受信双方の出力にヘッダを付加します。バイナリ形式では、データをそのまま表現します。
書式モードによるネットワークの構成例

概要

送信側の端末へ特定の書式に従ったデータを入力すると、受信側の端末も特定の書式に従ったデータを出力します。

16進数で表すデータは、バイナリデータのまま表現します。

送信側の入力受信側の出力
簡易形式/拡張形式のデータ簡易形式/拡張形式のデータ
  • TWELITE UART では、SET ピンを GND へ接続して起動すると書式モード(アスキー)が有効となります。
  • TWELITE / TWELITE DIP では、EX1 ピンを GND へ接続して起動すると書式モード(バイナリ)が有効となります。

扱うことのできる書式の形式は2種類あります。

  • 簡易形式:論理デバイスIDだけを使用。超簡単!標準アプリのUART伝送機能と互換性あり
  • 拡張形式:論理デバイスIDに加えて、シリアルIDや再送回数などの送信オプションを使用できる

例えば、5バイトのバイナリデータ 0x48 0x45 0x4C 0x4C 0x4F は、簡易形式を使って次のように送信できます。

【送信側】

A5 5A 80 07 00 01 48 45 4C 4C 4F 43 04    <- 入力
A5 5A 80 04 DB A1 80 01 FB 04  <- 出力

【受信側】

A5 5A 80 07 78 01 48 45 4C 4C 4F 3B 04  <- 出力

基本の書式

基本形式や拡張形式で表現したデータ列を送信するときは、バイナリデータのまま扱います。

ヘッダ長さペイロードチェックサムフッタ
A5 5Aペイロード長00-FFの繰り返しペイロードのXOREOT
  • すべてバイナリ
  • 先頭は A5 5A の2バイト
  • ペイロード長はバイト数を2バイトで表現、0x8000とORをとる
  • チェックサムはペイロードのXOR
  • 末端は EOT を表す 0x04(入力時は省略可)
  • ビッグエンディアン

例えば、バイナリデータ 00 11 22 33 AA BB CC は次のように表現します。

A5 5A 80 07 00 11 22 33 AA BB CC DD 04

デバッグが面倒ですが、マイコン間の通信では高い効率を誇ります。

親機と子機の区別

書式モードは、親機と子機を区別します。

親子間では、アプリケーションIDと周波数チャネルを合わせる必要があります。

送信元の判別

書式モードでは、受信したデータから送信元を判別できます。

簡易形式の書式では論理デバイスIDを、拡張形式の書式では論理デバイスIDに加えて拡張アドレスを利用します。

簡易形式の書式

書式モードの簡易形式を利用する場合は、次の書式に従います。

送信側の入力

#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長\(N\)+2
0uint8送信先の論理デバイスID親機0x00,子機0x01-0x64,全子機0x78
1uint8コマンド番号0x80未満の任意の値
2[uint8]任意のデータ長さ\(N\)のバイト列(\(N\leqq80\)を推奨)
uint8チェックサムXOR
uint8フッタEOT (0x04)

受信側の出力

#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長\(N\)+2
0uint8送信元の論理デバイスID親機0x00,子機0x01-0x64,未設定子機0x78
1uint8コマンド番号送信側で指定した0x80未満の値
2[uint8]任意のデータ長さ\(N\)のバイト列
uint8チェックサムXOR
uint8フッタEOT (0x04)

送信側の出力(応答メッセージ)

#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長4
0uint8送信元の論理デバイスID0xDBのみ:自身を示す
1uint8コマンド番号0xA1のみ
2uint8応答ID128-255(0x80-0xFF)の範囲で続き番号を示す
3uint8処理結果成功1,失敗0
uint8チェックサムXOR
uint8フッタEOT (0x04)

使用例

親機から全子機に対してバイト列 11 22 33 AA BB CC を送信する例を示します。

【送信側:親機】

A5 5A 80 08 78 01 11 22 33 AA BB CC A4 04  <- 入力
A5 5A 80 04 DB A1 80 01 FB 04  <- 出力

末尾の0xA4はチェックサム:0x78から0xCCまでのXOR。

【受信側:全子機】

A5 5A 80 08 00 01 11 22 33 AA BB CC DC 04  <- 出力

末尾の0xDCはチェックサム:0x00から0xCCまでのXOR。

拡張形式の書式

書式モードの拡張形式を利用する場合は、次の書式に従います。

送信側の入力

送信先の指定に論理デバイスIDを使用する場合

#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長\(N\)+\(M\)+3
0uint8送信先の論理デバイスID親機0x00,子機0x01-0x64,全子機0x78
1uint8コマンド番号0xA0のみ
2uint8応答ID任意の値
3[uint8]オプション長さ\(N\)のオプション列
3+\(N\)[uint8]任意のデータ長さ\(M\)のバイト列(\(M\leqq80\)を推奨)
uint8チェックサムXOR
uint8フッタEOT (0x04)

送信先の指定に拡張アドレスを使用する場合

#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長\(N\)+\(M\)+7
0uint8拡張アドレスの指定0x80のみ
1uint8コマンド番号0xA0のみ
2uint8応答ID任意の値
3uint32送信先の拡張アドレスシリアルIDの先頭へ0x8を加えた値
7[uint8]オプション長さ\(N\)のオプション列
7+\(N\)[uint8]任意のデータ長さ\(M\)のバイト列(\(M\leqq80\)を推奨)
uint8チェックサムXOR
uint8フッタEOT (0x04)

オプション列の詳細

拡張形式では、オプション列を指定することで細かな設定を行うことができます。

オプション列は、オプションのIDと引数の繰り返しで表現します。終端は 0xFF とします。

ID引数初期値内容
0x01なし無効MAC ACKの有効化
0x02uint80x00アプリケーション再送の有効化
0x03uint160x0000初回送信の遅延の最小値
0x04uint160x0000初回送信の遅延の最大値
0x05uint1610アプリケーション再送の間隔
0x06なし無効平行要求の許可
0x07なし無効応答メッセージの無効化
0x08なし無効送信後スリープ
0x01:MAC ACKの有効化

MAC層のACK(確認応答)を有効化します。

頻繁にデータを送信する場合には適しませんが、信頼性を向上できる場合があります。

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 の初期化が終わると入力を受け付けます。

受信側の出力

#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長\(M\)+14
0uint8送信元の論理デバイスID親機0x00,子機0x01-0x64,未設定子機0x78
1uint8コマンド番号0xA0のみ
2uint8応答ID送信側で指定した値
3uint32送信元の拡張アドレスシリアルIDの先頭へ0x8を加えた値
7uint32送信先の拡張アドレス論理デバイスID使用時は0xFFFFFFFF
11uint8LQI受信時の電波通信品質
12uint16続くバイト列の長さバイト数\(M\)を表す
14[uint8]任意のデータ長さ\(M\)のバイト列
uint8チェックサムXOR
uint8フッタEOT (0x04)

送信側の出力(応答メッセージ)

#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長4
0uint8送信元の論理デバイスID0xDBのみ:自身を示す
1uint8コマンド番号0xA1のみ
2uint8応答ID入力時に指定した値
3uint8処理結果成功1,失敗0
uint8チェックサムXOR
uint8フッタEOT (0x04)

使用例

親機から子機に対してバイト列 11 22 33 AA BB CC を送信する例を示します。

論理デバイスIDを指定する例

親機から論理デバイスID0x01の子機へ送信する例を示します。

  • 応答IDは0x01
  • オプションなし

【送信側:親機】

A5 5A 80 0A 01 A0 01 FF 11 22 33 AA BB CC 82 04  <- 入力
A5 5A 80 04 DB A1 01 01 7A 04  <- 出力

末尾の0xC1はチェックサム:0x42から0xCCまでのXOR。

【受信側:子機】

A5 5A 80 14 00 A0 01 82 03 68 41 FF FF FF FF FF 00 06 11 22 33 AA BB CC 2D 04  <- 出力

末尾の0x2Dはチェックサム:0x00から0xCCまでのXOR。

拡張アドレスを指定する例

親機から拡張アドレス0x820163B2(シリアルID0x20163B2)の子機へ送信する例を示します。

  • 応答IDは0x01
  • オプションなし

【送信側:親機】

A5 5A 80 0E 80 A0 01 82 01 63 B2 FF 11 22 33 AA BB CC 51 04  <- 入力
A5 5A 80 04 DB A1 01 01 7A 04  <- 出力

末尾の0x51はチェックサム:0x80から0xCCまでのXOR。

【受信側:子機】

A5 5A 80 14 00 A0 01 82 03 68 41 82 01 63 B2 FF 00 06 11 22 33 AA BB CC 7F 04  <- 出力

末尾の0x7Fはチェックサム:0x00から0xCCまでのXOR。

MAC ACKを使用する例

親機から論理デバイスID0x01の子機へ MAC ACK を使用して送信する例を示します。

【送信側:親機】

A5 5A 80 0B 01 A0 01 01 FF 11 22 33 AA BB CC 83 04  <- 入力
A5 5A 80 04 DB A1 01 01 7A 04  <- 出力

末尾の0x83はチェックサム:0x01から0xCCまでのXOR。

【受信側:子機】

A5 5A 80 14 00 A0 01 82 03 68 41 00 00 01 01 FF 00 06 11 22 33 AA BB CC 2D 04  <- 出力

末尾の0x2Dはチェックサム:0x00から0xCCまでのXOR。

遅延を設ける例

親機から論理デバイスID0x01の子機へ 768ms の遅延を設けて送信する例を示します。

【送信側:親機】

A5 5A 80 0D 01 A0 01 03 03 00 FF 11 22 33 AA BB CC 82 04  <- 入力
A5 5A 80 04 DB A1 01 01 7A 04  <- 出力

末尾の0x82はチェックサム:0x01から0xCCまでのXOR。

【受信側:子機】

A5 5A 80 14 00 A0 01 82 03 68 41 FF FF FF FF FF 00 06 11 22 33 AA BB CC 2D 04  <- 出力

末尾の0x2Dはチェックサム:0x00から0xCCまでのXOR。

0xDB コマンド

インタラクティブモードの設定を行う代わりに、UART から 0xDB コマンドを入力することでモジュールの操作や設定を行うことができます。

2.2.1 - シリアル通信アプリ 書式モード(バイナリ)の 0xDB コマンド

書式モード(バイナリ)におけるインタラクティブモードを使用しない設定機能
書式モードでは、インタラクティブモードの代わりに0xDBコマンドを使うことで、UART接続されたデバイスから動的に設定を行えます。

入力の書式

#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長\(N\)+2
0uint8送信先の論理デバイスID自身を示す0xDBのみ
1uint8コマンド番号後述の値から選択
2[uint8]パラメータ設定値を示す長さ\(N\)のバイト列(オプション)
uint8チェックサムXOR
uint8フッタEOT (0x04)

コマンド番号の一覧

機能
0xF0ACKの有効化
0xF1端末情報の取得
0xF2端末設定の適用
0xF3端末設定の取得
0xF8端末の制御
0xFD端末設定の消去
0xFE端末設定の保存
0xFF端末のリセット

0xF0:ACKの有効化

ACK 応答の要求を行います。

パラメータはありません。

応答の書式

#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長3
0uint8送信先の論理デバイスID0xDBのみ
1uint8コマンド番号0xF0のみ
2uint8データ0x01のみ
uint8チェックサムXOR
uint8フッタEOT (0x04)

0xF1:端末情報の取得

アドレス等の情報を表示します。起動時にも出力されます。

パラメータはありません。

応答の書式

#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長17
0uint8送信先の論理デバイスID0xDBのみ
1uint8コマンド番号0xF1のみ
2uint32アプリケーションID
6uint32バージョン番号1.4.7なら00010407
10uint8論理デバイスID
11uint32シリアルID
15uint8サイレントモードの状態有効1, 無効0
16uint8ネットワークの状態UP1, DOWN0
uint8チェックサムXOR
uint8フッタEOT (0x04)

0xF2:端末設定の適用

設定を適用します。

応答の書式

成功した場合
#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長\(N\)+2
0uint8送信先の論理デバイスID0xDBのみ
1uint8コマンド番号0xF3のみ
2[uint8]設定内容長さ\(N\)の識別子とデータの繰り返し
uint8チェックサムXOR
uint8フッタEOT (0x04)
失敗した場合
#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長3
0uint8送信先の論理デバイスID0xDBのみ
1uint8コマンド番号0xF3のみ
2uint8エラー0xFFのみ
uint8チェックサムXOR
uint8フッタEOT (0x04)

0xF3:端末設定の取得

設定を取得します。

応答の書式

#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長\(N\)+2
0uint8送信先の論理デバイスID0xDBのみ
1uint8コマンド番号0xF3のみ
2[uint8]設定内容長さ\(N\)の識別子とデータの繰り返し
uint8チェックサムXOR
uint8フッタEOT (0x04)

0xF8:端末の制御

起動時にサイレントモードを有効としていた場合に、これを解除します。

応答の書式

#データ内容備考
uint8ヘッダ0xA5のみ
uint8ヘッダ0x5Aのみ
uint16データ長4
0uint8送信先の論理デバイスID0xDBのみ
1uint8コマンド番号0xF8のみ
2uint8データ0x11のみ
3uint8状態解除済み1, 未解除0
uint8チェックサムXOR
uint8フッタEOT (0x04)

0xFD:端末設定の消去

設定を初期化し、本体をリセットします。

パラメータおよび応答はありません。

0xFE:端末設定の保存

適用した設定を保存し、本体をリセットします。

パラメータおよび応答はありません。

0xFF:端末のリセット

適用した設定を破棄し、本体をリセットします。

パラメータおよび応答はありません。

パラメータの一覧(0xF2/0xF3

0xF2:端末設定の適用 および 0xF3:端末設定の取得 のパラメータは、識別子とデータ(ビッグエンディアン)の繰り返しで表現します。

識別子データ内容
0x00uint32アプリケーションID
0x01uint32周波数チャネルマスク
0x02uint16再送回数と出力
0x03uint8論理デバイスID
0x04uint8役割
0x05uint8中継レイヤ
0x06uint8通信モード
0x07uint32ボーレート
0x08uint8パリティ
0x09uint8暗号化機能
0x0A[uint8]暗号化キー
0x0Cuint16区切り文字
0xFFuint8エラー

0x00:アプリケーションID

アプリケーションIDを指定します。

0x01:周波数チャネルマスク

周波数チャネルのビットマスクを指定します。

使用するチャネルのビットを立てます。例えば、11チャネルを使う場合は1<<11です。

0x02:再送回数と出力

電波の送信出力と、透過モードおよびヘッダ付き透過モードにおいてパケットを追加で送信する回数を指定します。

下位の1バイトのみを使用します。そのうち上位の4ビットが再送回数(0-9)、下位の4ビットが送信出力(0-3)です。例えば、8回再送/出力3 であれば 0x0083です。

0x03:論理デバイスID

論理デバイスIDを指定します。

0x04:役割

子機のみ有効です。以下の値を指定します。通常はネットワーク層を利用しない配送方式を選択してください。

ネットワーク層を利用しない配送方式

  • 0:通常の指定(親機または子機)
  • 1-3:中継子機(論理デバイスIDを1-100 または 120とします)1-3の数値は最大中継段数を指します。最大中継段数まで再送を繰り返す方式のため、中継機の配置や数によっては重複したパケットを中継します。

ネットワーク層を利用する配送方式

  • 11:親機
  • 12:中継機
  • 13:子機

0x05:中継レイヤ

中継レイヤの番号です。中継機は中継レイヤ数の上位(より小さい値)の中継機・親機への接続を試みます。役割12としているときにだけ有効です。

0x06:通信モード

  • 0:透過モード
  • 1:書式モード(バイナリ)
  • 2:書式モード(バイナリ)
  • 3:チャットモード
  • 4:ヘッダ付き透過モード

0x07:ボーレート

UART ボーレートを指定します。

0x08:パリティ

以下の設定の組み合わせにおいて、設定値の総和を指定します。

  • Bit
    • 0:8Bit
    • 8:7Bit
  • Parity
    • 0:None
    • 1:Odd
    • 2:Even
  • Stop
    • 0:STOP 1
    • 4:STOP 2

例えば、7-E-1 なら 8+2+0=10(0xA) を指定します。

0x09:暗号化機能

暗号化機能の有無を指定します。

  • 0:無効
  • 1:AES128bit の暗号化を有効

0x0A:暗号化キー

16バイトの暗号化キーを指定します。

インタラクティブモードでは設定できないバイナリ列を格納できます。この場合、インタラクティブモードの表示が崩れる場合があります。

0x0C:区切り文字

区切り文字列の指定を行います(0x00-0xFF)。

サイレントモード

設定方法

インタラクティブモードで以下の設定を行います。

  • r: Role80 を足しておく。例えば、通常の親機や子機なら80とする。
  • m: UART mode を書式モード(A/B)としておく。

動作確認

起動直後に出力される DB F1 応答の内容を確認します。

解除方法

DB F8 要求を行います(バイナリ形式:A5 5A 80 03 DB F8 10 33 04)。

注意点

  • サイレントモードの再設定はできません。
  • サイレントモードが有効のときに送信コマンドを入力した場合の動作は未定義です。

2.3 - シリアル通信アプリのチャットモード

プロンプト表示とエコーバックを行うモード
チャットモードは、プロンプト表示とエコーバックによりテキストチャットを実現します。

MONOSTICK を PC 等へ接続することで、複数の端末同士のチャットを行うことができます。

概要

テキストチャットを実現します。

送信側の入力受信側の出力
任意の文字列任意の文字列+補助情報

プロンプトの表示とエコーバック(入力した文字の出力)を行います。すべての端末は子機として、同報通信を行います。

例えば、ある端末から他の端末へ Hello という文字列を送信する場合は、次のように振る舞います。

【送信側】

810A4778:0> Hello  <- 入力
810A4778:1>  <- 出力

【受信側】

[810A4778:0] Hello  <- 出力
82018CA0:0>  <- 出力

チャットモードは、プロンプトの表示とエコーバック(自身へ入力された文字の出力)を行います。

全ての端末は子機としたうえで、送信内容はブロードキャストします。すべての端末と通信できますが宛て先は指定できません。またバイナリデータは送れません。文字列のみ対応しています(0x00-0x1F, 0x7F は送信不可)。

中継は3段(3ホップ)まで対応しています。初期設定では中継しません。

親機と子機の区別

チャットモードは、親機と子機を区別しません。

アプリケーションIDと周波数チャネルが同一であれば、どの端末へ入力したデータもほかの端末へと送信されます。

ネットワークの構成イメージ

ネットワークの構成イメージ

送信元の判別

受信側に出力される補助情報の識別情報から送信元を判別できます。

インタラクティブモードのh: Header formatを空欄としたときは、7桁のシリアルIDの先頭へ0x8を付与した拡張アドレスを使用します。例えば、以下の出力では送信元のシリアルIDが0x10A4778であったと分かります。

[810A4778:0] Hello

インタラクティブモードのh: Header formatへ任意の文字列を設定したときは、それをハンドル名として利用します。ただし、ハンドル名は無線パケットに格納するデータを消費します。

送信側の入力書式

プロンプトに続けて、メッセージと改行文字を入力します。

データ内容備考
[char]メッセージ0x00-0x1F, 0x7Fは不可
charCR (0x0D/'\r')単体でも可
charLF (0x0A/'\n')単体でも可
810A4778:0> Hello

受信側の出力書式

補助情報に続けて、受信したメッセージを出力します。

補助情報は、モジュールの拡張アドレスまたはハンドル名と、続き番号を含みます。

データ内容備考
char補助情報のヘッダ[のみ
[char]識別情報8桁の拡張アドレスまたはハンドル名
char補助情報の区切り文字:のみ
[char]続き番号0から開始
char補助情報のフッタ]のみ
char区切り文字半角スペースのみ
[char]メッセージ
charフッタCR (0x0D/'\r')
charフッタLF (0x0A/'\n')
[810A4778:0] Hello

その他の入力

エスケープシーケンスに対応したターミナルでは、以下の制御コマンドを使用できます。

  • Ctrl-L:画面のクリア
  • Ctrl-C:入力のキャンセル
  • BS/DEL:カーソルを戻す

2.4 - シリアル通信アプリの透過モード

純粋にUARTを無線化するモード
透過モードは、ヘッダの付加やエコーバック、プロンプト表示を行わず、有線接続された UART と同じような振る舞いを実現します。
外部マイコン同士を接続するイメージ

外部マイコン同士を簡単に接続できますが、書式を用いて通信を最適化するには書式モード(アスキーバイナリ)が適しています。

概要

純粋にUARTを無線化します。

送信側の入力受信側の出力
任意のデータ任意のデータ

書式を必要としないため、既存の UART 通信を簡単に無線化できます。

一方で、データの区切りがあいまいになってしまうほか、受信側の出力から送信元を判別できないといった欠点があります。

初期状態では、送信トリガ文字にCRLFを指定しています。したがって、送信側へ入力されたデータをCRLFで区切り、CRLF よりも前のデータを送信します。

例えば、送信側の端末へ Hello<Enter> と入力すると、受信側の端末はそのまま Hello を出力します。

【送信側】

Hello  <- 入力

【受信側】

Hello  <- 出力

連続して入力された文字列を80バイトごとに分割して送信します。トリガ文字までのデータは通常80バイト以下としてください。

全ての端末は子機としたうえで、送信内容はブロードキャストします。すべての端末と通信できますが宛て先は指定できません。アスキー文字だけでなく、バイナリデータも送信できます。

中継は3段(3ホップ)まで対応しています。初期設定では中継しません。

親機と子機の区別

透過モードは、親機と子機を区別しません。

アプリケーションIDと周波数チャネルが同一であれば、どの端末へ入力したデータもほかの端末へと送信されます。

ネットワークの構成イメージ

ネットワークの構成イメージ

送信元の判別

透過モードでは、送信元を判別できません。

送信元を判別するには、送信側へ入力するデータそのものに送信元の情報を含める必要があります。

送信トリガ

送信側の入力に書式はありませんが、データはある時点で分割されたのち、パケットごとに無線で送信されます。

したがって、次に挙げる送信トリガを意識しなくてはなりません。

  • データ入力後のタイムアウトを迎えたとき
  • 入力データが最小データサイズを満たしたとき
  • 送信トリガ文字を受け取ったとき

送信トリガの設定は、インタラクティブモードのk:送信トリガ項目から指定します。

設定例

送信トリガ文字をLF、最小データサイズを8バイト、タイムアウトを30msとする場合は次のように設定します。

 m: set UART mode (D)
 k: set Tx Trigger (sep=0x0a, min_bytes=8 dly=30[ms])
 o: set option bits (0x00000100)

2.5 - シリアル通信アプリのヘッダ付き透過モード

受信側の出力にだけヘッダを付加するモード
ヘッダ付き透過モードは、受信側の出力にだけ補助情報を付加します。

概要

初期状態で有効となっています。

送信側の端末へ任意のデータを入力すると、受信側の端末は受信した内容に特定の書式で補助情報を付加したデータを出力します。

送信側の入力受信側の出力
任意のデータ任意のデータ+補助情報

初期状態では、送信側へ入力されたデータをCRLFで区切り、CRLF よりも前のデータを送信します。

例えば、送信側の端末へ Hello<Enter> と入力すると、受信側の端末は補助情報を含んだ書式で Hello を出力します。送信側の端末も送信完了といったメッセージを伝える書式を出力します。

【送信側】

Hello  <- 入力
;U;00004;219;0x820163B2;000;000;0,1,Hel...;6E;  <- 出力

【受信側】

;U;00003;000;0x820163B2;255;000;Hello;42;  <- 出力

受信側が出力する補助情報は、送信元のアドレスや受信時の電波強度、チェックサム等を含みます。補助情報の書式はカスタマイズできます。

親機と子機の区別

ヘッダ付き透過モードは、親機と子機を区別しません。

アプリケーションIDと周波数チャネルが同一であれば、どの端末へ入力したデータもほかの端末へと送信されます。

ネットワークの構成イメージ

ネットワークの構成イメージ

送信元の判別

ヘッダ付き透過モードで受信したデータからは、送信元を判別できます。

受信側が出力する補助情報を表すヘッダに含むことのできる論理デバイスIDやシリアルIDのデータを利用します。

受信側の出力書式

出力書式はセミコロン(;)区切りとして表現されます。

【初期状態における出力例】

;U;00777;120;0x81025A17;120;013;HELLO;79;

この出力例は、次のように解釈できます。

データ内容
Uchar固定値U
00777uint16出力時のタイムスタンプ777
120uint8送信元の論理デバイスID120 IDなし子機
0x81025A17uint32送信元の拡張アドレス81025A17
120uint8LQI(電波通信品質)120/255
013uint8送信元の続き番号13
HELLO[uint8]入力データHELLO
79uint8XORチェックサム0x79

ヘッダフォーマットによるカスタマイズ

受信側の出力書式は、ヘッダフォーマットに従います。

ヘッダフォーマットを変更することで、受信側が出力する補助情報の内容やチェックサムの計算範囲をカスタマイズできます。

ヘッダフォーマットの変更は、インタラクティブモードの h: set header format から行います。

最も簡単な書式

最も簡単な書式を表すヘッダフォーマットは *\n です。受信したデータへ CRLF の改行文字を付与して出力します。

 h: set header format [*\n]

この場合にHELLOを送信すると、次のように振る舞います。

【受信側】

HELLO<CR><LF> または HELLO<LF>

【送信側】

HELLO<CR><LF>

フォーマットを構成する特殊文字

ヘッダフォーマットに次の特殊文字を含めることで、出力内容をカスタマイズできます。

全般
内容
*受信したデータ
&hl任意の文字(アスキー)(例:&20は空白)
<チェックサム計算の開始位置(未設定で先頭から)
>チェックサム計算の終了位置(v1.4.6以降のみ)
\(バックスラッシュ・¥)に続くもの
内容
\nCRLF (0x0D 0x0A)
\tTAB
\**
\%%
\<<
\>>
\&&
%に続くもの
内容長さデータ
%A送信元アドレス(32bit)8桁16進数
%a送信元アドレス(32bit)10桁16進数
%I送信元論理アドレス(8bit)2桁16進数
%i送信元論理アドレス(8bit)3桁10進数
%T現在のシステム時間(秒)4桁16進数
%t現在のシステム時間(秒)5桁10進数
%S送信元が設定した続き番号2桁16進数
%s送信元が設定した続き番号3桁16進数
%Q受信時の電波強度2桁16進数
%q受信時の電波強度3桁10進数
%Xチェックサム2桁16進数
%xチェックサム3桁10進数

チェックサムの計算

チェックサムはデータの先頭あるいはヘッダフォーマットの<を指定した箇所から%X,%xの直前までを XOR(排他的論理和)にて計算します。

初期状態の例

初期状態ではヘッダフォーマットを ;U;%t;%i;0x%A;%q;%s;<*;%X;\n としており、チェックサムの計算範囲は*;です。

すなわち、HELLO を送信した場合は HELLO; のバイナリデータを対象とするため、チェックサムは0x79です。

【Python による検証コード】

from functools import reduce

def main():
    data = "HELLO;"
    checksum = reduce(lambda x, y: x ^ y, data.encode("ascii"))
    print(f"{data} -> {hex(checksum)}")

if __name__ == "__main__":
   main()  # HELLO; -> 0x79

その他の例

例えば、ヘッダフォーマットを ;%I;*;%X とした場合を考えます。

<を指定していないため、チェックサムの計算範囲は;%I;*;です。

すなわち、HELLO を送信した場合は ;000;HELLO; のバイナリデータを対象とするため、チェックサムは 0x49 です。

【Python による検証コード】

from functools import reduce

def main():
    data = ";000;HELLO;"
    checksum = reduce(lambda x, y: x ^ y, data.encode("ascii"))
    print(f"{data} -> {hex(checksum)}")

if __name__ == "__main__":
   main()  # ;000;HELLO; -> 0x49

送信トリガ

送信側の入力に書式はありませんが、データはある時点で分割されたのち、パケットごとに無線で送信されます。

したがって、次に挙げる送信トリガを意識しなくてはなりません。

  • データ入力後のタイムアウトを迎えたとき
  • 入力データが最小データサイズを満たしたとき
  • 送信トリガ文字を受け取ったとき

送信トリガの設定は、インタラクティブモードのk:送信トリガ項目から指定します。

設定例

送信トリガ文字をLF、最小データサイズを8バイト、タイムアウトを30msとする場合は次のように設定します。

 m: set UART mode (E)
 k: set Tx Trigger (sep=0x0a, min_bytes=8 dly=30[ms])
 o: set option bits (0x00000100)

3 - シリアル通信アプリのカスタムデフォルト機能

デフォルトの設定を変更したファームウェアの作成
カスタムデフォルト機能によって、ファームウェアに含まれるデフォルトのパラメータを変更できます。

例えば、ボーレートを 115200bps から 9600bps へ変更したファームウェアを作成しておけば、最初から 9600bps で使用できます。

設定手順

1. 設定を適用

インタラクティブモードの設定を変更し、Sを押下して保存します。

2. 設定内容をダウンロード

xmodem プロトコルのデータをダウンロードできるソフトウェアを用意します。

再度インタラクティブモードへ入った状態(項目を選ぶ前の状態)として、xmodem のダウンロードを要求します。

ダウンロードに成功すると、128バイトのファイルを生成します(xmodem の実装によっては、小さいサイズになることもあります)。

3. カスタムバイナリの作成

ダウンロードしたファイルをファームウェアのバイナリファイルの末尾へ連結し、カスタムバイナリを作成します。

連結には、コマンドラインツールや汎用のファイル連結ツールを使用してください。

実行例

ダウンロードした xmodem のファイルを conf.bin、元のバイナリファイルをApp_Uart_BLUE_L1305_V1-4-X.bin、作成するカスタムバイナリをApp_Uart_custom_V1-4-X.binとした場合の例を示します。

【Windows】

copy App_Uart_BLUE_L1305_V1-4-X.bin App_Uart_custom_V1-4-X.bin
type conf.bin >> App_Uart_custom_V1-4-X.bin

【macOS / Linux】


cat App_Uart_BLUE_L1305_V1-4-X.bin conf.bin > App_Uart_custom_V1-4-X.bin

4. カスタムバイナリの書き込み

連結したカスタムバイナリを TWELITE へ書き込みます。

4 - シリアル通信アプリの通信における注意点

安定した通信を実現するための注意点
安定した通信を実現するための注意点を記載しています。

UART のデータ入出力

UART の入力には、入力側に 4KB、出力側に 4KB のバッファを確保しています。2系統のUARTを出力する場合は、各系統の入力に 2KB、出力に 2KB を利用します。

書式モードやチャットモードでバッファのサイズを意識する場面は多くありませんが、ヘッダ付き透過モードや透過モードで連続的に系列を入力する場合や、書式モードであっても多数の系列を一度に入力する場合は、バッファサイズの上限を意識する必要があります。出力においても、遅いボーレートを設定した場合には、無線で受信したデータの出力が間に合わない可能性があります。

バッファの上限を超えた場合は、その境界でのデータは保護されません。データ抜けが発生します。特に入力側では後述のフロー制御ピンを参照することを検討してください。

UART のフロー制御

入力側のフロー制御については、 RTS ピン同様の振る舞いをするように実装しています。使用するピンは PWM1(DIO5) であり、その対象は主UARTポートです。入力を受け付けないときに High、入力を受け付けるときに Low 状態となります。なお出力側のフロー制御には対応していません。受信側のデバイスでは、十分なボーレートと処理速度を確保してください。

  • 電源投入・リセット直後は High です。UART が初期化されると Low。
  • UART の入力バッファが 7/8 を超えたときに High となります。下回ると Low。
  • 透過モードでは、パケット送信中は High となります。

無線通信エラーの対策

受信側にデータ抜けが発生する場合は、無線の再送回数を増やしてください。

追加送信するパケットの数を増やすことで、受信の成功率を向上できる場合があります。

再送回数はインタラクティブモードで設定できます(x: set RF Conf)。

5 - シリアル通信アプリのインタラクティブモード

インタラクティブモードによる設定変更
インタラクティブモードでアプリの詳細設定を行うことができます。

ここではシリアル通信アプリ(App_Uart)に固有の機能を説明します。共通機能については、TWELITE APPS マニュアル のトップページを参照してください。

表示例

次のような画面を表示します。

--- 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

コマンド

設定項目初期値備考
aアプリケーションID0x6772010332bit
i論理デバイスID120親機0/121,子機1-100,IDなし子機120
c周波数チャネル1811-26
x再送回数と送信出力3
再送回数01-9回、0は無効
送信出力30-3
r役割0通常0,中継子機1-3,その他
l中継レイヤ0x01
bUART代替ボーレート38400BPSピンで有効化
BUARTオプション8N1
m通信モードEA/B/C/D/E
k送信トリガ0x0d0a,0,0トリガ文字、最小サイズ、タイムアウト
hヘッダ/ハンドル名参照
ヘッダヘッダ付き透過モードの場合
ハンドル名チャットモードの場合
C暗号化0無効0,AES128bit1
oオプションビット0x00000000その他の詳細設定

各コマンドの詳細を次に示します。

a:アプリケーションID

通信を行う端末はすべて同一の値とします。論理的にネットワークを分離します。

i:論理デバイスID

複数の子機を識別する必要がある場合に設定します。

識別の必要がない、できない場合は120としてください。識別の必要がある場合は、子機は1-100の任意の値に、親機は0あるいは121としてください。

c:周波数チャネル

通信を行う端末はすべて同一の値とします。物理的にネットワークを分離します。

x:送信出力と再送回数

電波の送信出力と、透過モードおよびヘッダ付き透過モードにおいてパケットを追加で送信する回数を指定します。

r:役割

子機のみ有効です。以下の値を指定します。通常はネットワーク層を利用しない配送方式を選択してください。

ネットワーク層を利用しない配送方式

  • 0:通常の指定(親機または子機)
  • 1-3:中継子機(論理デバイスIDを1-100 または 120とします)1-3の数値は最大中継段数を指します。最大中継段数まで再送を繰り返す方式のため、中継機の配置や数によっては重複したパケットを中継します。

ネットワーク層を利用する配送方式

書式モードのみ対応しています。

  • 11:親機
  • 12:中継機
  • 13:子機

l:中継レイヤ

中継レイヤの番号です。中継機は中継レイヤ数の上位(より小さい値)の中継機・親機への接続を試みます。役割12としているときにだけ有効です。

m:通信モード

  • A:書式モード(アスキー)
  • B:書式モード(バイナリ)
  • C:チャットモード
  • D:透過モード
  • E:ヘッダ付き透過モード

b:UART代替ボーレート

BPSピンをGNDへ接続して起動した場合に選択される代替ボーレートを38400bpsから上書きします。

値は9600/19200/38400/57600/115200/230400から選択できます。他の値を指定すると、誤差が生じる可能性があります。

B:UARTオプション

Bit-Parity-Stop の順で3文字を指定します。

  • Bit
    • 8:8Bit
    • 7:7Bit
  • Parity
    • N:None
    • O:Odd
    • E:Even
  • Stop
    • 1:STOP 1
    • 2:STOP 2

k:送信トリガ

透過モードとヘッダ付き透過モードの入力へ適用する送信トリガを設定します。

カンマ,で区切り、以下の順で入力してください。

  1. 送信トリガ文字
  2. 最小データサイズ
  3. タイムアウト

送信トリガ文字

この文字が入力されたときにパケットを送信します(最小データサイズを満たしていない場合を除く)。

インタラクティブモードでは、16進数のASCIIコードを指定します。先頭の0xは無視されます。初期状態ではCRLFとしています。

送信されるデータには送信トリガ文字も含まれます。送信トリガ文字を有効とするには、オプションビット 0x00000100 を指定する必要があります(デフォルト指定済み)。

最小データサイズ

連続して扱うデータの最小サイズを指定します。最小データサイズを満たすまでのデータに送信トリガ文字が含まれていても、これは無効となります。

インタラクティブモードでは、バイト数として1-80の数値を指定します。0で無効となります。初期状態では無効です。

タイムアウト

最後の入力からパケットを送信するまでの待ち時間を示します。

インタラクティブモードでは、ミリ秒単位で10-200の数値を指定します。0で無効となります。初期状態では無効

h:ヘッダ/ハンドル名

ヘッダ付き透過モードに対してはヘッダのフォーマットを、チャットモードに対してはハンドル名を示します。

ヘッダ(ヘッダ付き透過モード)

ヘッダ付き透過モードに対しては、ヘッダのフォーマット書式を指定します。

ハンドル名(チャットモード)

相手端末に表示するハンドル名を指定します。

最大23文字です。送信するデータ(80バイト)の領域を消費します。

C:暗号化

暗号化機能の有無を指定します。

AES128bitの暗号化を有効とするには、1を指定してください。

o:オプションビット

32bit の数値を指定します。各ビットに紐付いた設定を有効化できます。

対象ビット設定項目初期ABCDE
0x00000001M3の内部プルアップを停止0️⃣
0x00000002未使用0️⃣
0x00000100送信トリガの有効化1️⃣
0x00000200新たな入力系列を優先0️⃣
0x00001000応答メッセージを停止0️⃣
0x00004000重複チェッカの緩和0️⃣
0x00010000強制的に代替ボーレートを適用0️⃣
0x00020000副ポートへ同時出力0️⃣
0x00040000主ポートの切り替え0️⃣
0x00100000中継レイヤを制限0️⃣

オプションビットの詳細

オプションビットの値の各ビットに紐付いた設定を解説します。

00000001M3の内部プルアップを停止

TWELITE DIP におけるスリープ設定用のピン M3 の内部プルアップを停止します。

00000100:送信トリガの有効化

透過モードまたはヘッダ付き透過モードにおいて、送信トリガの設定を有効とします。

00000200:新たな入力系列を優先

書式モード(アスキー・バイナリ)、透過モード、ヘッダ付き透過モードにおいて、送信完了前に複数の系列が入力された際、新しいものを優先します。

00001000:応答メッセージを停止

書式モード(アスキー・バイナリ)、ヘッダ付き透過モードにおいて、送信完了時の応答メッセージを停止します。

00004000:重複チェッカの緩和

受信側において、重複チェッカの条件を緩和します。

00010000:強制的に代替ボーレートを適用

起動時にBPSピンの入力が Low でなくとも、代替ボーレートの設定を適用します。

00020000:副ポートへ同時出力

シリアル出力TXの内容をシリアル副出力TX_SUBにも適用します。

00040000:主ポートの切り替え

シリアル入出力TX/RXとシリアル副入出力TX_SUB/RX_SUBを入れ替えます。

00100000:中継レイヤを制限

書式モード(アスキー・バイナリ)において、ネットワーク層を利用する配送方式を指定した場合に、必ず1階層上位に位置する中継機や親機へ送信させます。通常、ネットワーク層を利用する配送方式では、上位層で最も電波通信品質の高い中継機や親機へ送信します。

中継機能について

通信距離が足りない場合や、障害物があって通信できない場合には、中継機を使用することが有用です。

中継機能を持った端末は、自身が受信したパケットを他の端末へ送信します。

中継機能の設定

通常は、インタラクティブモードへ入った状態で役割の値を1-3へ変更します。初期値は0で、中継機能を持ちません。

r: set Role (0x0)

1-3の数値は最大中継段数を指します。例えば3を指定すると最大3段まで中継されます。

親機子機の区別をする場合、子機のみ有効です。

設定例

次のネットワーク構成は、赤色の端末の役割0、青色の端末の役割3とした場合を示します。

役割の設定による中継の例

役割の設定による中継の例

赤色の端末を追加すると、赤色の端末同士で最大3段の中継を伴う通信を実現できます。

送信機や受信機を追加する例

送信機や受信機を追加する例