#古い記事に翻弄された情弱が送る、まとめ。
###目的
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ログイン時を想定しています。
- USBドングルが認識されているか確認。
- bluetoothモジュールが起動しているか確認。
- hciconfigが起動しているか確認。
- ペアリング
- シリアル通信
- テスト
#はじめに
この手引きは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非ログイン状態での通信についても今後書く予定です。
予定は未定です...。