TWELITEを使ってみた(その4)

皆さんこんにちは!
今回が「TWELITEを使ってみた」の最終回になります。今まではTWELITE DIPのIO状態を制御したり監視したりと言った事を行ってきましたが、今回は親機(MONOSTICK)と実験基板(TWELITE DIPが載っています)の間でデータ通信(文字列のやりとり)の実験を行ってみたいと思います。

データ通信例
データ通信例

IoTの場合、センサのデータをホストに送ったり、ホストからの指示で端末に接続された機器を作動させたりする事が多いと思います(今までのデータ収集/制御の実験)。しかし、単なる数字(1,0とかアナログ値)以外にもホスト-端末間では何等かのメッセージを送りたい場合も有ると思います。この様な時は文字列を送れる機能が有ると便利です。例えばホームオートメーションのシステムで、エアコンのスイッチを入れる時は”AIRCON_ON”とか。数値化してもシステム的には一向に構わないのですが、流れている電文を人が確認したり、ログに取って置く時など後で確認しやすくなります。IoT化は正常稼働時の効率だけでなく開発時の効率化、不具合が発生した時に原因を追跡しやすくするとか、メンテナンス性を向上させるとかトータルでの効率を考える必要があります。
こちらにはIoT化のヒントになりそうなことを書いています。参考になさってください。

今回は標準搭載されているアプリでのデータ通信の実験と、専用のデータ通信アプリをインストールし直しての実験を行います。

組込開発.comのバナー

準備

1.用意するもの

実験に必要な物はTWELITEを使ってみた(その3)と同じですが、以下に書きだします。
MONOSTICK 1台

MONOSTICK
MONOSTICK

TWELITE DIP用実験回路 1台(回路の詳細はここをクリック)

TWELITE DIP用実験回路
TWELITE DIP用実験回路

USB-シリアル変換ケーブル(3.3V用) 1本
基板に接続する側はインターフェース電圧が3.3Vの物。

USB-シリアル変換ケーブル
USB-シリアル変換ケーブル

TWELITE R2-トワイライター2
現在発売されている書き換え機は「TWELITE R2-トワイライター2」ですが、以前に発売されていた「TWELITE R-トワイライター」も使えます。

TWELITE R2-トワイライター2
TWELITE R2-トワイライター2

・USBケーブル(Type C)
「TWELITE R2-トワイライター2」をPCに接続するために必要です。「TWELITE R-トワイライター」にはマイクロUSBが使われていましたが、「TWELITE R2-トワイライター2」ではType Cのコネクタに変更となっています。注意してください。「TWELITE R-トワイライター」をお使いの場合はマイクロUSBのケーブルをご用意ください。

USBケーブル(Type C)
USBケーブル(Type C)

・TWELITE STAGE-トワイライトステージ 一式

・PC 2台(1台)
MONOSTICK側と実験基板両方に必要ですが、1台のPCにMONOSTICKとUSB-シリアル変換ケーブルの両方を挿してPCは1台で実験されてもOKです。

・PC用ターミナルソフト(TeraTermなど)

2.事前設定

MONOSTICKには親機用アプリである「親機・中継機アプリ(App_Wings)」が、TWELITE DIPには「超簡単!標準アプリ」がインストールされていると思いますが、別のものが入っている場合は「TWELITEを使ってみた」の(その2)、(その3)を参照して上記アプリを書き込んで下さい。また、TWELITE DIPはTWELITE STAGE-トワイライトステージのインタラクティブモードを使って1秒毎の定期送信をしないように設定してください。この方法も「TWELITEを使ってみた」の(その3)に記載が有ります。
TWELITE DIP用実験回路のジャンパーピン(M1~M3)は全てGNDと短絡しないよう、開放にしておいてください。
以上で準備は完了です。

実験

それでは実験を始めます。

1.標準アプリを使った実験

冒頭にも説明しましたが、MONOSTICK及びTWELITE DIPに予めインストールされているアプリでもデータ通信が可能です。先ずはこれを使って実験してみましょう。

データ通信を行う場合の電文フォーマットについてモノワイヤレス様のWebページに解説があります。その資料に基づいて親機(MONOSTICK)より子機TWELITE DIP)に「Hello!」と言う文字を送った場合の電文と、そのフォーマットの解説を以下にします。
電文例「:780148656C6C6F2172」

データ意味
「:」電文の先頭を示します。
「78」宛先の論理デバイスIDを示します。(子機)
「01」任意データの送受信を行うコマンドを示します。
「48」データの中身(H)
「65」データの中身(e)
「6C」データの中身(l)
「6C」データの中身(l)
「6F」データの中身(o)
「21」データの中身(!)
「72」チェックサム。チェックサムは「78」以降のデータを1バイト単位で足し合わせ、下位8ビットの反転を取った物になります。
任意データ送受信の電文フォーマット

TWELITEの場合、1回当たりの無線通信で送れるデータは80バイトとの事ですが、これを超えるデータを送っても自動的に分割して相手方に届けてくれるそうです。但し概ね800バイト(10回分)までにした方が良いようです。これを超えると通信の頻度が高まり、通信に失敗する可能性も高くなってくるためで800バイトを超えるデータを送る事は推奨していないようです。
では実際に上で例にあげた電文を送ってみましょう。

(1)MONOSTICK(親機側)の接続
MONOSTICKをPCに挿し、TeraTermを立ち上げてください
TeraTermの設定は以下のとおりです。

TeraTermの端末設定
TeraTermの端末設定
TeraTermのシリアルポート設定
TeraTermのシリアルポート設定

(2)TWELITE DIP用実験回路(子機側)の接続
TWELITE DIP用実験回路にUSB-シリアル変換ケーブルを挿し、USBコネクタをPCに接続してください。
また、TeraTermも立ち上げてください。

(3)電文例の電文をMONOSTICK側のTeraTermから送ります。
前回も説明しましたとおり、電文の入力には文字間の時間制限が有りますので、TeraTermのブロードキャストコマンド機能を使ってください。
以下に結果の画面を示します。画面左側が送出元のMONOSTICK側で、右側が受信側のTWELITE DIP用実験回路側です。

親から子への電文例

親から子へ電文が届きました。送出側はコロン(:)の次は宛先である「78」になっていますが、受信側ではコロンの次が「00」になっていて、送信元の論理デバイスIDに変わっています。また、これに伴ってチェックサムも「72」から「EA」に変わっています。

これで正しくデータが送れることが確認出来ましたが、人が見ると随分味気ないし、何が何だかわかりませんね。マイコン同士でデータをやり取りする場合はこの方法は良く使われますが(以前紹介したインタープラン様のIM920シリーズも同様な方法でデータ通信を行っています。)人間が使うには難解です。では次にMONOSTICKとTWELITE DIPのアプリを書き換えてもう少し便利に使えるようにしてみましょう。

2.シリアル通信アプリを使った実験

標準アプリを使った実験では人間が直感的に判る文字では無く、キャラクターコードを使った通信でした。データをキャラクターコードに変換して送ると、’A’,’B’,’C’の様な文字以外の制御コードと言われるものも文字化して送れますので便利な点は有りますが、モノワイヤレス様では別にシリアル通信アプリを用意しており、これを使うと人間が直感的に判る様な形でも通信が出来ます。
先ずはMONOSTICK、TWELITE DIP両方にこのアプリ(App_Uart)を書き込みます。書き込みはTWELITE STAGE-トワイライトステージ、TWELITE R2-トワイライター2を使って行ってください。

(1)MONOSTICK、TWELITE DIP用実験回路の両方をPCに接続してTeraTermを立ち上げてください。
立ち上げ後、両方の回路のリセットをかけると以下の様な画面になると思います。(MONOSTICKのリセットスイッチはUSBコネクタ近くの小さな穴の中に有ります。TWELITE DIP用実験回路にはリセットスイッチが付けてありますので、これを押してください。)

App_Uart初期画面
App_Uart初期画面

左側がMONOSTICKに接続したTeraTerm、右側がTWELITE DIP用実験回路に接続したTeraTermです。両方LID=0x78となっているので、(App_Uart)には親、子の概念は無いようです。

App_Uartをインストールすると、デフォルトでは「チャットモード」になっていて、上の画面の様にプロンプトの左側に自身のIDが表示されます。またこのモードではアプリ内でエコーバックを返してくるので、TeraTermの端末の設定の中に有る「ローカルエコー」のチェックボックスを外して下さい。App_Uartには、この他に「透過モード」と「書式モード」が有ります。

ローカルエコーのチェックを外す
ローカルエコーのチェックを外す

App_Uartではアプリ内でエコーを返す(自分が送った文字を送り返してくる)ので、TeraTerm自身での表示(ローカルエコー)は行わない設定にします。
また、チャットモードでは文字間の入力時間制限は有りませんので、ブロードキャストコマンドを使わずに直接入力が出来ます。

(2)データを送ってみる
準備が出来たので実際にデータを送ってみます。日本語も送れるようですので試してみましょう。先ずはMONOSTICK側のTeraTermから送ります。

MONOSTICKから送信
MONOSTICKから送信

MONOSTICKから送信した内容がTWELITE DIP側に届きました。メッセージの左側には送り主のID(SID)が記載されています。

(3)TWELITE DIP側からデータを送ってみる
引き続き、TWELITE DIP側からもデータを送ってみましょう。

TWELITE DIPからの送信
TWELITE DIPからの送信

続いてTWELITE DIPからも送信しました。ID付きで正しく表示されています。

App_Uartのチャットモードでは、送り主名も表示され、日本語も使える事から人と人がやりとりするには便利なツールになります。一方、マイコン同士でやり取りするにはエコーバックやプロンプトの表示など、「余分な物」が付いてくるので邪魔になる事があります。そこで使われるのが「透過モード」です。
MONOSTICKとTWELITE DIPをインタラクティブモードに入れて「チャットモード」から「透過モード」に変更してみましょう。
「透過モード」では、「チャットモード」と違い、文字と文字を打ち込む間の時間に制限が有ります。人間が手で打ち込んでいたら途中で送信されてしまいます。よって、TeraTermのブロードキャストコマンドを用いて一気に送出することによりタイムアウトを回避します。先ずはTWELITE STAGE-トワイライトステージを使って設定を変更しましょう。

(4)「透過モード」への変更
TWELITE STAGE-トワイライトステージを使い、MONOSTICKとTWELITE DIPをインタラクティブモードに入れて「チャットモード」から「透過モード」に変更します。ここでは代表例としてMONOSTICK側の画面を示します。

モード変更前
モード変更前

透過モードに変更する前のインタラクティブモード画面です。mの「set UART mode」が(C)となっており、チャットモードに設定されていることが判ります。

mキーを押すとモード変更のメニューが出てきます。(下図)

mキー押下後のメニュー

mキーを押すとモードの設定画面が出ますので、(大文字の)「D」+エンターを押して透過モードに変更します。

透過モードに変更すると以下の画面になります。

透過モードに変更
透過モードに変更

透過モードに変更されましたのでm: set UART modeの脇のかっこ内がCからDになりました。また、変更された事を示すマークが付いています。

透過モードでは送信トリガーを設定する必要が有ります。これは
・何文字入力されたら送信するか、とか
・何の区切り記号(CRとかLFとか)が入力されたら送信するか、
・何mS文字間の時間が空いたら送信するか
の、設定を行う物です。
ここでは区切り文字としてLF(0x0a)、文字数の制限は無効(0)、文字間のタイマーは100mS(100)に設定します。「k」を押して設定モードに入ります。

送信トリガーの設定
送信トリガーの設定

「k」を押すと、先ほどと同様に設定メニューが出てきますので、ここで「0a,0,100」を入力し、エンターキーを押します。

設定変更後画面
設定変更後画面

設定が変更された箇所にマークが付いています。最後に(大文字の)「S」を押して変更した設定を保存します。
保存が完了するとトップ画面に戻りますので終了し、もう一方の設定も変更してください。

(5)透過モードでの実験
設定を変更し、MONOSTICK側、TWELITE DIP側の両方を立ち上げてTeraTermを接続すると以下の様な画面になっています。

透過モードで立ち上げた状態
透過モードで立ち上げた状態

チャットモードと違い、画面には何も出ていません。

透過モードでは文字間での時間制限が有りますのでTeraTermのブロードキャストコマンドを使います。
では、入力ボックス内に「MONOSTICKから送信」と入力し、COM23を選択してから送信ボタンを押してみましょう。

透過モードでMONOSTICKから送信した例
透過モードでMONOSTICKから送信した例

チャットモードとは違い、シンプルに入力した文字だけが相手方に出力されました。

逆に、TWELITE DIPから送信した例です。

TWELITE DIPから送信
TWELITE DIPから送信

今度はMONOSTICK側に文字が現れました。透過モードでは余計な物が一切付いてこない為、送信するデータのフォーマットに自分のIDや送信先のIDなどを予め含めておく必要が有ります。

以上の様にモードによって一長一短があります。人が介在するならチャットモード、機械同士でやり取りをするなら透過モードが便利だと思います。
App_Uartにはもう一つ「書式モード」と呼ばれるモードが有りますが、こちらは標準アプリで実験した内容に近いので割愛します。(電文の頭に「:」を付けて最後にチェックサムを使っているなど、かなり似ています。)

全4回にわたりTWELITEの実験を行ってきました。簡単な周辺回路を組むだけで色々な事が出来、手ごろな価格で使える物です。是非実験を行って頂きたいと思います。
無線モジュール.comでは無線モジュールを利用した様々な提案・開発を行っております。こちらのページには無線化の際のヒントを載せています。

開発実績はこちらに掲載してあります。是非ご覧になってください。