Edited at

Raspberry Piでbluetoothシリアル通信

More than 1 year has passed since last update.

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]

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