Espruino シリアル通信でTWE-Liteの受信コマンドを表示してみる

Espruino Advent Calender 7日目です。
最近TWE-LiteにはまっているのでEspruinoとつなげてみようと思います。
Espruino、TWE-LiteはともにサポートしているUARTで通信してTWE-Liteのデータ通信の様子をのぞいてみようと思います。

完成形

完成形はこんなかんじです。

f:id:bathtimefish:20141207182352j:plain

左側のブレッドボードがTWE-Lite DIP親機、右側が子機です。
子機をEspruinoにつなげて、親機からの受信データコマンドをEspruino IDEに表示しています。

今回つかったパーツ一覧

TWE-Lite DIPは親、子の2台必要です。
親機の電源はたまたま道具箱の中にあったリチウムイオン電池を使いましたが、単3電池2本とかで大丈夫です。
ただしTWE-Liteは3.6V以下でないと動かないので電源は3.6V以下にしてください。
3.6V以上入れると壊れる可能性があります。

親機の組み立て

配線は写真のようにします。

f:id:bathtimefish:20141207171554j:plain

TWE-Lite DIPの仕組みについては長くなるので割愛します。配線はTWE-Lite DIP使用方法初級編TWE-Liteではじめる カンタン電子工作 に書いてあるほぼそのまんまです。PHRコネクタをつけて3.7Vのリチウム電池を電源にしました。
TWE-Liteの動作電圧は3.6V以下なので3.7Vの電池は少しオーバー電圧ですが電池をテスターで測ったらだいたい3.4Vくらいしか出てなかったのでそのまま接続しても大丈夫でした。

子機の組み立て

配線は写真のようにします。

f:id:bathtimefish:20141207173320j:plain

こちらも初級編や本に書いてある子機の配線そのままです。電源はEspruinoからとります。赤いケーブルをEspruinoの3.3とシルクプリントされているピンに挿し、黒いケーブルをGNDと書いてあるピンに挿します。
これでEspruinoからTWE-Liteへ3.3Vの電圧がはいります。間違って3.3のとなりにあるBatには接続しないでください。Batは5VなのでTWE-Liteが壊れます。

TWE-Lite同士が通信できるか試してみる

組み立てたら親機の電池をつなぎ、子機のEspruinoをUSBケーブルでPCと繋げます。
そして、親機のタクトスイッチを押してみます。子機のLEDが点灯したら正常に通信ができています。

f:id:bathtimefish:20141207173901j:plain

シリアル接続する

いったんEspruinoからUSBケーブルをはずして、シリアル通信のためのケーブルを配線します。まず、子機の3番ピン(左下から3番目)の真下のブレッドボードの穴にケーブルを挿します。
次に子機の10番ピン(左下から10番目)の真下のブレッドボードの穴に別のケーブルを挿します。

f:id:bathtimefish:20141207174747j:plain

3番ピンに挿したケーブルをEspruinoのB6ピンに挿します。そして10番ピンに挿したケーブルをEspruinoのB7ピンに挿します。

f:id:bathtimefish:20141207175115j:plain

この2本の配線でUARTの送受信が可能になります。

コードを書く

JavaScriptコードは以下になります。

EspruinoのSerial Class を使います。
Serial1はEspruinoが持つ6つの汎用シリアルポートの内のひとつです。

Serial1.setup()でTWE-Liteとのシリアル接続を設定します。
TWE-Liteのデフォルトの通信設定は、

  • ボーレート(通信速度): 115200bps
  • データ長: 8bit
  • パリティ(データチェックの有無): none
  • ストップビット(区切りの長さ): 1bit
  • フロー制御(送信一時停止を行う機能): none

です。Serial1.setup()の引数にこれらを設定します。
options.tx, options.rxはそれぞれUARTの送受信ピンを指定しています。

Serial1.on()でdataイベントを補足し、コールバック内にTWE-Liteのデータ受信コマンドが返ってきます。
データは分割して受信され、キャリッジリターンが終端になっているので printLine()でデータの断片を処理し1行のデータとして表示しています。
このあたりの処理はEspruinoのUARTのページ を参酌しました。

実行してみる

親機を電池につなぎ、EspruinoをPCとUSBケーブルで接続します。
Espruino IDEを起動し、Espruinoと接続します。
JavaScriptコードをエディタに貼り付け、Espruinoに転送してみましょう。

約1秒間隔でデータがコンソールにデータが表示されます。このデータが子機が親機から受信しているデータです。

TWE-Liteの受信データの例:

:00811501D28100693F001115000D2D1D0101FFFFFFFFFFF4

TWE-Liteの受信データの内容は、このページの「データの読み方」の段で解説されています。
この実験でデータの変化を確認できるのは以下の3点です。

* 受信電波品質(赤文字の部分)
* 電源電圧(青文字の部分)
* デジタル入力(緑文字の部分)

受信電波品質は親機と子機を離したり近づけたりすると変化します。
電源電圧は一定ではないため常に変化します。
デジタル入力は親機のボタンを押すと01、離すと00となります。

まとめ

TWE-Liteたのしいです。省電力でけっこう通信距離が長いし、データの構造もシンプルなので単純なデータの送受信ならすぐできます。
Espruino連動させるといろんな用途のセンサーネットワーク用小型デバイスができそうです。
なによりJavaScriptでそれが実現できるってのがたまりませんね。

f:id:bathtimefish:20141207182352j:plain