LoginSignup
13
3

More than 5 years have passed since last update.

株式会社 日立製作所 OSSソリューションセンタ Blockchain推進部 梅田多一

はじめに

トイレの使用状況やにおいを通知、親の健康状態をラズパイで遠隔確認するシステム「今日のうん性」を改良すべく、今回はBLE(Bluetooth Low Energy)とRedisを使ってトイレの使用者を確認できるようにするための環境を作ってみます。

Qiita.png

前提環境

Raspberry Pi 3 Model BにRaspbianをインストールします。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 9.6 (stretch)
Release:    9.6
Codename:   stretch

BLE環境のセットアップ

Raspberry PiをBLEセントラルにしてBLEペリフェラルからのアドバタイズメントを受け取れるようにします。Node.jsのbleaconモジュールをインストールして使用します。

  • nobleの前提ライブラリをインストール
$ sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev

参考:
A Node.js BLE (Bluetooth Low Energy) central module

  • Node.js v8.xのインストール
$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
$ sudo apt-get install -y nodejs
  • node-bleaconのインストール
$ npm install bleacon

参考:
A Node.js library for creating, discovering, and configuring iBeacons

BLE環境の動作確認

以下のプログラムを作成して実行します。受け取ったアドバタイズメントをコンソール出力しています。

beacon.js
var Bleacon = require('bleacon');

// Start scanning 
Bleacon.startScanning();

// Events
Bleacon.on('discover', function(bleacon) {
  console.dir(bleacon);
});

iBeaconのシミュレータ等を使ってアドバタイズメントを飛ばしてみます。私はAndroidアプリのBeacon Simulatorを使用しました。アドバタイズメントに含まれるuuidで人を、proximityがimmediateかnearの場合にトイレにいると判定できそうです。

$ sudo node beacon.js
{ uuid: 'a881f9bec064434ba659df4cbb445b95',
  major: 1,
  minor: 1,
  measuredPower: -65,
  rssi: -97,
  accuracy: 6.265184188618567,
  proximity: 'far' }
{ uuid: 'a881f9bec064434ba659df4cbb445b95',
  major: 1,
  minor: 1,
  measuredPower: -65,
  rssi: -87,
  accuracy: 3.5309536541092137,
  proximity: 'near' }

Redis環境のセットアップ

Raspberry PiにRedisをインストールしてBLEペリフェラルからのアドバタイズメントを管理できるようにします。

  • Redisのインストール
$ sudo apt-get install redis-server
  • node-redisのインストール
$ npm install redis

参考:
redis client for node

Redis環境の動作確認

先ほどのプログラムを改造して実行します。受け取ったアドバタイズメントからuuidとproximity を取り出しRedisに登録します。uuidをkeyにproximityをvalueとしてセットします。Redisへのセット時にsetexを指定しTTL(Time to live)を5秒に設定しているのでトイレから離れるとRedisから情報は自動的に削除されます。

beacon.js
var Bleacon = require('bleacon');
var client = require('redis').createClient();

// Start scanning
Bleacon.startScanning();

// Events
Bleacon.on('discover', function(bleacon) {
  console.dir(bleacon);
  client.set(bleacon.uuid, bleacon.proximity, 'EX', 5, function(){});
});

Redisに付属のredis-cliを使えば登録されているアドバタイズメントを簡単に確認できます。

$ redis-cli
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> keys *
1) "a881f9bec064434ba659df4cbb445b95"
127.0.0.1:6379> get a881f9bec064434ba659df4cbb445b95
"near"
127.0.0.1:6379>

おわりに

Raspberry Piひとつで近くにいる人を管理する仕組みを簡単に作れました。いろんな業務に応用できるのではないでしょうか。例えば働き方改革。時間や場所にとらわれない多様な働き方の実現には、従業員がいつどこで働いているか証明できる必要があります。
仕事の証明と言えばPoW(Proof of Work)。PoWと言えばブロックチェーン。次回は便座の使用状況をブロックチェーンで管理します。便座とブロック、ベンザとブロック、、お楽しみに。

13
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
3