我有Raspberry pi模型B用Rasbian OS启动,并插入蓝牙加密狗。我可以在从PC上搜索时发现我的pi,并且能够使用Blueman GUI进行配对。这是我用于配对过程的python程序:
from bluetooth import *
server_sock=BluetoothSocket(L2CAP)
server_sock.bind(("", 17))
with open(sys.path[0] + "/sdp_record.xml", "r") as fh:
service_record = fh.read()
self.bus = dbus.SystemBus()
self.manager = dbus.Interface(self.bus.get_object("org.bluez", "/"),"org.bluez.Manager")
adapter_path = self.manager.DefaultAdapter()
self.service = dbus.Interface(self.bus.get_object("org.bluez",adapter_path),
"org.bluez.Service")
service_handle = service.AddRecord(service_record)
print "Service record added"
server_sock.listen(1)
print("Waiting for connection on L2CAP")
try:
client_sock, client_info = server_sock.accept()
print("Accepted connection from ", client_info)
while True:
data = client_sock.recv(1024)
if len(data) == 0:
break
print("received [%s]" % data)
except IOError:
pass
except KeyboardInterrupt:
print "Stopping..."
stop_advertising(server_sock)
sys.exit()
print("disconnected")
client_sock.close()
server_sock.close()
print("all done")
我已经有了正在运行的SDP记录,正在读取该记录并将其添加到SDP服务器。 起初,当我发布这个问题时,我收到了这个错误:
Traceback (most recent call last):
File "pytest.py", line 4, in <module>
server_sock.bind(("", 17))
File "/usr/lib/python2.7/dist-packages/bluetooth/bluez.py", line 140, in bind
return self._sock.bind (addrport)
_bluetooth.error: (13, 'Permission denied')
这是因为蓝牙需要root权限。我使用sudo python code.py
运行了python代码,此错误已解决。非常感谢回答的人。
现在我遇到的问题是,即使配对后套接字也没有被接受。对于配对,我在一个终端中运行代码,当它是waiting for connection on L2CAP
时,我打开另一个控制台并使用命令sudo bluez-simple-agent hci0 computers_macaddress
将pi与我的计算机配对,它在两个输入引脚后都会配对pi和电脑。但在配对之后,代码仍在等待连接:
Service record added
Waiting for connection on L2CAP
似乎是在那个server_sock.accept()函数上循环。
任何人都可以提供解决方案吗?
答案 0 :(得分:2)
我也面临同样的问题。问题在于pi的运行能力。 USB端口通常仅提供500 mA, 5 V
。树莓派需要大约4.75 to 5.25V
的电压源和700 to 1000 mA
范围内的电流以获得最佳性能。确切地说,Raspberry Pi需要多少电流(mA)取决于您连接到它的内容。尝试更换信号源,通过1000 mA 5v适配器获取电源。
如果有效,请告诉我。