RaspberryPi
bluetooth
シリアル通信

Raspberry Piでbluetoothシリアル通信

RaspberryPiにbluetooth機器を接続してpythonで通信させようとしたけど,うまくいかなかった記録.
とりあえず動くまではいきましたが,まだ不安定な部分があるので日々加筆します.

環境

PC:aRaspberry Pi 3
OS:Ubuntu MATE 16.04

手順

参考1
参考2

デバイスのスキャン

まずはデバイスが認識されているかスキャンしておく

デバイス名の前についてるのはMACアドレス

scan
$ sudo hcitool scan
[sudo] password for pi:
Scanning ...
    00:07:80:3C:xx:xx   device1
    90:CD:B6:37:xx:xx   device2

一応確認のためping飛ばしとく

ping
$ sudo l2ping -c 2 00:07:80:3C:8E:F2
Ping: 00:07:80:3C:xx:xx from B8:27:EB:E3:yy:yy (data size 44) ...
4 bytes from 00:07:80:3C:xx:xx id 0 time 70.46ms
4 bytes from 00:07:80:3C:xx:xx id 1 time 64.60ms
2 sent, 2 received, 0% loss

シリアルポートにバインドする

/dev/rfcommX にバインドすることで,bluetoothで仮想シリアル通信できるようになる.

bind
$ sudo rfcomm bind 1 00:07:80:3C:xx:xx

番号は0から何番かまで使える.

自動設定する

rfcommは再起動すると設定が失われる.
そのため,再起動しても設定を継続したい場合はrfcomm.confを作成する必要がある.

/etc/bluetooth/rfcomm.conf
rfcomm0 {
        # Automatically bind the device at startup
        bind yes;

        # Bluetooth address of the device
        device 00:07:80:3C:xx:xx;

        # RFCOMM channel for the connection
        channel 1;

        # Description of the connection
        comment "IMU config";
}

この方法うまくいかなかったんで誰か教えてください

bluetoothctlからペアリング

bluetoothctlがない人はインストールしてください.

install
# $ sudo apt install bluez bluez-utils

#起動
$ bluetoothctl

対話モードで設定

config
# コントローラ起動
$ power on

#デバイスのMACアドレスを検索
$ devices

# デバイスがないときはスキャン
$ scan on

# ペアリング
$ pair [MAC]

これで接続できる.(はず)