Edited at

【Raspberry PI & Garmin GLO】ラズパイに Bluetooth GPSを接続するまで

More than 3 years have passed since last update.


使用機材

Raspberry PI B+

raspbian: raspberrypi 3.18.7+ #755 PREEMPT Thu Feb 12 17:14:31 GMT 2015

Garmin GLO: Bluetooth GPSレシーバ

Bluetoothドングル: Elecom-Logitec LBT-UAN04C1 (Linuxだと定評あるCSR社チップセット)


準備

モジュール類を導入しましょう



apt-get install bluez bluez-utils

python ver.2でのコーディングをする向きには apt-get install python-bluez も忘れずに


コマンドラインでのGarmin GLO接続テスト

(1) hcitool scan

Garmin GLO をスキャンします。12:34:56:78:90:AB みたいなアドレスが表示されるはず。

(2) ポート接続



sudo rfcomm bind /dev/rfcomm1 12:34:56:78:90:AB 1



これで、Garmin GLO のVirtual COMポートが、/dev/rfcomm1として作成されます。ですが、GLOのbluetooth状態LEDは、ゆっくりとした点滅のままです。(ペアリングされた状態ではありません)

(3) ポートからのデータ吸出し

お手軽は方法としては



cat < /dev/rfcomm1



です。これを実行すると遅れてGLOのbluetooth状態LEDが点灯した状態(すなわちペアリング状態)となり、コンソールにNMEA出力が表示されます。終了時はctrl-cで抜けてください。

もしくは、



dd if=/dev/rfcomm1 of= ...



もOKです。


Python (ver.2)

python ver.2では、PyBluezを使用します。



sudo apt-get install python-bluez



で導入しましょう。

import bluetooth

bd_addr = "12:34:56:78:90:AB"
port = 1

sock=bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect((bd_addr, port))
data=sock.recv(1024)

sock.close()
print data

この場合、sock.recv()の返す data は、str型となります。


Python3

python3では、標準のsocketモジュールを使用します。

import socket

bd_addr = "12:34:56:78:90:AB"
port = 1

sock = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM)
sock.connect((bd_addr, port))
data = sock.recv(1024)

sock.close()

dataReadable = data.decode('utf-8')
print(dataReadable)

この場合、sock.recv()の返す data は、bytes型となります。ですので、decode()にてstrへ変換しましょう。