Raspberry Piでbluetoothを使って、SensorTagと接続し、各センサーの情報をiBeaconで取得します。bluetoothのアダプタにはPlanexのBT-Micro4を使用し、 Bluetooth プロトコルスタックにはBluez を使用し、Raspberry Pi上のRaspbianとSensorTagを、Bluetooth Low Energy(BLE)を使ったiBeaconで接続します。
動作環境
- Planex BT-Micro4
- Raspberry Pi
- CC2541 SensorTag
- Bluez ver5.21
- 温度 TMP006
- 湿度 SHT21
- 圧力 T5400(C953A)
- 加速度計 KXTJ9
- ジャイロスコープ IMU-3000
- 磁力計 MAG3110
BT-Micro4ドングルをRaspberry Piに接続し、lsusbコマンドで接続して確認します。結果を見ると、Device 004に接続されていることが確認できます。
$ lsusb Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 004: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
追加パッケージを見つけるのに、データベースを更新します。
$ sudo apt-get update
必要なライブラリを確認します
$ sudo apt-get install libusb-dev libdbus-1-dev libglib2.0-dev libudev-dev libical-dev libreadline-dev
最新バージョンをダウンロードして、Raspbianにのbluezをインストール(現時点で5.21)します。
$ sudo wget https://www.kernel.org/pub/linux/bluetooth/bluez-5.21.tar.xz $ sudo tar xvf bluez-5.21.tar.xz
作成されたBluez フォルダ「bluez-5.21」に移動して, configureとinstallを行います。コンパイルに少し時間がかかります。
$ cd bluez-5.21 $ sudo ./configure –disable-systemd $ sudo make $ sudo make install $ sudo cp attrib/gatttool /usr/local/bin/
Raspberry Piの電源を切って、the Bluetooth dongle「BT-Micro4」を接続し、再びRaspberry Piの電源を入れます。
$ sudo shutdown -h now
BT-Micro4が接続されているUSBドングルの電源を入れます。
$ sudo hciconfig hci0 up
SensorTagをRaspbianに登録するにはBD(Bluetooth Device)アドレスが必要なので、SensorTagの側面のスイッチを押してアドバタイズ状態にし、hcitoolコマンドを実行します。
$ sudo hcitool lescan LE Scan … B4:99:4C:64:CD:DF (unknown) B4:99:4C:64:CD:DF SensorTag B4:99:4C:64:CD:DF (unknown) B4:99:4C:64:CD:DF SensorTag B4:99:4C:64:CD:DF (unknown) (ctrl c)
hcitoolコマンドでSensorTagに接続します。
$ sudo hcitool lecc B4:99:4C:64:CD:DF Connection handle 70
gatttoolコマンドを使用して、対話的にSensorTag のセンサーの情報を読み込みます。次の例では、SensorTagのセンサーを切り替えて、センサーからのデータを読み込みます。SensorTagの温度センサーのデータを読み込みます。
$ sudo gatttool -b B4:99:4C:64:CD:DF --interactive [B4:99:4C:64:CD:DF][LE]> connect Attempting to connect to B4:99:4C:64:CD:DF Connection successful [B4:99:4C:64:CD:DF][LE]> char-read-hnd 0x25 Characteristic value/descriptor: 00 00 00 00 [B4:99:4C:64:CD:DF][LE]> char-write-cmd 0x29 01 [B4:99:4C:64:CD:DF][LE]> char-read-hnd 0x25 Characteristic value/descriptor: 8e fe 34 0d [B4:99:4C:64:CD:DF][LE]> exit
ハンドルを用いたSensorTagの温度センサー(U5)への問い合わせは、次のテーブルに従います。
Type | UUID | Handle | Read/Write | Format |
---|---|---|---|---|
<Data> | F000AA01 * | 0×25 | Read/Notify | ObjLSB ObjMSB AmbLSB AmbMSB (4 bytes) |
<Data Notification> | 0×26 | R/W | 2 bytes | |
<Configuration> | F000AA02 * | 0×29 | R/W | 1 byte |
Objはobject temperatureで、Ambはthe ambient temperatureを示します。
gatttoolコマンドは、インタラクティブモードの他に、ノンインタラクティブモード(non-interactive mode) で使用できます。ノンインタラクティブモードで使用する方法を次に示します。SensorTagの温度センサーのデータを読み込んでみます。
$ sudo gatttool -b B4:99:4C:64:CD:DF –char-write -a 0x29 -n 01; sleep 1; sudo gatttool -b B4:99:4C:64:CD:DF –char-read -a 0x25;
次の結果が表示されるます。
Characteristic value/descriptor: 5a ff 28 09