Raspbian 資料一覧
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.
設定内容の詳細は以下を参照のこと。
設定変更(インタラクティブ)モード (MONO-WIRELESS.COM)
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アプリ用スクリプトのサイトで配布されているツールをダウンロードして実行してみる。
TWE-Lite 標準アプリ用スクリプト -- MONO-WIRELESS.COM
% 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
関連資料・記事
参考サイト
Raspberry Pi (Wikipedia)
RaspberryPi技術情報 (Qiita)
Raspbian技術情報 (Qiita)
TWE-Lite技術情報 (Qiita)
IT女子のラズベリーパイ入門奮闘記 (Device Plus)
RaspberryPi電子工作入門 (ツール・ラボ)