WxBeacon2とラズパイを連携させる
WxBeacon2 の入手
直販サイトから入手した。
WxBeacon2 は OMRON の環境センサ 2JCIE-BL の OEM 品らしい。
ユーザーズマニュアル(PDF)
Ambient へ登録
Ambient へユーザ登録(無償)をする。
新規チャネルを 1 つ作成しておくこと。
Raspberry Pi 3 の設定
参考サイトを元に各種設定をする。
なお、Raspberry Pi 3 の初期設定は完了しているものとする。
$ sudo apt-get update $ sudo apt-get upgrade
pyenv を導入
当方環境では python 2,3 が共存している。
2 系、3 系を同時設定が可能な pyenv を導入する。(参考サイト)
必要なパッケージのインストール、git から pyenv をクローンする。
なお、sudo のパスが通らないときは ここ を参照し /etc/sudoers の記述を変更する。
$ sudo apt-get install -y git openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev $ git clone git://github.com/yyuu/pyenv.git ~/.pyenv
.bash_profile に設定を追加。
$ sudo vi ~/.bash_profile # 以下の内容を追記 export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" . "$HOME/.bashrc"
設定を反映。
.bash_profile があると .bashrc が読み込まれないので注意。(参考サイト)
$ source ~/.bash_profile
インストール可能な python パッケージを確認。
$ pyenv install --list ... ... 3.6.4 3.6.5 3.6.6 ... ...
python 2系、3系を共存させる。
python 2 のバージョン確認。
$ python -V Python 2.7.13
pyenv で 2系、3系をともにインストールする。
本件の参考サイトで使用していた 3.6.5 をインストールする。
$ pyenv install 2.7.13 $ pyenv install 3.6.5
同時使用できるようにする。
$ pyenv global 2.7.13 3.6.5 $ pyenv version 2.7.13 (set by /home/pi/.pyenv/version) 3.6.5 (set by /home/pi/.pyenv/version) $ python -V Python 2.7.13 $ python3 -V Python 3.6.5
pip を最新版にする。
$ pip3 install --upgrade pip
Python BLE ライブラリを導入
$ sudo apt-get install libglib2.0-dev $ pip3 install bluepy
BLE ライブラリが import できない場合は、次を実行する。
bluepy 公式サイトから最新のソースコードを DL する。
$ cd /tmp $ wget https://files.pythonhosted.org/packages/27/91/6cfca10bee9862f93015413cf9e6a52c3081a71f1518963396a055128f8e/bluepy-1.3.0.tar.gz $ tar xvzf bluepy-1.3.0.tar.gz $ cd bluepy-1.3.0 $ sudo python3 setup.py build $ sudo python3 setup.py install
Ambient のライブラリを導入
$ sudo pip3 install git+https://github.com/AmbientDataInc/ambient-python-lib.git
Raspberry Pi 3 の Bluetooth バージョン確認
$ bluetoothd -v 5.43
WxBeacon2 の設定
WxBeacon2 に電池を入れて hcitool で BLE をスキャンする。
末尾が Env のものが WxBeacon2 である。
$ sudo hcitool lescan LE Scan ... ... XX:XX:XX:XX:XX:XX (unknown) AA:BB:CC:DD:EE:FF Env
スキャンした WxBeacon2 に接続してサービスを調べる。
connect コマンドがエラーになる場合は何回かリトライする。
$ gatttool -b AA:BB:CC:DD:EE:FF -t random -I [AA:BB:CC:DD:EE:FF][LE]> connect Attempting to connect to AA:BB:CC:DD:EE:FF Connection successful [AA:BB:CC:DD:EE:FF][LE]> primary attr handle: 0x0001, end grp handle: 0x0007 uuid: 00001800-0000-1000-8000-00805f9b34fb attr handle: 0x0008, end grp handle: 0x000b uuid: 00001801-0000-1000-8000-00805f9b34fb attr handle: 0x000c, end grp handle: 0x0016 uuid: 0000180a-0000-1000-8000-00805f9b34fb attr handle: 0x0017, end grp handle: 0x0025 uuid: 0c4c3000-7700-46f4-aa96-d5e974e32a54 attr handle: 0x0026, end grp handle: 0x003a uuid: 0c4c3010-7700-46f4-aa96-d5e974e32a54 attr handle: 0x003b, end grp handle: 0x0043 uuid: 0c4c3030-7700-46f4-aa96-d5e974e32a54 attr handle: 0x0044, end grp handle: 0xffff uuid: 0c4c3040-7700-46f4-aa96-d5e974e32a54 [AA:BB:CC:DD:EE:FF][LE]> exit $
WxBeacon2 をブロードキャストモードにする
設定はスマホアプリ BLE Scanner で行う。
詳細は 参考サイト のプログラム2(ブロードキャストモード) の項目を参照。
データ取得プログラム
計測データを取得する Python ソースコードを DL する。
Github のソースコードを使用する。
$ cd ~ $ mkdir WxBeacon2 $ cd WxBeacon2 wget https://raw.githubusercontent.com/AmbientDataInc/EnvSensorBleGw/master/src/gw_RPi/env2ambientBS.py
ソースコードの修正
Ambient で 新規チャネル を作成しておく。
チャネルID と ライトキー を使う。
$ vi env2ambientBS.py (17行目) channelID = 100 ↓ channelID = xxxxx (18行目) writeKey = 'writeKey' ↓ writeKey = 'xxxxxxxxxxxxxxxx' (52行目) if companyID == 'ffff': ↓ if devs[target]['companyID'] == 'ffff':
プログラムの起動
ヘルプを表示する。
$ sudo python3 env2ambientBS.py -h usage: env2ambientBS.py [-h] [-d] [-o] [-b] [-bb] optional arguments: -h, --help show this help message and exit -d debug msg on -o device is omron env sensor -b device is BBC micro:bit -bb device is BBC micro:bit + BME280
今回は WxBeacon2(オムロン環境センサ)を使用するので -o オプションを付ける。
ret = 200 は ambient からの書き込み成功を意味する。
$ sudo python3 env2ambientBS.py -o omron 23.62 47.29 0 0.02 1011.0 33.18 2.97 sent to Ambient (ret = 200) BTLE Exception while scannning. 23.59 47.29 0 0.01 1011.0 32.77 2.97 sent to Ambient (ret = 200) 23.54 47.33 0 0.02 1011.0 32.77 2.97 sent to Ambient (ret = 200) 23.5 47.36 0 0.02 1011.0 33.57 2.97 sent to Ambient (ret = 200)
バックグラウンドで動作させる。
ログは一切出力しない。
参考サイト
$ sudo nohup python3 env2ambientBS.py -o > /dev/null 2>&1 &
自動起動
$ cd /usr/local/bin/ $ sudo touch WxBeacon2_autostart.sh $ sudo vi WxBeacon2_autostart.sh #!/bin/sh /usr/bin/sudo /usr/bin/nohup /home/pi/.pyenv/shims/python3 env2ambientBS.py -o > /dev/null 2>&1 & $ chmod a+x WxBeacon2_autostart.sh
スクリプトを rc.local に登録する。
$ sudo vi /etc/rc.local exit 0 の手前に以下の行を追加 WxBeacon2_autostart.sh
出力ログ
上記実行時のログについて。
env2ambientBS.py の 58 行目 MSG より。
MSG(temp / 100, humid / 100, light, uv / 100, press / 10, noise / 100, (batt + 100) / 100) 23.62 47.29 0 0.02 1011.0 33.18 2.97
温度 | 相対湿度 | 環境光 | UV指数 | 気圧 | 騒音 | バッテリ電圧 |
---|---|---|---|---|---|---|
degC | %RH | lux | hPa | dB | V | |
23.62 | 47.29 | 0 | 0.02 | 1011.0 | 33.18 | 2.97 |
ambient への書き出し
env2ambientBS.py の 59 行目 sendWithRetry より。
以下の順序で ambient へ送っている。
sendWithRetry({'d1': temp / 100, 'd2': humid / 100, 'd3': press / 10, 'd4': (batt + 100) / 100, 'd5': light, 'd6': noise / 100})
温度 | 相対湿度 | 気圧 | バッテリ電圧 | 環境光 | 騒音 |
---|---|---|---|---|---|
d1 | d2 | d3 | d4 | d5 | d6 |
ambient のグラフ編集
上記 d1 ~ d6 のデータ項目を元に、見やすいようにグラフを編集する。
UI が優れているので慣れれば任意にデザイン可能。