【问题标题】:For bluetooth connection using PyBluez, socket connection is not getting accepted even after pairing对于使用 PyBluez 的蓝牙连接,即使在配对后也不会接受套接字连接
【发布时间】:2016-04-30 22:27:33
【问题描述】:

我有一个用 Rasbian OS 启动的树莓派 B 型,并插入了一个蓝牙加密狗。从我的 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 和计算机中输入一个 pin 后它就会配对.但是配对后,代码还在等待连接:

Service record added
Waiting for connection on L2CAP

似乎在 server_sock.accept() 函数处循环。

谁能给出解决方案?

【问题讨论】:

  • 使用sudo运行服务器脚本。
  • 哦。对。谢谢。它现在运行。但另一个问题是,即使在配对后它仍处于waiting for connection 状态。对于配对,我在一个终端中运行这个程序,并使用另一个终端使用命令进行配对:sudo bluez-simple-agent hci0 macaddress,即使配对后,套接字连接也不会被接受。它似乎在 .accept() 函数本身中循环。如何解决这个问题?还是配对后我必须在另一端运行另一个客户端程序?

标签: python bluetooth pybluez


【解决方案1】:

我也遇到了同样的问题。问题在于 pi 的运行能力。 USB 端口通常只提供500 mA, 5 V。 Raspberry pi 需要大约4.75 to 5.25V 的电压源和700 to 1000 mA 范围内的电流才能获得最佳性能。 Raspberry Pi 需要多少电流 (mA) 取决于您连接到它的设备。尝试更换电源,通过 1000 mA 5v 适配器获取电源。 让我知道它是否有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 2012-08-25
    • 2014-03-27
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多