如何通过python通过蓝牙发送消息而无需类型号码等密钥认证?
我使用了pybluez 但我得到了这个错误:File "./send", line 12, in <module>
connect()
File "./send", line 8, in connect
sock.connect((bd_addr, port))
File "<string>", line 5, in connect
bluetooth.btcommon.BluetoothError: (111, 'Connection refused')
这是代码
#!/usr/bin/python
import bluetooth
def connect ():
bd_addr = "x:x:x:x:x:x"
port = 1
sock=bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect((bd_addr, port))
sock.send("hello!!")
sock.close()
connect()
答案 0 :(得分:8)
正如@TJD所说,您需要确保使用正确的端口绑定所需的服务。
>>> from bluetooth import *
>>> from pprint import pprint
>>>
>>> devices = discover_devices()
>>> devices
['xx:yy:tt:zz:44:BD', '00:yy:72:zz:bb:aa']
然后,第二步尝试在您要连接的设备上找到该服务。
>>> service = find_service(address='00:yy:72:zz:bb:aa')
>>> pprint(service)
[{'description': None,
'host': '00:yy:72:zz:bb:aa',
'name': 'Headset Audio Gateway',
'port': 12,
'profiles': [('1108', 258)],
...},
{'description': None,
'host': '00:yy:72:zz:bb:aa',
'name': 'Dial-Up Networking',
'port': 1,
'profiles': [('1103', 256)],
'protocol': 'RFCOMM',
...}]
根据此信息,您可以连接到设备上运行的服务。根据服务/配置文件specification,您可以发送特定于服务的命令并从设备获取信息。例如。在上面的列表中,您可以看到“Headset Audio Gateway”和配置文件列表,其中包含数字“1108”,这是该服务的简短uuid。您现在可以查找此配置文件的命令,它应该可以正常工作。
答案 1 :(得分:3)
我有同样的错误。绑定地址后,错误就消失了。
rfcomm bind 0 <address> 1
0表示您的蓝牙设备。 1指的是端口号。 如果你正在运行linux,你可以运行 hciconfig 到设备号。
答案 2 :(得分:0)
您是否尝试过使用pybluez的基本rfcomm-client和rfcomm-server示例代码?
http://code.google.com/p/pybluez/source/browse/trunk/examples/simple/rfcomm-client.py
它基本上是您的代码正在做的事情,但它使用服务发现来确保连接到正确的端口。