Try to use the binary format
App_Uart を書式モードのバイナリ形式で使ってみます。
バイナリ形式では、App_Uart で直接送信したいデータをバイナリ列で入出力できるため、マイコン間通信では取り扱いがしやすくなります。反面、ヘッダやチェックサムなどの計算が必要になります。
簡易的に送信する場合は「チャットモード、プロンプト無し」も利用できます。
最初に基本設定とアスキー形式による動作確認を行います。接続や設定等の問題がある場合、バイナリ形式では出力等を含め確認が難しいためです。
PC(TeraTerm) や macOS, Linux のターミナルソフト(CoolTerm など) を動作可能状態にして、インタラクティブモードによる設定が出来る事を確認しておいてください。
インタラクティブモードに入るには、+ + + と + を3回、一呼吸置きながら (0.2秒~1秒) 入力します。(参考:インタラクティブモードの詳細)
インタラクティブモードで以下の設定を済ませておきます。
親機側は Device ID を 121 (0x79) に設定します。(i を押して 121[Enter] と入力します)
UART Mode を A に設定します。(m を押して A[Enter] と入力します)
S キーを押してセーブ&リセットを実行します。
以下のようなメッセージが出力されます。:DB... は起動時のメッセージで、アプリケーションIDやアドレス情報が含まれます。
アスキー形式での動作を確認します。マイコンで利用される方も、まず Windows PC などでご確認ください。
マイコンなどプログラムからコマンド列が入力されることを想定しており、一定時間入力が無ければ(1000ms)タイムアウトが発生して入力を無効にするようになっています。
このため、コマンド列を入力する際には、ターミナルソフト等のコピー&ペースト機能(TeraTermならAlt+V)などを利用し、タイムアウトしないように入力してください。
なお、インタラクティブモードでは、タイムアウトが発生せず入力毎のエコーバック(入力した文字がターミナルに表示される)とチェックサムが間違えていた時にメッセージが表示できるようになっています。このためキーボードから直接入力しても試せます。
子機から親機にメッセージを送ります。書式モードの簡易形式を用いて親機 (0x00) 宛に、コマンド種別 0x00、データ 0x11, 0x22, 0x33 の3バイトを送信します。末尾の X はチェックサムを省略しています。
受信データは 0x78 からコマンド種別 0x00 でデータ 0x11 0x22 0x33 が届き、チェックサムが 0x22 です。この出力が確認できたら、今度は子機から親機に同様のメッセージを送ってみます。
親子間の簡易通信を確認しました。続いてこれと同じ送受信をバイナリ形式で行ってみます。
バイナリ形式の無線端末とアスキー形式の無線端末は互いに通信が可能です。入出力の書式が違うだけで、無線パケットは同じです。
ここでは親機だけバイナリ形式にしてみます。バイナリ形式での送受信を行うためには、バイナリ対応のターミナルソフトウェアが必要です。バイナリではターミナルソフトごとに操作や表示が異なりますので、よく習熟してください。
参考までに Linux, macOS 対応のターミナルを列挙します。
親機側のインタラクティブモードに入って UART Mode を B に設定します。
UART Mode を B に設定します。(m を押して A[Enter] と入力します)
親機のターミナルソフトウェアを閉じて、バイナリ対応のものを立ち上げてください。
以下では RealTerm の操作例です。
[Port] タブを選択し、Baud を 115200・Port を COM ポートの番号を指定して [Open] ボタンを押します。
[Display] タブを選択し、[Display As] 中から Hex[space] を選択しておきます。
子機からアスキー形式での送信例と同じものを送信してみます。
親機からは 0xA5 0x5A ... に続くデータが表示されます。送信したいデータに簡易書式のヘッダが付加され、さらにバイナリ書式のためのヘッダ・フッタが追加される点に注意してください。
親機、子機双方をバイナリ形式に設定して送受信を試みます。
子機側でもインタラクティブモードに入って UART Mode を B に設定します。
UART Mode を B に設定します。(m を押して A[Enter] と入力します)
子機のターミナルソフトウェアを閉じて、バイナリ対応のものを立ち上げてください。
以下では RealTerm の操作例を示します。
RealTerm を立ち上げます。
[Port] タブを選択し、Baud を 115200・Port を COM ポートの番号を指定して [Open] ボタンを押します。
[Display] タブを選択し、[Display As] 中から Hex[space] を選択しておきます。
子機から親機にデータ送信してみます。
子機側からデータ送信する方法はターミナルソフト毎に操作方法が違います。RealTerm の場合は、以下となります。
[Send]タブを開きます。
[Send Numbers] の2つある入力ボックスのいずれかに 0xA5 0x5A 0x80 0x05 0x78 0x00 0x11 0x22 0x33 0x78 を入力します。
[Send Numbers] ボタンを押します。
親機から子機へデータ送信してみます。
データ形式
バイト数
解説
ヘッダ
2
0xA5 0x5A
データ長
2
0x8000 + 続くデータ長 この例では0x80 0x05 で5バイト
データ部
5
データ部で、あて先情報等のヘッダおよび送信したいデータが含まれる。 ・例は簡易形式で子機宛に 0x11 0x22 0x33 を送信します。 0x78 0x00 0x11 0x22 0x33 0x78 ⇒ 送信元アドレス(簡易) 0x00 ⇒ コマンド種別 (0x00 は特別な意味は無い) 0x11 0x22 0x33 ⇒ 送信したいデータ
フッタ・チェックサム
1
データ部の前バイトのXORとなります。 ・0x78 xor 0x00 xor 0x11 xor 0x22 xor 0x33 = 0x78
フッタ・終端
1
0x04 出力時には 0x04 が付加されるが入力時には不要
元データのバイト数 | 表現形式におけるバイト数 | 解説 |
ヘッダ | 2 | 0xA5 0x5A を指定します。 |
データ長 | 2 | データ長はビッグエンディアン形式の2バイトで、MSB (0x8000) を設定した上、データ部の長さを指定します。 例えばデータ部の長さが 8 バイトなら 0x8008 を指定します。 |
データ部 | N | N | 元データを指定します。 |
チェックサム | 1 | データ部の各バイトの XOR を計算します。 例えばデータ部が 00A01301FF123456 なら 0x00 xor 0xA0 xor ... 0x56 = 0x3D となります。 |
フッタ | (1) | チェックサムが事実上の終端です。無線モジュールからの出力では 0x04 (EOT) が付加されます。 |