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

皆さんこんにちは!
今回もモノワイヤレス様のTWELITEですが、前回は標準で用意されているアプリを使ってPCからMONOSTICK経由で実験基板を制御したり、データを収集したりしました。

コマンダー画面

マイコンやPCを使って制御/監視をするにはTWELITEから送られてくる文字列(=電文と言います。これはアスキーコードの文字列で来ます。)の構成を理解しておく必要が有ります。一般的なIoTシステムでも、センサーから送られてきた信号は殆ど数値データですが、これは人が読んでも判る様にアスキーコード化されて送られてきます。例として、10進数の255を送って来る時は0xFFと言う1バイトのコードでは無く、0x32,0x35,0x35の様に3バイトをかけて送って来る場合が多いです。こうするとターミナルソフトなどで見た時に人が見ても判りやすいうえに制御コード(改行コードとか)と間違える心配も無いからです。よって、少し手間がかかりますが電文の内容をTWELITEを例に解説してみたいと思います。

IoTについてもっと知りたい人はこちらをご覧になってください。IoT化のヒントを書いてあります。


今回も説明は、
 ・用意するもの
 ・事前設定
 ・実験
の順に進めて行きます。

組込開発.comのバナー

準備

1.用意するもの

TWELITEを使ってみた(その2)で用いた実験機材の他、以下のものを用意してください。MONOSTICK及びTWELITE DIPに搭載されているアプリは前回と同様に親機・中継機アプリ(App_Wings)及び超簡単!標準アプリがインストールされている前提です。

TWELITE R2-トワイライター2
TWELITE DIPに搭載されているアプリ(超簡単!標準アプリとか)を書き換えたり、各アプリの設定内容を変更するために必要です。

トワイライター2
トワイライター2

(モノワイヤレス様の製品紹介ページより抜粋)
TWELITE R2-トワイライター2はTWELITE DIP – トワイライトディップ、TWELITE PAL – トワイライトパルにUSB接続するためのアダプターです。パソコンからUSB接続でTWELITE DIP/PALと通信することができます。アプリの設定と書き込み時に使用します。
(抜粋終わり)
ちなみに、現在発売されている書き換え機は「TWELITE R2-トワイライター2」ですが、以前に発売されていた「TWELITE R-トワイライター」も使えます。

・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-トワイライトステージ 一式
MONOSTICK、TWELITE DIPに搭載されているアプリの書き換えや設定の変更に必要です。前回の実験時に準備されていると思いますが、この記事から読まれている方は前の記事を参考にしてインストールしてください。

・PC 2台(1台)
「TWELITE STAGE-トワイライトステージ」を動かす為及びターミナルソフトを動かすために必要です。MONOSTICK側と実験基板側両方に必要ですが、同じPCにMONOSTICKとUSB-シリアル変換ケーブルの両方を挿せば1台でもOKです。

・PC用ターミナルソフト(TeraTermなど)
TWELITEに電文の文字列を入力して相手方を制御する場合、文字と文字を入力する間の時間に制限が有るようです。モノワイヤレス様のWebページによりますと、文字を打ち込む間の時間が約1秒を超えますとタイムアウトしてしまいますので、文字列を作成した後に一気に送り込む事が必要です。一般的にはコピー&ペーストで出来ると思います。TeraTermの場合は「ブロードキャストコマンド」と言う機能があり、この中で文字列を作成後、一気に送出する事が出来ますので、今回はこの機能を用いて実験したいと思います。

2.事前設定

前回の実験で、コマンダーやビューアを使った実験を行いましたが、この時にはコマンダーやビューアの操作画面とは違うもう一方の画面に沢山文字列が出ていたと思います。(以下の画面)

定期通信の例
定期的な通信で左側の画面は溢れている

「超簡単!標準アプリ」では、入力状態に変化が有った時と、定期的(約1秒)に状態を送信しますので、ターミナルソフトから電文を送っても、ある一定時間が経過すると定期的に送信されたデータで押し出されてしまいます。

定期的な送信がちょっと目障りですので、TWELITE STAGE-トワイライトステージとTWELITE R2-トワイライター2を使ってTWELITE DIPにインストールされている「超簡単!標準アプリ」のオプションビットの設定を変更し、定期的な送信を行わないようにします。MONOSTICK側は親機用アプリ(親機・中継機アプリ(App_Wings))がインストールされていますので対象外です。

2-1.定期送信の無効化
TWELITE STAGE-トワイライトステージのインタラクティブモードを使って定期送信を無効化します。
(1)TWELITE DIPをTWELITE R2-トワイライター2に挿します。
この時TWELITE DIPの基板にある切り欠きとTWELITE R2-トワイライター2の基板にある切り欠きの向きが一致するように挿します。

TWELITE DIPの切り欠き
TWELITE DIPの切り欠き
TWELITE R2の切り欠き
TWELITE R2の切り欠き
切り欠きを合わせてセット
切り欠きを合わせてセット


(2)TWELITE R2-トワイライター2をUSBケーブルを使ってPCに接続します。

TWELITE R2-トワイライター2にUSBケーブルを接続

TWELITE R2-トワイライター2のコネクタはType Cのため、表裏は有りません。確実に差し込んでください。PC側も挿します。

(3)TWELITE STAGE-トワイライトステージを起動します。
TWELITE STAGE-トワイライトステージを起動し、シリアルポートを選択したら3の「インタラクティブモード」をクリックします。クリックすると以下の左下の画面に変わります。「Enter」の部分をクリックすると右下の画面になります。

インタラクティブモード起動画面
インタラクティブモード起動画面
インタラクティブモード初期画面
インタラクティブモード初期画面

(4)オプションビットの書き換え
オプションビットを書き換えて1秒毎の定期送信を無効にします。オプションビットの細かい設定に関してはモノワイヤレス様のWebページのこちらに記載されています。
定期送信を無効にするにはオプションビットを「00000002」に設定します。
具体的には初期画面から(小文字の)「o」を入力するとオプションビットの入力画面になります。そこに「00000002」を入力し、エンターキーを押します。すると指定した値が書き込まれ、インタラクティブモードの初期画面に戻ります。この時、「o: set Option Bits」の隣のカッコの中が書き換えた内容になっている事を確認してください。

オプションビット書き換え後
オプションビット書き換え後

オプションビットを書き換えたので、「o: set Option Bits」の脇のカッコの中身が「00000000」から「00000002」に変わっていて、変更されたことを示すマークが付いています。

(5)オプションビットの記憶
先の操作では変更内容が未だ記憶されていません。(大文字の)「S」を押して記憶させる必要があります。記憶が完了するとTWELITE STAGE-トワイライトステージの初期画面(下図)に戻ります。これでオプションビットの変更が完了しました。

トワイライトステージ初期画面
トワイライトステージ初期画面

オプションビットの変更が完了すると初期画面に戻ります。右上の「×」をクリックしてWELITE STAGE-トワイライトステージを終了してください。

2-2.子機側の設定
TWELITE DIP用実験回路は、前回の実験でも設定したようにM1~M3が「子機:連続」の設定になっている必要があります。念のため設定方法を再掲します。

「子機:連続」モードの設定
「子機:連続」モードの設定

左の写真の様にM1~M3の全てのジャンパーソケットをGNDと短絡しないようにずらして挿し、「子機:連続」モードに設定します。

実験

それでは実験を始めましょう。

1.相手端末からの状態通知内容解析

先ずは実験基板から来る電文を解読しましょう。

(1)MONOSTICKをPCに挿し、TeraTermを立ち上げます。
ポート番号が判らない場合はデバイスマネージャーでCOMポートの番号が確認出来ます。このポート番号でTeraTermを開きます。ポート番号以外の条件は以下のとおりです。

MONOSTICK端末設定
端末設定
MONOSTICKシリアルポート設定
シリアルポート設定

(2)実験基板にTWELITE DIPを挿し、USB-シリアル変換ケーブルを挿します。
この時挿し込む向きを間違えないよう注意してください。両方挿したらUSBコネクタをPCに挿し、TeraTermを(もう一つ)立ち上げてください。端末設定、シリアルポート設定はCOMポート番号以外MONOSTICKと同じです。
MONOSTICK/子機用のTeraTerm画面を並べると以下の様になっていると思います。(左がMONOSTICK用、右が実験基板用です)

MONOSTICKと実験基板接続直後の画面

前回の実験では約1秒間隔の定期送信が行われていたため、接続後に電文が出てきていましたが、オプションビットの変更により、定期送信を無効にしたので、待っていても何も出てきません。

(3)実験基板のDI1のスイッチを押して離す。
TWELITE DIP実験基板上のDI1のスイッチを一回押して離して下さい。以下の画面の様に変化したと思います。定期送信を無効にしたことにより、変化の有った時だけ送信するようになっていますので、スイッチを押した時と離した時の2回分電文が送信されています。

DI1を押して離した時
DI1を押して離したとき(画像をクリックすると拡大します)

(4)DI1を押した時の文字列
DI1を押した時には「:78811501C082010FF4002F83000CF41A01015EFFFFFFFC86」が、送られて来ています。この内容を一つずつ確認します。

データ意味
「:」電文の先頭を示します。
「78」送信元の論理デバイスIDを示します。「78」は16進数の「78」で、子機を表します。
「81」コマンドを表します。「81」はIO状態の通知を意味します。
「15」パケット識別子。アプリケーションIDから生成されます。
「01」プロトコルバージョンを示します。(01固定)
「C0」LQI値と呼ばれる電波の強さに応じた値。0xFFが一番強く、0x00が一番弱い。
「82010FF4」送信元の個体識別番号。TWELITE STAGE-トワイライトステージでインタラクティブモードに入れた時に「SID」と表示されている部分です。
「00」宛先の論理デバイスID。「00」なので親機宛てになります。
「2F83」タイムスタンプ。モノワイヤレス様のWebページには「秒64カウント」との記載が有りますので、1秒間に数値が64進むタイムスタンプとなります。無線通信の場合、中継が入ると先に送ったデータが後から届く事も有り得ます。このため、タイムスタンプを用いてどちらが最新のデータなのかを判断します。タイムスタンプには2バイトが充てられていますので、0~65535まで数える事が出来ます。1秒間で64進むとしても1024秒の間は同一のタイムスタンプが来ることはありませんので、通常の中継程度での遅れでデータの順序が入れ違う事を防ぐ事が出来ます。
「00」中継フラグ。宛先に到達するまでに何回中継されたかを示すものです。この例では直接子機から宛先(親機)に届いているので0回です。
「0CF4」電源電圧を示します。mV単位で表した値になっています。この例での「0x0CF4」は10進数で「3,316」なので3.316Vが観測されています。
「1A」ここは未使用です。
「01」DIの状態を表す部分です。DI1~DI4が其々LSB~下位4ビット目に割り当てられています。16進数で表すと、DI1=0x01、DI2=0x02、DI3=0x04、DI4=0x08と、なります。数字の”1″が論理的なオンレベルになります。(ハード上の電気的レベルではLowです。)よって、この場合の「01」は、DI1のみがオンと言う意味になります。
「01」DIの変更状態ビット。DIの変更を許可するビットです。DI1~DI4に対して変更が許可となっていなければ、DIの状態を表すビットが以前の値と違っていても変更が許可されていないのでポートの出力は変わりません。ビットとポートの対応は先の物と同じです。
「5EFFFFFF」AI1~AI4のAD変換値。2桁ずつ(1バイトずつ)先頭からAI1、AI2、AI3、AI4に対応しています。今回AI以外は電源に接続して未使用としているのでAI2~AI4には未使用を示す「FF」が格納されています。
「FC」AI1~AI4の補正値。LSB側からの2ビットずつ、AI1用、AI2用、AI3用、AI4用の補正値となっています。先述のとおり、AI2~AI4は未使用のため「11」が格納されています。AI1用の補正値は「00」に、なっています。
AI1に印加されている電圧は、先の「5E」と合わせて計算すると1.504Vとなります。実験基板上のAI1の電圧を実測すると1.495Vで有ったので、中々精度良く変換されています。
電圧値の計算式は、電圧=(AIxの変換値×4+AIxの補正値)×4(mV)と、なります。
「86」最後の「86」はチェックサム値です。先頭の「78」から1バイトずつ足し合わせた結果の下位8ビットの反転を取ったもの。これが一致しなかった場合は通信路でエラーが有ったと考えられますので、受信データは使えません。また、送信したデータのチェックサムに異常が有った場合は相手方機器は動作しません。
電文の構成

以上の様に、電文の中身を紐解くと結構大変です。しかし、TWELITEをセンサーとして使い、マイコンでデータ処理を行うには、このフォーマットを正しく理解しておく事は重要です。マイコンなどのソフトは一度作ってしまえば流用も出来ますので、大変なのは最初だけです。
リアルタイムでの処理は無理ですが、決まった長さの電文ですので、エクセルで文字列を抜き出して状態を視覚的に判りやすくする事も出来ます。
以下の例はエクセルを使って電文の内容を解析した結果です。こうする事によって人が見ても判りやすくなります。

解析する電文「:78811501C082010FF4002F83000CF41A01015EFFFFFFFC86」

項目
送信元論理デバイスID78
コマンド81
パケット識別子15
プロトコルバージョン01
LQI値C0
送信元個体識別番号82010FF4
宛先論理デバイスID00
タイムスタンプ2F83
中継フラグ00
電源電圧(mV)3316
DI1状態ON
DI2状態OFF
DI3状態OFF
DI4状態OFF
DI1変更可能ビットEnable
DI2変更可能ビットDisable
DI3変更可能ビットDisable
DI4変更可能ビットDisable
AI1電圧値(mV)1504
AI2電圧値(mV)OFF
AI3電圧値(mV)OFF
AI4電圧値(mV)OFF
チェックサム86
エクセルを使った電文解析結果

2.電文を作成して相手端末を制御する

今度は相手端末を制御するための電文を作成し、実験基板上のDOに接続したLEDの点灯/非点灯を制御したり、PWM1出力に接続したLEDの明るさを変えてみましょう。
相手端末の出力変更を行うための電文の構成は以下の様になっています。以下の電文を例に説明します。

電文例「:788001030F0030FFFFFFFFFFFFCB」

データ意味
「:」電文の先頭を示します。
「78」宛先の論理デバイスIDを示します。「78」は16進数の「78」で、子機を表します。
「80」相手端末の出力を変更するコマンドを示します。「80」固定です。
「01」書式バージョンを示します。「01」固定です。(将来の拡張のため)
「03」IO状態を示します。この1バイトのビット列のMSB側をb7、LSB側をb0とした場合、
b3=DO4
b2=DO3
b1=DO2
b0=DO1
に相当し、1の立っているビットのDOがオン(Low)になります。この例ではDO1とDO2がオンになっています。
「0F」IO状態設定マスクを示します。先のIO状態と同様なビットの並びになっており、0の立っているビットは変更の対象になりません。この例ではDO1~DO4の変更が許可になっています。
「0030」PWM1の設定値です。範囲は0(0x0)~1024(0x400)で、デューティ比が0%~100%になります。「0xFFFF」はPWMを設定しないとなっています。(実際に実験してみると「0xFFFF」を設定した時は前の状態を維持しているように見えます。)
「FFFF」PWM2の設定値です。設定内容はPWM1と同じです。実験基板では未使用としていますので「0xFFFF」を設定しています。
「FFFF」PWM3の設定値です。設定内容はPWM1と同じです。実験基板では未使用としていますので「0xFFFF」を設定しています。
「FFFF」PWM4の設定値です。設定内容はPWM1と同じです。実験基板では未使用としていますので「0xFFFF」を設定しています。
「CB」チェックサムになります。「:」を除いたデータを1バイト単位で加算し、下位1バイトのデータに対して2の補数を取った物になります。チェックサムを省略し、代わりに「X」を入れても良いようです。
相手端末の出力変更用電文

以上の内容を踏まえて幾つか例を試してみましょう。先に説明しましたとおり、電文の入力には時間制限が有ります。TeraTermのブロードキャストコマンド機能を使えば一旦電文を(ゆっくり)入力した後に一気に送信出来ます。(下図)

ブロードキャストコマンド画面
ブロードキャストコマンド画面

TeraTermのブロードキャストコマンド機能。送信のボタンの左側のボックスに電文を入力した後、送りたい端末を選択して送信ボタンを押せば一気に電文が送信されます。この実験ではCOM23をクリックすると色が変わりMONOSTICK側が選択されます。

(1)実験基板(子機設定)のDO1=点灯、DO2=非点灯、PWM1=100%の例
この例の電文は「:788001010F0400FFFFFFFFFFFFF9」に、なります。実際の動作写真は動作例1のとおり。

(2)実験基板(子機設定)のDO1=非点灯、DO2=点灯、PWM1=10%の例
PWM1の設定値は、100%で1024(10進)ですので、10%は大体102(10進)=0x66(16進)と、なります。
この例の電文は「:788001020F0066FFFFFFFFFFFF96」になります。動作写真は動作例2になります。

動作例1
動作例1
動作例2
動作例2

この実験ではTWELITE DIP実験基板の側にもTeraTermを接続しましたが、画面には何も出てきませんでした。MONOSTICK側から送信した電文が表示されるかと考えてTeraTermを繋いだのですが、そのような機能は無いようです。(なので、TeraTermの画面は載せませんでした。)
以上の様に、電文の構成に従って文字列を組み立てれば相手方の出力端子を制御出来る事が確認出来ました。前回はコマンダーと言うアプリを使って実験基板を制御しましたが、この様に文字列を送出する事によっても制御が出来ますので、マイコンを用いて何かのオートメーション化をすることも容易に出来ます。チェックサムの計算などもマイコンは得意ですので、色々活用出来るのではないかと思います。
ちなみに、手動で電文を作成する場合はチェックサムの計算が一番厄介になるかと思いますが、win10に付属の電卓はプログラマー電卓と言うモードが有って16進数の足し算、引き算が出来ます。これを使って計算すると少し楽にチェックサムを計算することができます。

今回の実験はここまでです。次回はTWELITEを使ってデータ(文字)通信の実験を行いたいと思います。
無線モジュール.comでは無線モジュールを利用した様々な提案・開発を行っております。こちらのページには無線化の際のヒントを載せています。


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