2016-05-26 23 views
3

私はBluetoothデバイスを検索し、RFCOMMを使用してPythonスクリプトを作成しています。このデバイスにはパスキー/パスワードがあります。私はPyBlueZを使用しています。私が知る限り、このライブラリはPasskey/Password接続(Python PyBluez connecting to passkey protected device)を処理できません。Pythonでパスワードキー/パスワードを使用したBluetoothデバイスのペアリング - RFCOMM(Linux)

私がデバイスを検出し、その名前とアドレスを取得することができる午前:

nearby_devices = bluetooth.discover_devices(duration=4,lookup_names=True, 
                 flush_cache=True, lookup_class=False) 

しかし、使用して特定のデバイスに接続しようとした場合:

s = bluetooth.BluetoothSocket(bluetooth.RFCOMM) 
s.connect((addr,port)) 

私はエラー'Device or resource busy (16)'を取得します。

は私がと ブルートゥース・エージェント hcitoolを使用して、いくつかのbashのコマンドを試してみましたが、私はプログラム的接続を行う必要があります。ここに記載されている手順を使用してデバイスに接続することができました:How to pair a bluetooth device from command line on Linux

パスワードキー/パスワードで誰かがBluetoothデバイスに接続しているかどうかを質問したいと思います。私は、subprocess.call()を使ってPythonでbashコマンドを使うことを考えていますが、それが良い考えであるかどうかはわかりません。

ありがとうございました。

答えて

5

最後に、PyBlueZを使用してデバイスに接続できます。私はこの答えが将来他の人に役立つことを願っています。私は以下を試した:

まず、モジュールをインポートしてデバイスを発見する。

接続するデバイスを検出すると、ポート、アドレス、およびパスキーを知る必要があります。その情報は次のとおりです:

name = name  # Device name 
addr = addr  # Device Address 
port = 1   # RFCOMM port 
passkey = "1111" # passkey of the device you want to connect 

# kill any "bluetooth-agent" process that is already running 
subprocess.call("kill -9 `pidof bluetooth-agent`",shell=True) 

# Start a new "bluetooth-agent" process where XXXX is the passkey 
status = subprocess.call("bluetooth-agent " + passkey + " &",shell=True) 

# Now, connect in the same way as always with PyBlueZ 
try: 
    s = bluetooth.BluetoothSocket(bluetooth.RFCOMM) 
    s.connect((addr,port)) 
except bluetooth.btcommon.BluetoothError as err: 
    # Error handler 
    pass 

今すぐ接続しました!あなたが仕事のためにあなたのソケットを使用することができます以下のものが必要です。

s.recv(1024) # Buffer size 
s.send("Hello World!") 

公式PyBlueZのマニュアルがあるhere

関連する問題