Raspbian資料一覧

Raspberry Pi 3とMONOSTICKを使ってTWE-LITE-2525A(加速度センサー内蔵無線タグ)からデータを読み取る

2016/12/17更新

対応バージョン: Raspbian Jessie Lite - September 2016

Raspberry Pi 3のUSB端子に無線PANモジュールのMONOSTICKを差し、加速度センサー内蔵無線タグのTWE-LITE-2525Aと通信させることでセンサーデータを簡単に読み取ることができるのでその手順を示す。

TWE-LITE-2525A組み立て

まずTWE-LITE-2525Aを組み立てる。購入時は左のように分割状態で梱包されているので2枚を重ねてボタン電池を入れ右のようにする。

MONOSTICK認識

続いてMONOSTICKをRaspberry Piから使えるようにする。

MONOSTICKをRaspberry PiのUSB端子に差し込むと標準のUSBドライバで認識され、/dev/ttyUSB0が作られる。

% sudo journalctl -f
12月 09 01:21:02 p1 kernel: usb 1-1.4: new full-speed USB device number 5 using dwc_otg
12月 09 01:21:02 p1 kernel: usb 1-1.4: New USB device found, idVendor=0403, idProduct=6001
12月 09 01:21:02 p1 kernel: usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
12月 09 01:21:02 p1 kernel: usb 1-1.4: Product: MONOSTICK
12月 09 01:21:02 p1 kernel: usb 1-1.4: Manufacturer: MONOWIRELESS
12月 09 01:21:02 p1 kernel: usb 1-1.4: SerialNumber: MWEJJQG
12月 09 01:21:03 p1 kernel: usbcore: registered new interface driver usbserial
12月 09 01:21:03 p1 kernel: usbcore: registered new interface driver usbserial_generic
12月 09 01:21:03 p1 kernel: usbserial: USB Serial support registered for generic
12月 09 01:21:03 p1 kernel: usbcore: registered new interface driver ftdi_sio
12月 09 01:21:03 p1 kernel: usbserial: USB Serial support registered for FTDI USB Serial Device
12月 09 01:21:03 p1 kernel: ftdi_sio 1-1.4:1.0: FTDI USB Serial Device converter detected
12月 09 01:21:03 p1 kernel: usb 1-1.4: Detected FT232RL
12月 09 01:21:03 p1 kernel: usb 1-1.4: FTDI USB Serial Device converter now attached to ttyUSB0

% lsusb
Bus 001 Device 005: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Bus 001 Device 004: ID 0411:01ee BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM2 Wireless LAN Adapter [Ralink RT3070]
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

% ls -l /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 12月  9 01:21 /dev/ttyUSB0

見て分かるとおり/dev/ttyUSB0にアクセスできるのはrootユーザあるいはdialoutグループに属するユーザのみであるが、デフォルトのpiユーザは最初からdialoutグループに属しているので特に何も設定しなくてもこのデバイスが使える。

もしdialoutグループに属していないユーザでこのデバイスを使用したい場合は以下のようにして対象ユーザをdialoutグループに追加する。

% sudo gpasswd -a <user> dialout

MONOSTICK接続

MONOSTICKがRaspberry Piで認識できたらcuコマンドを使ってシリアル通信を行ってみる。

% sudo apt install cu

cuコマンドの引数としてボーレートを115200、接続先を上記で作成されたUSBデバイスにする。

% cu -s 115200 -l /dev/ttyUSB0
Connected.

接続されたら「+」を3回入力するとメニューが出るので接続されたことが確認できる。「+」を素早く入力するとキーが認識されない場合があるのでゆっくり入力する。

--- CONFIG/MONO WIRELESS TWELITE DIP APP V1-08-1/SID=0x810e0964/LID=0x00 ---
 a: set Application ID (0x67720102) 
 i: set Device ID (121=0x79) 
 c: set Channels (18) 
 x: set Tx Power (03) 
 t: set mode4 sleep dur (1000ms) 
 y: set mode7 sleep dur (10s) 
 f: set mode3 fps (32) 
 z: set PWM HZ (1000,1000,1000,1000) 
 o: set Option Bits (0x00000020) 
 b: set UART baud (38400) 
 p: set UART parity (N) 
---
 S: save Configuration
 R: reset to Defaults

接続を切るには「~」+「.」を入力する。

Disonnected.

設定内容の詳細は以下を参照のこと。

TWE-LITE-2525A認識

再びcuコマンドでMONOSTICKに接続し、最初に組み立てたTWE-LITEを近くに置いてMONOSTICKでデータが取得できることを確認する。

% cu -s 115200 -l /dev/ttyUSB0
Connected.

なお、MONOSTICK上で「+」を3回入力してメニューを出している状態(インタラクティブモード)の場合、再び「+」を3回入力してインタラクティブモードを抜けないとTWE-LITEからデータが受信できない。

(インタラクティブモードから抜けた時のメッセージ)

!INF EXIT INTERACTIVE MODE.

TWE-LITEからデータを取得すると以下のような出力が得られる。

:78811501F6810F050800276C000B4000080F3D3C435A173C
:78811501F6810F0508002774000B4000020F3E3E385A0851
:

取得したデータを加工したり他の用途に使用する場合は各種スクリプト言語によるデータ取得ツールが利用できるがここではTWE-LITE公式サイトで配布されているPythonスクリプトを使用してみる。

まずpyserialパッケージをインストールする。

% sudo apt install python-dev
% sudo apt install python-pip
% sudo pip install pyserial

次にTWEアプリ用スクリプトのサイトで配布されているツールをダウンロードして実行してみる。

% mv twelite_read.txt twelite_read.py
% chmod +x twelite_read.py 
% ./twelite_read.py /dev/ttyUSB0
open serial port: /dev/ttyUSB0

:78811501ED810F050800282C000B4000080F403C375A0A9A
  command   = 0x81 (data arrival)
  src       = 0x78
  src long  = 0x810f0508
  dst       = 0x00
  pktid     = 0x15
  prtcl ver = 0x01
  LQI       = 237 / -15.55 [dbm]
  time stmp = 160.688 [s]
  relay flg = 0
  volt      = 2880 [mV]
  DI1=0/1  DI2=0/1  DI3=0/1  DI4=1/1
  AD1=1032 AD2=0968 AD3=0880 AD4=1440 [mV]

:78811501ED810F0508002854000B4000000F3F3D3A5A364B
  command   = 0x81 (data arrival)
  src       = 0x78
  src long  = 0x810f0508
  dst       = 0x00
  pktid     = 0x15
  prtcl ver = 0x01
  LQI       = 237 / -15.55 [dbm]
  time stmp = 161.312 [s]
  relay flg = 0
  volt      = 2880 [mV]
  DI1=0/1  DI2=0/1  DI3=0/1  DI4=0/1
  AD1=1016 AD2=0980 AD3=0940 AD4=1440 [mV]
:

上記のようなデータが取得できれば正常に動作している。

各データの意味は以下の通り。詳しくはMONO-WIRELESS公式資料の「相手端末からの状態通知:ステータス0x81」を参照のこと。

command = 0x81 (data arrival)

コマンド(1バイト)

0x81はデータの到着を表す。

src = 0x78

送信元の論理デバイスID(1バイト)

0x78は子機であることを表す。

src long = 0x810f0508

送信元の個体識別番号(4バイト)

製造時に一意に割り当てられる識別番号。変更不可。

dst = 0x00

宛先の論理デバイスID(1バイト)

pktid = 0x15

パケット識別子(1バイト)

アプリケーションIDより生成される。

prtcl ver = 0x01

プロトコルバージョン(1バイト)

0x01固定。

LQI = 237 / -15.55 [dbm]

LQI値(1バイト)

受信電波品質(0x00〜0xFF)を表し、以下の計算式でdBmに変換できる。

dBm = (7 * LQI - 1970) / 20

品質の目安は以下の通り。

50未満(悪い)
50〜100(やや悪い)
100〜150(良好)
150以上(アンテナ近く)

time stmp = 161.312 [s]

タイムスタンプ(2バイト)

1/64秒カウント。0xFFFFまでいくと0に戻る。

relay flg = 0

中継フラグ(1バイト)

0x00 中継なし
0x01 中継あり

volt = 2880 [mV]

電源電圧(2バイト)

DI1=0/1 DI2=0/1 DI3=0/1 DI4=0/1

デジタル入力(DI1〜4)の値(1バイト)

各スイッチの現在の状態と変更状態を(x/x)で表す。変更状態は一度でもLowになったら1とする。

尚、データは以下のようにDTI毎に1ビットで表される。

0x01 = DI1がON
0x02 = DI2がON
0x04 = DI3がON
0x08 = DI4がON
0xFF = 全てのスイッチがON

AD1=1016 AD2=0980 AD3=0940 AD4=1440 [mV]

アナログ入力(AI1〜4)の変換値(各1バイト)を補正した値

補正ビットを含めた計算式は以下の通り。

AD[mV] = (AI値 * 4 + 補正ビット) * 4

関連資料・記事

参考サイト