2015年3月28日土曜日

Raspberry PiでBluetoothを使う

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に以下を記載。

### BEGIN INIT INFO
# Provides: bluetooth-agent
# Required-Start: $remote_fs $syslog bluetooth pulseaudio
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Makes Bluetooth discoverable and connectable to 0000
# Description: Start Bluetooth-Agent at boot time.
### END INIT INFO
#! /bin/sh
# /etc/init.d/bluetooth-agent
USER=root
HOME=/root
export USER HOME
case "$1" in
        start)
                #echo "setting bluetooth discoverable"
                #sudo hciconfig hci0 piscan
                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 --channel=22 SP
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/rfcomm0

以下のように修正すると自動化できると書いてあったが、逆にうまくいっていない。。

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

        # Bluetooth address of the device
        device XX:XX:XX:XX:XX:XX;

        # RFCOMM channel for the connection
        channel 22;

        # Description of the connection
        comment "a comment";
}

起動後自動でSerial Portができるようにする

rc.localに以下を修正することで改善

sudo vim /etc/rc.local
sdptool add --channel=22 SP
hciconfig hci0 piscan
hciconfig hci0 namepi’
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 ソース

0 件のコメント :

コメントを投稿