A certain engineer "COMPLEX"

開発メモ その73 Red Hat Enterprise Linux 7.3でbluetoothを使ってみる

Problem


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

Preparation


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


$ bluetoothctl --version
5.41

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


$ sudo yum install bluez

でインストールできます。

次に下記のコマンドを叩きます。


$ 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が準備できていないので、


$ sudo hciconfig hci0 up

と叩きます。
これにより


$ 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デバイスを待機状態にし、下記のコマンドを叩きます。


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

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

Try


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


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

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


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

とします。
ここで、


Error: connect error: Connection refused (111)

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


[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

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

コメントを残す

メールアドレスが公開されることはありません。

%d人のブロガーが「いいね」をつけました。