Для подключения через Bluetooth с использованием PyBluez, подключение к сокету не принимается даже после подключения

У меня Raspberry Pi Model B, загруженная с ОС Rasbian, и к ней подключен ключ Bluetooth. Я могу обнаружить свой пи при поиске с моего компьютера и могу выполнить сопряжение с помощью 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')

Это потому, что для bluetooth нужны привилегии root. Я запустил код Python, используя sudo python code.py и эта ошибка была устранена. Большое спасибо ребятам, которые ответили.

Теперь проблема, которую я получаю, заключается в том, что сокетное соединение не принимается даже после сопряжения. Для сопряжения я запускаю код в одном терминале, и когда он waiting for connection on L2CAP, Я открываю другую консоль и соединяю пи с моим компьютером, используя команду sudo bluez-simple-agent hci0 computers_macaddress, он становится парным после ввода пин-кода в пи и компьютер. Но после сопряжения код все еще ожидает подключения:

Service record added
Waiting for connection on L2CAP

Кажется, что он зацикливается на этой функции server_sock.accept().

Кто-нибудь может дать решение?

1 ответ

Решение

Я также столкнулся с такой же проблемой. Проблема была с рабочей мощностью пи. USB-порты обычно обеспечивают только 500 mA, 5 V, Raspberry Pi нужен источник напряжения около 4.75 to 5.25V и ток в диапазоне 700 to 1000 mA для оптимальной производительности. Сколько именно тока (мА) требуется Raspberry Pi, зависит от того, что вы к нему подключите. Попробуйте поменять источник, подайте питание через адаптер на 1000 мА на 5В. Дайте мне знать, если это сработало.

Другие вопросы по тегам