このシリーズではRaspberry Pi 3からSensorTagの環境データを取得します。その後にKafkaを経由したSpark Streamingでウィンド分析するPythonのコードを書いてみます。
Raspberry Pi 3のセットアップ方法は多くのサンプルがあります。ここでは簡単にSensorTagの環境データを取得するための準備をします。
用意するもの
Raspberry Pi 3はWi-FiとBluetoothを内蔵しています。ドングルが不要になり用意するものが減りました。この例ではUSB-A端子がある古いMacBook Pro (macOS Sierra 10.12.6)を開発用端末に使っています。Raspberry Pi 3とEthernet接続する周辺機器を用意します。
テキサスインスツルメンツのSensorTagはRaspberry Pi 3とBluetooth接続して温度や湿度といった環境データを簡単に取得することができます。
macOSでRaspbian Liteイメージを焼く
オフィシャルのInstalling operating system images on Mac OSの手順に従います。SDカードのデバイス名を確認してunmountします。この例では/dev/disk2です。
$ diskutil list |
Raspbian Jessie LiteをダウンロードしてSDカードに焼きます。SSHの有効化も忘れずに行います。
$ cd ~/Downloads |
mDNSでSSH接続する
macOSはRaspberry Pi 3とEthernetケーブル接続をして簡単にSSHできます。デフォルトでは以下のユーザーが設定されています。
- username: pi
- password: raspberry
$ ssh pi .local |
macOSの公開鍵をRaspberry Pi 3の`~/.ssh/authorized_keys’にコピーします。
$ mkdir -p -m 700 ~/.ssh |
ログインし直します。
$ exit |
無線LAN
無線LANのアクセスポイント(ESSID)を設定してネットワークを再起動します。ping
からインターネット接続を確認します。
$ sudo sh -c 'wpa_passphrase [ESSID] [パスワード] >> /etc/wpa_supplicant/wpa_supplicant.conf' |
raspi-config
raspi-config
でパスワードとタイムゾーンを変更します。
$ sudo raspi-config |
- 1 Change User Password
- 4 Localisation Options
- I2 Change Timezone
- Asia > Tokyo
apt-get
日本のミラーサイトに変更してパッケージを最新にします。ファイルを編集するためにvimをインストールします。
$ sudo sed -i".bak" -e "s/mirrordirector.raspbian.org/ftp.jaist.ac.jp/g" /etc/apt/sources.list |
BluetoothとSensorTag
SensorTagの電源を入れてRaspberry Pi 3からスキャンします。BDアドレスを確認します。
$ sudo hcitool lescan |
gatttool
gatttool
コマンドのインタラクティブモードで確認したBDアドレスのSensorTagに接続します。
$ gatttool -b B0:B4:48:BE:5E:00 --interactive |
Raspberry PiでTI製センサータグ(CC2650)の値を取得してみるを参考にしてセンサーの値を取得します。
- 0x24(config)に01を書いて有効にする
- 0x21からバイトを取得する
[B0:B4:48:BE:5E:00][LE]> char-write-cmd 0x24 01 |
4バイトの値が得られます。SensorTag User Guideによると順番に以下のデータになります。
ObjLSB ObjMSB AmbLSB AmbMSB |
Python REPLから取得した4バイトを摂氏に変換して周辺温度と物体温度を出力します。
'94 0b f0 0d' raw_data = |
bluepyのsensortagコマンド
PythonからBluetooth LEのデバイスを操作するためにbluepyをインストールします。
$ sudo apt-get install python-pip libglib2.0-dev -y |
sensortag
コマンドが使えるようになります。-T
フラグを付けBDアドレスを引数に実行します。
$ sensortag -T B0:B4:48:BE:5E:00 |
-T
フラグを指定すると周囲温度、物体温度の順番に取得できます。
Connecting to B0:B4:48:BE:5E:00 |
SensorTag
周囲温度(ambient)と物体温度(object)、湿度(humidy)を取得するPythonのスクリプトを書きます。
# -*- coding: utf-8 -*- |
SensorTagのBDアドレスを引数にスクリプトを実行します。
$ python temp.py B0:B4:48:BE:5E:00 |
5秒間隔で3回計測した結果を出力します。エアコンが効いてきたので快適になりました。
Connecting to B0:B4:48:BE:5E:00 |