Problem

IntelのNUC DN2820FYKHには内蔵のBluetoothが付属してます。
こいつを使えるようにしてみましょう。

Preparation

といっても、RHEL 7.3には最初からbluetoothのプロトコルスタックBlueZがインストールされていました。
インストールされているかどうかは

1
2
$ bluetoothctl
--version 5.41

でわかります。
インストールされていないなら、

1
$ sudo yum install bluez

でインストールできます。
次に下記のコマンドを叩きます。

1
2
3
4
5
6
$ sudo hciconfig up
hci0: Type: Primary Bus: USB
BD Address: A0:A8:CD:4B:93:07 ACL MTU: 1021:5 SCO MTU: 96:5
DOWN
RX bytes:631 acl:0 sco:0 events:37 errors:0
TX bytes:401 acl:0 sco:0 commands:37 errors:0

ここで、DOWNと出ている場合は、本体のbluetoothが準備できていないので、

1
$ sudo hciconfig hci0 up

と叩きます。
これにより

1
2
3
4
5
6
$ sudo hciconfig up
hci0: Type: Primary Bus: USB
BD Address: A0:A8:CD:4B:93:07 ACL MTU: 1021:5 SCO MTU: 96:5
UP RUNNING
RX bytes:1253 acl:0 sco:0 events:75 errors:0
TX bytes:1119 acl:0 sco:0 commands:75 errors:0

UP RUNNINGに変化しました。

続いて、接続したいbluetoothデバイスを待機状態にし、下記のコマンドを叩きます。

1
2
3
4
$ sudo hcitool lescan
LE Scan ...
54:6C:0E:79:1A:87 (unknown)
54:6C:0E:79:1A:87 CC2650 SensorTag

待機状態のデバイスが認識されました。
Ctrl+Cでスキャンを解除できます。

Try

続いて、デバイスに接続を行います。

1
2
$ sudo gatttool -b 54:6C:0E:79:1A:87 --interactive
[54:6C:0E:79:1A:87][LE]>

入力モードに切り替わるので、

1
2
3
[54:6C:0E:79:1A:87][LE]> connect
Attempting to connect to 54:6C:0E:79:1A:87
Connection successful

とします。
ここで、

1
Error: connect error: Connection refused (111)

が出力された場合、デバイスの待機状態や電源が切れていますので、接続からやり直します。
接続が完了しましたら、実際にデータを送信してみます。
下記は、私が接続したデバイスから、計測した温度を取得するコマンドです。

1
2
3
[54:6C:0E:79:1A:87][LE]> char-write-cmd 0x24 01
[54:6C:0E:79:1A:87][LE]> char-read-hnd 0x21
Characteristic value/descriptor: 04 00 ad 27 01 11 31

最初が、温度の計測を有効にし、次が温度を実際に取得するコマンドになります。
ここのコマンドは一例ですので、必要に怖じてデバイスのマニュアルを読む必要があります。