ToCoStick(TWE-LITE-USB)を使ってみた
ToCoStickとはTWE-LiteをUSBドングルの形に収めたものです。 詳しくはToCoStick
動作確認の方法
今回これを2台購入したので動作レポートしてみたいと思います。2台ということは当然ながら、やりたいことは2台のPC間をZigBeeで通信させることを行います。つまり「無線シリアル通信」を構築してみるのとほぼ同義です。TOCOSのHPにもかなりの情報はあるのですが、微妙にわかりづらいです(^^;
初めにしておくこと
ToCoStickの初期設定では、下記のLEDやPWMを操作するファームウェアが焼いてあります。このファームは動作確認用なので書き換えちゃいます。USBドングルの形をしていますが、USBシリアルドライバとしてFTDIのシリアルドライバをインストールする必要があります。
ファームウェアの書き換えには専用のソフトが用意されているので、そちらを利用しましょう。 TWE-Lite専用プログラマ
書き換えるファームウェアはApp_Uart (シリアル通信アプリ)です。これを使うとシリアル通信が使えるようになります。購入した2台ともシリアル通信アプリに書き換えます。
起動
USBに接続してTeraTermなどで該当のシリアルポートをオープンします。通信速度は115200です。僕の環境はMacなのでCoolTermを使っています。
シリアルポートをオープンしたら「+++」と入力すると「インタラクティブモード」に入ります。
.[2J.[H--- CONFIG/TWE UART APP V1-00-0/SID=0x81002816/LID=0x00 --- a: set Application ID (0x67720103)* i: set Device ID (--)* c: set Channels (18)* o: set Output Tx Power (3)* r: set Role (0x0)* b: set UART baud (38400)* p: set parity (N)* m: set uart mode (C)* h: set handle name []* C: set crypt mode (0)* K: set crypt key []* --- S: save Configuration R: reset to Defaults
デフォルトのDEVICE IDは未設定(=子機)、UARTモードは「C」なので、「C: チャットモード」となっています。もう一度「+++」と入力するとインタラクティブモードから抜けられます。
チャットモードでの動作テスト
ではデフォルトのチャットモードで動かしてみます。チャットモードは、Enterキーの入力でデータ送信が行われます。
今回同じマシンに2台繋いでいるので、こんな感じです。
[810028A9:1] bbb <--- 受信コード 81002816:1> ccc <--- 送信コード 81002816:2>
送信元には「SID=0x81002816」が付いています。受信する方にも「SID=810028A9」というのが付いていることがわかります。このSIDではわかりにくいということで、これをハンドルネームとして変更できます。先のインタラクティブモードの「h」で名前を付けてみます。変更した後は「S」でセーブし忘れないようにしましょう。
これで少しわかりやすくなりました。
ちょっと問題点が・・・
これで相手に無線シリアルでデータを送ることが出来るのですが、ちょっと問題があります。人間の目で見るにはデータはわかりやすいのですが、受信データを見てみると
[hoge:0] hoge->fuga
となっています。受信データ本体は「hoge->fuga」だけですので、余計な付加情報も受信データとして扱ってしまうことになります。1対1の通信で、ソフトで処理しようとすると、前半の部分は不必要であるばかりではなく、数字の部分がインクリメントされることになっています。0-255と変化するので、先頭から何バイト目からデータとして処理するのも面倒です。せめて000-255とかなら先頭バイトは変化しないのですが・・・
ぜひファームウェアで前半の部分が無い、送受信データのみのバージョンをリリースして欲しいと思います。(※修正バージョン作ってみました)送信元を判別したければ、送信元が自分のハンドルネームを付けて送るなどの仕様を各自が実装すればそれで問題無いですね。
透過モードでの動作テスト
次は透過モードを試してみます。透過モードではEnterキーでの送信ではなく、1文字打つごとに送信するモードです。透過モードにするにはインタラクティブモードでUARTモードで「T」を設定します。
ここで気をつけなければいけないのは、透過モードの場合、必ず1台は「親機」にならないといけないので、どちらか一方の「Device ID」を121に設定する必要があります。
親機の設定
.[2J.[H--- CONFIG/TWE UART APP V1-00-0/SID=0x810028a9/LID=0x00 --- a: set Application ID (0x67720103) i: set Device ID (121=0x79) <-- 121を設定 c: set Channels (18) o: set Output Tx Power (3) r: set Role (0x0) b: set UART baud (38400) p: set parity (N) m: set uart mode (T) <-- 透過モード h: set handle name [fuga] C: set crypt mode (0) K: set crypt key [] --- S: save Configuration R: reset to Defaults
子機の設定
.[2J.[H--- CONFIG/TWE UART APP V1-00-0/SID=0x81002816/LID=0x65 --- a: set Application ID (0x67720103) i: set Device ID (--) c: set Channels (18) o: set Output Tx Power (3) r: set Role (0x0) b: set UART baud (38400) p: set parity (N) m: set uart mode (T) <-- 透過モード h: set handle name [hoge] C: set crypt mode (0) K: set crypt key [] --- S: save Configuration R: reset to Defaults
これで設定すると下記のようになります。
ローカルエコーが出なくなるので、送信元には送信表示がされませんが1文字ごとに送信されるようになります。
まとめ
というわけで簡単ではありますが、ToCoStickの動作確認をしてみました。ToCoStickをdebian/Ubuntuに挿してscreenコマンドでの動作も確認しています。これを使うとUSBシリアルを無線化できるようになるので、色々捗るパターンがありそうです\(^o^)/
もちろんToCoStick同士でなくて、ToCoStickとTWE-Lite DIPでも無線シリアル通信化が可能なので、TWE-Lite DIPに接続したセンサー類のデータを遠隔のPCのシリアルで受信して処理する。ということも簡単にできるのでデバッグにも使えそうです。