Python 3.3附带了对蓝牙套接字的原生支持。不幸的是,它还没有太多文献记载(只有一个提到它 文件)。
谷歌搜索它 一篇博文 关于实现客户端,但我找不到有关创建服务器的任何信息。
更具体地说,如何设置用户友好名称并宣传服务。
所以,像
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)
有任何想法吗?
坏消息:
Python似乎不支持你想要开箱即用的东西。 (至少不在 socketmodule.c)。
我见过的大多数python / bluetooth用户都使用过 pybluez
虽然自2009年以来尚未更新。
好消息:
我浏览了他们的源代码(用于Linux连接),并找到了广告服务的相关位。大多数代码基本上都是从python 2.2版本中复制粘贴的 socketmodule.c
。
pybluez
确实为a定义了一些额外的功能 socket
反对实现所有那些蓝牙的好东西。它不会太低级,而是取决于 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 ],
)
随着谷歌代码关闭,代码也可以在github上找到 这里。