Raspbian資料一覧

TWE-LITE-2525A(加速度センサー内蔵無線タグ)の値をNode.jsで読み出す

2016/12/18更新

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

Raspberry Pi 3とMONOSTICKを使ってTWE-LITE-2525A(加速度センサー内蔵無線タグ)からデータを読み取る」でTWE-LITE-2525Aのデータが読み出せるようになったが、Twitter投稿やメール送信などと簡単に連携させるためNode.jsでも読み出してみる。

serialportモジュールインストール

同モジュールの公式GitHubリポジトリは以下で、npmで簡単にインストールできる。

% sudo npm install -g serialport

読み出しプログラム

以下のような簡単なプログラムにてTWE-LITE-2525Aのデータを読み取る。

get_twelite.js
var serialport = require('serialport');

// シリアルポート設定
var port = new serialport('/dev/ttyUSB0', {
  baudRate: 115200,
  parser: serialport.parsers.readline("\n")
});

// TWE-Liteからデータ受信
port.on('data', function(input) {
  var devid    = ' 1: 0x' + input.slice( 1, 3) + '       device id';
  var comm     = ' 2: 0x' + input.slice( 3, 5) + '       command';
  var packetid = ' 3: 0x' + input.slice( 5, 7) + '       packet id';
  var proto    = ' 4: 0x' + input.slice( 7, 9) + '       protocol version';
  var lqi      = ' 5: 0x' + input.slice( 9,11) + '       LQI';
  var src      = ' 6: 0x' + input.slice(11,19) + ' source id';
  var dst      = ' 7: 0x' + input.slice(19,21) + '       destination id';
  var time     = ' 8: 0x' + input.slice(21,25) + '     time stamp';
  var relay    = ' 9: 0x' + input.slice(25,27) + '       relay flag';
  var volt     = ' a: 0x' + input.slice(27,31) + '     supply voltage';
  var na       = ' b: 0x' + input.slice(31,33) + '       N/A';
  var di       = ' c: 0x' + input.slice(33,35) + '       DI status';
  var di_chg   = ' d: 0x' + input.slice(35,37) + '       DI change status';
  var ad       = 'ex: 0x' + input.slice(37,45) + ' AD value';
  var ad_corr  = 'ef: 0x' + input.slice(45,47) + '       AD correction value';
  var chksum   = ' g: 0x' + input.slice(47,49) + '       check sum';

  console.log(input);
  console.log(' ^1^2^3^4^5^^^^^^^6^7^^^8^9^^^a^b^c^de1e2e3e4ef^g');
  console.log('---');
  console.log(devid);
  console.log(comm);
  console.log(packetid);
  console.log(proto);
  console.log(lqi);
  console.log(src);
  console.log(dst);
  console.log(time);
  console.log(relay);
  console.log(volt);
  console.log(na);
  console.log(di);
  console.log(di_chg);
  console.log(ad);
  console.log(ad_corr);
  console.log(chksum);
  console.log('-------------------------------------------------');
});

これを実行してTWE-LITE-2525Aに変化を与えると以下のような結果が得られる。

% node get_twelite.js
:78811501A2810F0508008EF4000B4000000F3E3E425A1AA4
 ^1^2^3^4^5^^^^^^^6^7^^^8^9^^^a^b^c^de1e2e3e4ef^g
---
 1: 0x78       device id
 2: 0x81       command
 3: 0x15       packet id
 4: 0x01       protocol version
 5: 0xA2       LQI
 6: 0x810F0508 source id
 7: 0x00       destination id
 8: 0x8EF4     time stamp
 9: 0x00       relay flag
 a: 0x0B40     supply voltage
 b: 0x00       N/A
 c: 0x00       DI status
 d: 0x0F       DI change status
ex: 0x3E3E425A AD value
ef: 0x1A       AD correction value
 g: 0xA4       check sum
-------------------------------------------------
:78811501AB810F0508008EFC000B4000000F3E3E425A1A93
 ^1^2^3^4^5^^^^^^^6^7^^^8^9^^^a^b^c^de1e2e3e4ef^g
---
 1: 0x78       device id
 2: 0x81       command
 3: 0x15       packet id
 4: 0x01       protocol version
 5: 0xAB       LQI
 6: 0x810F0508 source id
 7: 0x00       destination id
 8: 0x8EFC     time stamp
 9: 0x00       relay flag
 a: 0x0B40     supply voltage
 b: 0x00       N/A
 c: 0x00       DI status
 d: 0x0F       DI change status
ex: 0x3E3E425A AD value
ef: 0x1A       AD correction value
 g: 0x93       check sum
-------------------------------------------------

このデータを利用して他の処理と組み合わせればいろいろな用途に使える。

尚、データ仕様はMONO-WIRELESSの公式サイトにて定義されている。

関連資料・記事

参考サイト