RaspberryPi (jessie)とMac間のBluetooth通信[16/10/12時点 最新版]

#古い記事に翻弄された情弱が送る、まとめ。


###目的
　Raspberry Pi2 Model B(jessie)に乗っけているGrovePi+に繋がった温度センサからのデータを
Bluetoothで接続したMacBook AirにSPP通信で送信する。

###使用したもの
　Raspberry Pi2 Model B Rasbian jessie　以下RasPi
　MacBook Air OS X Yosemite(10.10.5)　　以下Mac
　Planex BT-Micro4
　GrovePi+
　Grove - Starter Kit　Temperature Sensor(Analog)


#もくじ
- ※ GUIログイン時を想定しています。

1. USBドングルが認識されているか確認。
2. bluetoothモジュールが起動しているか確認。
3. hciconfigが起動しているか確認。
4. ペアリング
5. シリアル通信

- テスト

#はじめに
この手引きはgoogle力のない情弱が必死に集めた情報です。

この記事を元に行った操作に対して一切の責任を持ちません。
自己責任ということでよろしくお願いします。
ご了承ください。

私はこの方法で無事目的を達することができました。
参考程度にご覧下さい。
何処かの誰かの助けになれば幸いです。

今回の内容はGUIログイン状態を想定したものです。

#1. USBドングルが認識されているか確認。

```
lsusb

　- Bus 001 Device 005: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
　- Bus 001 Device 006: ID 046d:c52b Logitech, Inc. Unifying Receiver
　- Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
　- Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
　- Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
```

#2. bluetoothモジュールが起動しているか確認。
```
/etc/init.d/bluetooth status

　- bluetooth.service - Bluetooth service
　-    Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled)
　-    Active: active (running) since Tue 2016-10-11 18:15:24 JST; 35min ago
　-      Docs: man:bluetoothd(8)
　-  Main PID: 23440 (bluetoothd)
　-    Status: "Running"
　-    CGroup: /system.slice/bluetooth.service
　-            └─23440 /usr/lib/bluetooth/bluetoothd --compat
```

#3. hciconfigが起動しているか確認。
```
sudo hciconfig

   - hci0:    Type: BR/EDR  Bus: USB
   -     BD Address: 00:1B:DC:06:32:C6  ACL MTU: 310:10  SCO MTU: 64:8
   -     DOWN
   -     RX bytes:82948893 acl:272264 sco:0 events:755 errors:0
   -     TX bytes:14924 acl:277 sco:0 commands:188 errors:0
```
DOWNなら、

```
sudo hcicofig hic0 up

　- hci0:    Type: BR/EDR  Bus: USB
　-     BD Address: 00:1B:DC:06:32:C6  ACL MTU: 310:10  SCO MTU: 64:8
　-     UP RUNNING PSCAN ISCAN
　-     RX bytes:82950062 acl:272264 sco:0 events:796 errors:0
　-     TX bytes:15642 acl:277 sco:0 commands:226 errors:0
```
で起動。

#4. ペアリング
``sudo hciconfig hci0 piscan``で発見されるモードに。
その後、Mac側でペアリングを行う。

もしくは
``bluetoothctl``で対話型の操作に切り替える。
``pair XX:XX…``でペアリング要請。
``connect XX:XX…``で接続。
``trust XX:XX…``で次回時、自動で接続する。
##※「bluez-util」というパッケージは、jessieのバージョンでは存在しません!!!!
古い記事ではこの``bluez-util``をインストールし``bluetooth-agent``などのコマンドを使用する方法をよく見かけますが、「bluez-util」というパッケージは、jessieのバージョンでは存在しません!!!!
深追いせず、``bluetoothctl``を使用することをお勧めします。

#5. シリアル通信
##SDPにSPPを追加する。
``sdptool browse local``で登録されているサービスを確認する。
###・Failed to connect to SDP server on FF:FF:FF:00:00:00: No such file or directoryとエラーが出た場合。
``sudo nano /etc/systemd/system/dbus-org.bluez.service``で以下を書き換える。

``ExecStart=/usr/lib/bluetooth/bluetoothd ``部分を。
``ExecStart=/usr/lib/bluetooth/bluetoothd --compat``に書き換える。

書き換え後、
``sudo systemctl daemon-reload ``
``sudo systemctl restart bluetooth ``でBluetooth関連をrestart。
``sudo chmod 777 /var/run/sdp ``パーミッションを変更。

これでSDPの起動が確認できる。
(bluetooth関連をリスタートしているのでもう一度諸々を立ち上げないといけない。)

###・サービス内にserialportがない場合。
``sdptool add --channel=22 SP``で追加する。

###・再度確認。
```
spdtool browse local

                   　　~略~
            - Service Name: Serial Port
            - Service Description: COM Port
            - Service Provider: BlueZ
            - Service RecHandle: 0x10008
            - Service Class ID List:
            -   "Serial Port" (0x1101)
            - Protocol Descriptor List:
            -   "L2CAP" (0x0100)
            -   "RFCOMM" (0x0003)
            -     Channel: 22
            - Language Base Attr List:
            -   code_ISO639: 0x656e
            -   encoding:    0x6a
            -   base_offset: 0x100
            - Profile Descriptor List:
            -   "Serial Port" (0x1101)
            -     Version: 0x0100
```

###・RasPi側の待ち受け状態。
下記コマンドで待ち受け状態に。

```
sudo rfcomm listen /dev/rfcomm0 22

　 - Waiting for connection on channel 22

```
接続後の表示。

```
sudo rfcomm listen /dev/rfcomm0 22

　 - Waiting for connection on channel 22
　 - Connection from XX:XX:XX... to /dev/rfcomm0
        - Press CTRL-C for hangup

```

###・Mac側からの接続
ポートの確認。

```
 ls -l /dev/tty.*

　　 - crw-rw-rw-  1 root  wheel   17,   0 10 11 18:01 /dev/tty.Bluetooth-Incoming-Port
　　 - crw-rw-rw-  1 root  wheel   17,   2 10  8 16:01 /dev/tty.Bluetooth-Modem
　　 - crw-rw-rw-  1 root  wheel   17,  22 10 12 08:17 /dev/tty.pi-SerialPort

```

``screen /dev/tty.pi-SerialPort``で接続。

##・テスト
###・接続のテスト
RasPi側でもう一枚terminalを開き接続の確認を行う。
``sudo echo “hello” > /dev/rfcomm0``
Mac側のterminalに hello と表示がされていれば成功。

#CUI非ログイン状態での通信についても今後書く予定です。
予定は未定です...。