読者です 読者をやめる 読者になる 読者になる

もみあげあしめ

組み込みとかIoTとか、いろいろ

センサタグ(CC2650STK) を使う 準備編

BLE IoT Raspberry Pi Python 開発環境 お勉強 BlueZ

(少し前から)IoT、始めました。

f:id:shima_nigoro:20160504124408p:plain:w300

IoTといえば、センサー。ということでTI製のセンサタグを購入してみました。

この記事ではTexas Instruments製SimpleLink™ センサタグの購入からセンサ値までをまとめます。

センサ値の取得は Raspberry Pi 3 Model BオンボードBLEチップを使って行います。
Raspberry Pi 2 Model B + 下記のドングルの組合わせでもセンサ値は取れます。
Logitec Bluetooth USBアダプタ コンパクト Ver4.0 Class2 LBT-UAN04C2BK

1. 外観と内臓センサ・インターフェイス

f:id:shima_nigoro:20160723153323j:plain:w300
外箱。丈夫な作りで輸送中に壊れることはなさそう。#少しへこみはあるけれど…
内容物は本体+スマホ向けアプリのダウンロード先とサポートの連絡先の説明書

f:id:shima_nigoro:20160723154433j:plain:w300
表側にはトレードマークが。

f:id:shima_nigoro:20160723154523j:plain:w300
裏側には周辺光センサや赤外線、周囲温度センサ、LEDチップ用の窓がある。

f:id:shima_nigoro:20160723155037j:plain:w300

  • 表面のセンサ
    • IR サーモパイルセンサ TMP007
    • 9軸モーション・センサ MPU-9250
    • デジタル湿度センサ
    • 高度計/圧力センサ BMP280
    • 周辺光センサ OPT3001

f:id:shima_nigoro:20160723155000j:plain:w300

  • 裏面のセンサ
    • 磁気センサ MK24
    • デジタル・マイク SPH0641LU

2. 購入方法

a. Texas Instruments の通販で購入する場合

Checkout Now からどうぞ。ただしすべて英語かつ、おそらく海外からの発送。
CC2650STK | Texas Instruments | TI Store

b. アールエスコンポーネンツの通販で購入する場合(こちらがおすすめ)

組織名の入力は必須でないため個人での購入も可能。
CC2650STK | SensorTag Kit with SimpleLink CC2650 MCU | Texas Instruments 【通販RS】
#個人での購入はできないとか書いているブログもあるけれど、私は下記で普通に購入

3. センサ値を取得する

3.1. アプリでセンサ値を取得する

センサタグの電源を入れアプリを起動して取得先を選ぶだけで簡単に取得できる。が、取得できるだけ。
Android向け
Simplelink SensorTag - Google Play の Android アプリ
iOS向け
TI SensorTag on the App Store

3.2. Raspberry Piでセンサ値を取得する

Raspberry Pi 3 以前 or Bluez 未インストールの場合は、下記を参考にBLEを使えるようにする。
Fitbit Charge HRとBLEで通信する - もみあげあしめ

3.2.1. コマンドラインを使って取得する

・下記コマンドでセンサタグのMACアドレスを取得できる

sudo hcitool lescan

・下記のような結果が得られるので、MACアドレスをコピーしておく。※Ctrl + Cで抜けられる

pi@raspberrypi:~ $ sudo hcitool lescan
LE Scan ...
XX:XX:XX:XX:XX:XX (unknown)
XX:XX:XX:XX:XX:XX CC2650 SensorTag

・gatttool を使って通信する

gatttool -b XX:XX:XX:XX:XX:XX -I

※XX:XX:XX:XX:XX:XXにはセンサタグのMACアドレスを指定

・connect で接続する。成功すると「 Connection successful 」が表示される。

pi@raspberrypi:~ $ gatttool -b XX:XX:XX:XX:XX:XX -I
[XX:XX:XX:XX:XX:XX][LE]> connect
Attempting to connect to XX:XX:XX:XX:XX:XX
Connection successful
[XX:XX:XX:XX:XX:XX][LE]>

・湿度センサ(温度センサ)を有効にする

[XX:XX:XX:XX:XX:XX][LE]> char-write-req 0x2f 01
Characteristic value was written successfully

・湿度センサ(温度センサ)値を取得する

[XX:XX:XX:XX:XX:XX][LE]> char-read-hnd 0x2c
Characteristic value/descriptor: 04 68 7c 5f

TempLSB:TempMSB:HumidityLSB:HumidityMSBの順なので、単純に計算すると

温度(℃) 湿度(%)
生データ 0x6804 0x5f7c
10進数 26,628 24,444

#もしかして…ここは地獄?

当たり前かもしれませんが、生データから計算式を使って変換が必要です。
CC2650 SensorTag User's Guide - Texas Instruments Wiki を参考にセンサ値を変換します。

コマンドラインから叩くのが面倒なので Python の BLE ライブラリ pygattlib を使います。

3.2.2. Python を使って取得する

・まずは関連ライブラリのインストール

sudo apt-get install python-dev libbluetooth-dev libgtk2.0-dev libboost-python-dev libboost-thread-dev

※インストール失敗する場合は sudo apt-get update

・次に pygattlib のインストール

sudo pip install gattlib

力尽きたのでこの記事はここまで