0

AndroidにBluetoothクライアントがあり、RFCOMMを使用して、UUID00001101-0000-1000-8000-00805F9B34FBを使用してコンピューターに接続する必要があります。

PyBluezライブラリとPython2.6が使用されます。PyBluezドキュメントの次のコードを使用しました

from bluetooth import *

server_sock=BluetoothSocket( RFCOMM )
server_sock.bind(("",PORT_ANY))
server_sock.listen(1)

port = server_sock.getsockname()[1]
uuid = "00001101-0000-1000-8000-00805F9B34FB"
advertise_service( server_sock, "SampleServer",
                   service_id = uuid,
                   service_classes = [ uuid, SERIAL_PORT_CLASS ],
                   profiles = [ SERIAL_PORT_PROFILE ], 
                   )

print "Waiting for connection on RFCOMM channel %d" % port
client_sock, client_info = server_sock.accept()
print "Accepted connection from ", client_info

try:
    while True:
        data = client_sock.recv(1024)
        if len(data) == 0: break
        print "received [%s]" % data
except IOError:
    pass

print "disconnected"
client_sock.close()
server_sock.close()
print "all done"

Windows7では完全に正常に動作します。

しかし、Windows XP上の別のコンピュータとの反応はありません。つまり、コードは「RFCOMMチャネルでの接続を待機しています」という行に留まります。ただし、Bluetoothクライアントから接続されていると警告されます。

このWindowsXPコンピュータのBluetooth構成により、Bluetoothとのシリアル通信用にCOMポートを設定できます。この構成済みのCOMポートでリッスンすると、Bluetoothクライアントからのデータを確認できます。

私はどのWindowsコンピューターでもコードを動作させることを好みますが、これらのコンピューターで仮想COMポートを構成したくありません。したがって、上記のプログラムはWindowsXPコンピュータでも動作するようにしたいと思います。

何が恋しいですか?仮想シリアルポートでデータを再生する機能を無効にしても、WindowsXPコンピュータがBluetoothデータをプログラムに転送しないかのようです。私が使用しているUUIDはよく知られているようですが、プログラムを別の特定のプラットフォームと互換性を持たせるには、これを使用する必要があります。

Windows7コンピューターのBluetoothスタックはAtherosCommunicationsのものであり、WindowsXPコンピューターのBluetoothスタックはWidcommのものです。

4

1 に答える 1