Raspberry PiでBluetoothを使う
Raspberry PiにBluetoothドングルをつけて接続しました。
~ペアリング~
1.Bluetoothのパッケージの追加
$ sudo apt-get install bluetooth bluez-utils blueman
2.bluetooth-agentを自動起動する。
$sudo vim /etc/init. d/bluetooth-agent
$sudo chmod 755 /etc/init. d/bluetooth-agent
$sudo update-rc . d bluetooth-agent defaults
bluetooth-agentに以下を記載。
#! /bin/sh
USER=root
HOME=/root
export USER HOME
case "$1 " in
start)
sudo hciconfig hci0 pscan
start-stop-daemon -S -x /usr/bin/bluetooth-agent -b -- 0000
echo "bluetooth-agent startet pw: 0000"
;;
stop)
echo "Stopping bluetooth-agent"
start-stop-daemon -K -x /usr/bin/bluetooth-agent
;;
*)
echo "Usage: /etc/init.d/bluetooth-agent {start|stop}"
exit 1
;;
esac
exit 0
3.PINコードではなくYes/Noで接続できるようにする。
$ sudo perl -i -pe 's/KeyboardDisplay/DisplayYesNo/' /usr/bin/bluez-simple -agent
4.スマホ(Xperia)で設定→Bluetoothで”周辺のすべてのBluetooth危機で検出可能”の状態にする。(ここではまりました。)
5.以下でRaspberry Piをスキャン状態にする
$ hcitool scan
xx :xx :xx :xx :xx :xx Xperia AX
6.接続
$ sudo bluez-simple-agent hci0 xx :xx :xx :xx :xx :xx
RequestConfirmation
Confirm passkey (yes/No):yes
ここでスマホ側にペアリングするかのメニューがでてくるのでペアリングする。
Creating device failed: org.bluez.Error.AlreadyExists: AlreadyExists というエラーがでた場合は、以下で1回消す。
$ sudo bluez-test-device remove XX :XX :XX :XX :XX :XX
ペアリングできると以下がでる。
New device・・・
5.自動接続
次回から自動接続する場合は以下となります。
$ sudo bluez-test-device trusted XX :XX :XX :XX :XX :XX yes
$ sudo bluez-test-input connect XX :XX :XX :XX :XX :XX
参考
Raspberry PiでBluetoothを扱う
Raspberry PiからBluetoohを使ってiPhoneでテザリング
~シリアル通信してみる~
1.SDP(Service Directory Protocol)にSPP(Serial Port Profile)を追加する。
まず登録されているサービスを確認する。
$sdptool browse local
Service NameにSerial Portがないので、以下でSPPを登録する。
$sdptool add
Serial Port service registered
もう一回以下で確認。
$sdptool browse local
Service Name: Serial Port
Service Description: COM Port
が追加されている。
2.RFCOMMサーバーを起動
$sudo rfcomm listen /dev/rfcomm0 22
Waiting for connection on channel 22 とでて待機状態になる。
3.Android側からBluetooth Terminalで接続
接続されるとRaspberry Pi側で、以下が表示され、/dev/rfcomm0が作成される。
Connection from XX:XX:XX:XX:XX:XX to /dev/rfcomm0
Press CTRL-C for hangup
受信データの確認
$ cat /dev/rfcomm0
送信
$ echo "hello" > /dev/rfcomm 0
以下のように修正すると自動化できると書いてあったが、逆にうまくいっていない。。
sudo vim /etc/bluetooth/rfcomm.conf
rfcomm0 {
bind yes;
device XX :XX :XX :XX :XX :XX ;
channel 22 ;
comment "a comment" ;
}
起動後自動でSerial Portができるようにする
rc.localに以下を修正することで改善
sudo vim /etc/rc.local
sdptool add
hciconfig hci0 piscan
hciconfig hci0 name ‘pi ’
rfcomm listen /dev/rfcomm0 22 &
exit 0
$sudo chmod +x /etc/rc.local
参考
Linux PCにUSB Bluetoothを付けてNexus7と通信
[GPSRCC] RaspberryPiでBluetooth QZPOD編
Raspberry Pi をA2DPのsinkにして携帯やタブレットから音楽を再生する
Bluetooth/rfcomm
Camp Hack Day 2014 喋るテントTipee ソース