14

Python 3.3 には、Bluetooth ソケットのネイティブ サポートが付属しています。残念ながら、まだ十分に文書化されていません (文書には 1 つしか言及されていません)

グーグルで検索すると、クライアントの実装に関するブログ投稿がありますが、サーバーの作成に関するものは見つかりませんでした。

より具体的には、ユーザーフレンドリーな名前を設定し、サービスを宣伝する方法。

だから、次のようなもの

import socket

serverSocket = socket.socket(socket.AF_BLUETOOTH,
                             socket.SOCK_STREAM,
                             socket.BTPROTO_RFCOMM)
serverSocket.setTimeout(1)
serverSocket.bind(("", 1))
serverSocket.listen(1)

something.advertise_service(something something)

何か案は?

4

1 に答える 1

14

悪いニュース: Python は、すぐにやりたいことをサポートしていないようです。(少なくともsocketmodule.cにはありません)。

pybluez2009 年以来更新されていませんが、私が見たほとんどの python/bluetooth ユーザーが使用しています。

朗報: ソース (Linux 接続用) を調べたところ、広告サービスに関連するビットが見つかりました。ほとんどのコードは、基本的に の python 2.2 バージョンからコピーして貼り付けたものですsocketmodule.c

pybluezsocketこれらすべての Bluetooth グッズを実装するために、オブジェクトにいくつかの追加機能を定義します。低レベルになりすぎず、代わりに依存しBlueZています。私が知る限り、それは基本的に python オブジェクトを取り、期待されるデータ構造を作成し、それBlueZを呼び出すだけです。を使用したくない/使用できない場合はpybluez、この不足している機能を何らかの方法で実装する必要があります。c-typesでできると思います。サービスを宣伝するための関連部分は、 btmodule.cの 2562 ~ 2642 行にあります。

のソースに python-3 ブランチがありますが、pybluez動作するかどうかはわかりません。

を使用することにした場合は、そのソースpybluezから取られた例

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

port = server_sock.getsockname()[1]

uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee"

advertise_service(server_sock, "SampleServer",
                  service_id = uuid,
                  service_classes = [ uuid, SERIAL_PORT_CLASS ],
                  profiles = [ SERIAL_PORT_PROFILE ], 
                  )

Google Code が閉鎖されるため、コードは github hereにもあります。

于 2013-04-29T23:08:52.980 に答える